Zend_Mobile_Push_Mpns proporciona la capacidad de
enviar notificaciones push a Windows Phone. MPNS permite el envío de
3 tipos distintos de notificaciones, cuyo comportamiento común se encuentra en
la clase base Zend_Mobile_Push_Message_Mpns. Seguida de
clases específicas para notificaciones Raw, Toast y Tile.
![]() |
Nota |
|---|---|
Antes de enviar mensajes, debe implementar las prácticas descritas en Receiving Push Notifications for Windows Phone. |
Al implementar MPNS, dispone de varios componentes que
utilizará. Zend_Mobile_Push_Mpns,
que contiene los componentes de servidor, y
Zend_Mobile_Push_Message_Mpns_Raw, que
le permite enviar notificaciones
raw,
Zend_Mobile_Push_Message_Mpns_Toast, que
le permite enviar notificaciones
toast, y
Zend_Mobile_Push_Message_Mpns_Tile, que
le permite enviar notificaciones
tile. Cada mensaje enviado debe realizar una petición HTTP,
así que téngalo en cuenta al enviar en lotes grandes.
La implementación real del código es bastante mínima; sin embargo, deben tenerse en cuenta consideraciones para el manejo de errores.
$mpns = new Zend_Mobile_Push_Mpns();
$messages = array();
// raw notification
$message = new Zend_Mobile_Push_Message_Mpns_Raw();
$message->setToken('http://sn1.notify.live.net/throttledthirdparty/01.00/THETOKEN');
$message->setMessage('<notification><foo id="bar" /></notification>');
$messages[] = $message;
// toast message
$message = new Zend_Mobile_Push_Message_Mpns_Toast();
$message->setToken('http://sn1.notify.live.net/throttledthirdparty/01.00/THETOKEN');
$message->setTitle('Foo');
$message->setMessage('Bar');
$messages[] = $message;
// tile message
$message = new Zend_Mobile_Push_Mpns_Tile();
$message->setToken('http://sn1.notify.live.net/throttledthirdparty/01.00/THETOKEN');
$message->setBackgroundImage('foo.bar');
$message->setCount(1);
$message->setTitle('Bar Foo');
$messages[] = $message;
foreach ($messages as $m) {
try {
$mpns->send($m);
} catch (Zend_Mobile_Push_Exception_InvalidToken $e) {
echo 'Remove token: ' . $m->getToken() . PHP_EOL;
} catch (Zend_Mobile_Push_Exception $e) {
echo 'Error occurred, token: ' . $m->getToken() . ' - ' . $e->getMessage() . PHP_EOL;
}
}
Tabla 50.5. Excepciones y técnicas de solución
| Excepción | Significado | Solución |
|---|---|---|
| Zend_Mobile_Push_Exception | Este tipo de excepciones son de naturaleza más genérica y se lanzan desde MPNS o internamente al validar la entrada | Lea el mensaje y determine los pasos de solución. |
| Zend_Mobile_Push_Exception_DeviceQuotaExceeded | Ha enviado demasiados mensajes a este dispositivo; puede volver a intentarlo más tarde. | Vuelva a intentarlo más tarde o implemente Exponential Backoff . |
| Zend_Mobile_Push_Exception_InvalidPayload | Por lo general, el payload no generará una excepción a menos que su tamaño sea demasiado grande o le falte contenido obligatorio. | Compruebe que el tamaño del payload esté dentro de los requisitos de MPNS |
| Zend_Mobile_Push_Exception_InvalidToken | Cualquier forma de token no válido se producirá si el dispositivo ya no está suscrito, está inactivo o no es válido. | En algunos casos puede intentar reenviar en una hora; esto se indicará en la excepción. De lo contrario, deberá eliminar el token para que no se le vuelva a enviar. |
| Zend_Mobile_Push_Exception_QuotaExceeded | Ha alcanzado el límite de envíos por día. | La limitación por día solo se aplica a los servicios web no autenticados; deberá registrar su aplicación para notificaciones. |
MPNS ofrece la posibilidad de enviar mensajes más avanzados; por ejemplo, los ejemplos anteriores muestran la implementación más básica de un mensaje. Zend_Mobile_Push_Message_Mpns_* le permite realizar mensajes mucho más avanzados, tal como se describe a continuación.
Los mensajes Tile tienen atributos opcionales adicionales para Windows Phone 7.1+; debe asegurarse de que está enviando a un dispositivo con la versión adecuada, de lo contrario su notificación fallará.
$message = new Zend_Mobile_Push_Message_Mpns_Tile();
$message->setToken('http://sn1.notify.live.net/throttledthirdparty/01.00/THETOKEN'); // REPLACE WITH NOTIFICATION URI FROM MPNS
$message->setBackgroundImage('foo.jpg');
$message->setCount(1);
$message->setTitle('Bar');
// other optional attributes for wp7.1+
$message->setTileId('/Foo.xaml');
$message->setBackBackgroundImage('blue.jpg');
$message->setBackTitle('Bar');
$message->setBackContent('Foo Bar');
Los mensajes Toast tienen atributos opcionales adicionales para Windows Phone 7.1+; debe asegurarse de que está enviando a un dispositivo con la versión adecuada, de lo contrario su notificación fallará.
$message = new Zend_Mobile_Push_Message_Mpns_Toast();
$message->setToken('http://sn1.notify.live.net/throttledthirdparty/01.00/THETOKEN'); // REPLACE WITH NOTIFICATION URI FROM MPNS
$message->setTitle('Foo');
$message->setMessage('Bar');
// optional attributes for wp7.1+
$message->setParams('?bar=foo'); //optional parameters
![[Note]](images/note.png)