Algumas vezes eu preciso enviar notificações push para apps mobile (Android ou iOS). Não é uma coisa difícil. Talvez seja um pequeno pesadelo nas primeiras vezes, mas quando você compreende o processo, é algo simples e direto. Nos últimos dias, eu descobri um serviço bacana chamado PushBullet. Ele permite que você instale um cliente em seu Android/IOS ou até mesmo no desktop, e envie notificações push entre eles.
O PushBullet também tem uma boa API, que permite a automatização das notificações push. Eu brinquei um pouquinho com a API e meu RaspberryPi – home server. É realmente simples para integrar a API com o seu backend Silex e enviar notificações push para os dispositivos registrados.
Eu criei um pequeno provedor de serviço que engloba a API. A ideia é usar uma aplicação Silex como esta:
use Silex\Application;
use PushSilex\Silex\Provider\PushbulletServiceProvider;
$app = new Application(['debug' => true]);
$myToken = include(__DIR__ . '/../conf/token.php');
$app->register(new PushbulletServiceProvider($myToken));
$app->get("/", function () {
return "Usage: GET /note/{title}/{body}";
});
$app->get("/note/{title}/{body}", function (Application $app, $title, $body) {
return $app->json($app['pushbullet.note']($title, $body));
});
$app->run();
Como você pode ver, estamos usando um provedor de serviços chamado PushbulletServiceProvider. Esse serviço oferece ‘pushbullet.note’ e permite enviar notificações push. Apenas precisamos configurar nosso Provedor de Serviço com o token do PushBullet.
<?php
namespace PushSilex\Silex\Provider;
use Silex\ServiceProviderInterface;
use Silex\Application;
class PushbulletServiceProvider implements ServiceProviderInterface
{
private $accessToken;
const URI = 'https://api.pushbullet.com/v2/pushes';
const NOTE = 'note';
public function __construct($accessToken)
{
$this->accessToken = $accessToken;
}
public function register(Application $app)
{
$app['pushbullet.note'] = $app->protect(function ($title, $body) {
return $this->push(self::NOTE, $title, $body);
});
}
private function push($type, $title, $body)
{
$data = [
'type' => $type,
'title' => $title,
'body' => $body,
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => self::URI,
CURLOPT_HTTPHEADER => ['Content-Type' => 'application/json'],
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $this->accessToken . ':',
CURLOPT_RETURNTRANSFER => true
]);
$out = curl_exec($ch);
curl_close($ch);
return json_decode($out);
}
public function boot(Application $app)
{
}
}
Geralmente eu uso Guzzle para lidar com clientes HTTP, mas nesse exemplo criei uma conexão direta.
Você pode ver o projeto no meu GitHub.
***
Gonzalo Ayuso faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://gonzalo123.com/2015/08/24/generating-push-notifications-with-pushbullet-and-silex/




