PHP - Enviar PUSH Notifications con Ph3nol/NotificationPusher

Nov 25, 2015 8:00:00 AM / by daniel.comas

 

Enviar Push Notifications siempre ha sido un clásico. Vamos a ver como podemos hacerlo con una librería que unifica las dos plataformas Apple (APS) e Android (GCM) de forma parecída a como lo hace PushSharp en .NET.

 

Apple (APS)

 

1) Exportaremos los .p12 del keychain en MAC OS X

 

2) Pasamos el certificado de .p12 a .pem exportado sin llave

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys

 

3) Pasamos el certificado de .p12 a .pem exportando con llave

openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes

4) Juntamos los dos certificados de los pasos 1) y 2) en uno:

cat newfile.crt.pem newfile.key.pem > apns-dev.pem

 

5) Estando en MAC OS X podéis provar que el certificado es válido con la siguiente instrucción:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev.pem -key newfile.key.pem

Si os dice que la conexión está abierta todo OK!

 

6) Ahora nos faltaría firmar nuestra app con el Provisioning Profile de Development o Distribution en Xcode.

 

7) En la App obtener el Token del servidor de Apple (APS). Con Ionic algo como esto:

 

config = {
"badge": "true",
"sound": "true",
"alert": "true"
};

config.ecb = "window.onNotificationAPN";

window.onNotificationAPN = function (event) {
var pushNotification = window.plugins.pushNotification;
if (event.alert) {
}
if (event.badge) {
$cordovaPush.setBadgeNumber(event.badge).then(function (result) {
}, function (err) {
});
}
if (event.sound) {
var snd = new Media(event.sound);
snd.play();
}
}

$cordovaPush.register(config).then(function (token) {
//We get the TOKEN ID
alert(token);
}, function (err) {
alert(err);
});

 

 

8) Ahora vamos a utilizar la librería de PHP con el certificado del paso 4) y el token del paso 7):

 

require_once '/vendor/autoload.php';

use Sly\NotificationPusher\PushManager,
Sly\NotificationPusher\Adapter\Apns as ApnsAdapter,
Sly\NotificationPusher\Collection\DeviceCollection,
Sly\NotificationPusher\Model\Device,
Sly\NotificationPusher\Model\Message,
Sly\NotificationPusher\Model\Push;

// First, instantiate the manager.
//
// Example for production environment:
// $pushManager = new PushManager(PushManager::ENVIRONMENT_PROD);
//
// Development one by default (without argument).
$pushManager = new PushManager(PushManager::ENVIRONMENT_DEV);

// Then declare an adapter.
$apnsAdapter = new ApnsAdapter(array(
'certificate' => 'apns-dev.pem'

));

// Set the device(s) to push the notification to.
$devices = new DeviceCollection(array(
new Device('DEVICE TOKEN')
));

// Then, create the push skel.
$message = new Message('This is a basic example of push.', array(
'badge' => 1,
'sound' => 'sound.caf',
'custom' => array('custom data' => array(
'we' => 'want', 'send to app'
))));

// Finally, create and add the push to the manager, and push it!
$push = new Push($apnsAdapter, $devices, $message);
$pushManager->add($push);
$pushManager->push();

 

Android (GCM)

 

Con Android ya comentámos en post anteriores como se obtenía la API KEY, como no tiene ninguna complicación añadida podéis ver el código de la librería.

 

 

Topics: Ingens Developments, Programación, APS, GCM, PHP, Push Notifications, Server

daniel.comas

Written by daniel.comas

Lists by Topic

see all
Servicios gestionados

Categorías

Ver todas