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/