Resumen
KlugPush lleva las notificaciones push remotas a las apps AIR en macOS. Registra la app en el servicio de notificaciones push de Apple, te da el token del dispositivo para tu servidor y entrega las notificaciones entrantes a ActionScript.
En macOS, a un usuario que rechazó las notificaciones una vez no se le vuelve a preguntar. Por eso KlugPush informa del estado actual de los permisos en cualquier momento y abre la página de Notificaciones en Ajustes del Sistema, para que los usuarios puedan activarlas más adelante.
KlugPush se usa a diario en la versión para Mac de nuestras apps, nuestra prueba de concepto.
Funciones
- Autónoma: una ANE, sin biblioteca central ni ANE de dependencias que añadir
- Solicita permiso y se registra para notificaciones remotas
- Token del dispositivo para tu servidor, en cuanto termina el registro
- Notificaciones entrantes entregadas a ActionScript como JSON
- Estado de los permisos en tiempo real: aún sin decidir, denegado o permitido
- Abre Ajustes del Sistema directamente en Notificaciones
- Se envían directamente a través del servicio push de Apple, sin necesidad de otro proveedor de push
Plataformas compatibles
En otras plataformas isSupported devuelve false, por lo que el mismo código puede permanecer en una app multiplataforma.
Primeros pasos
Añade la extensión al descriptor de tu aplicación:
<extensions>
<extensionID>com.klug.push.Push</extensionID>
</extensions>
La app debe firmarse con el entitlement de notificaciones push y un perfil de aprovisionamiento que incluya la capacidad Push Notifications.
Ejemplos de código
Cuatro flujos completos, tomados de la API que funciona en la versión para Mac de nuestras apps. Cada llamada devuelve de inmediato; los resultados llegan mediante tus callbacks y como StatusEvents. Documentación completa →
import com.klug.push.Push; var push:Push = Push.getInstance(); if ( push.isSupported ) // macOS; false on every other platform { // asks for permission on the first start, then registers with Apple's push service. // The token also arrives when the user declines: permission only affects the display. push.register( onToken, onPushError, onNotification ); } function onToken( token:String ):void { if ( token != loadSavedToken() ) // your app functions sendTokenToServer( token ); // e.g. a POST to https://your.server/push } function onPushError( message:String ):void { // typical cause: the app is not signed with the push entitlement and a matching profile trace( "push registration failed: " + message ); }
function onNotification( json:String ):void { // the full payload as your server sent it: the "aps" part plus your own keys var payload:Object = JSON.parse( json ); if ( payload.hasOwnProperty( "stationId" ) ) // a key your server adds openLiveView( payload.stationId ); // your app function } // later, e.g. after the user signed in to another account function onLogin():void { if ( push.token != null ) // the last token; null until registration finished sendTokenToServer( push.token ); }
import flash.events.Event; import flash.desktop.NativeApplication; // the live status arrives asynchronously; the callback stays set and // also receives the answer when register() shows the prompt push.refreshStatus( updateNotificationSwitch ); function updateNotificationSwitch( status:int ):void { if ( status == Push.STATUS_AUTHORIZED ) showSwitch( "on" ); // your app function else if ( status == Push.STATUS_DENIED ) showSwitch( "off" ); else if ( status == Push.STATUS_NOT_DETERMINED ) showSwitch( "not asked" ); } // macOS never asks a second time: the way back is System Settings function onSwitchTapped():void { if ( push.authStatus == Push.STATUS_DENIED ) push.openSettings(); } // the user may have changed it there: read it again when the app comes back NativeApplication.nativeApplication.addEventListener( Event.ACTIVATE, function( e:Event ):void { push.refreshStatus( updateNotificationSwitch ); });
import flash.events.StatusEvent; push.addEventListener( StatusEvent.STATUS, function( e:StatusEvent ):void { // here the LEVEL names the kind and the CODE carries the value if ( e.level == Push.TOKEN ) sendTokenToServer( e.code ); else if ( e.level == Push.ERROR ) trace( "push error: " + e.code ); else if ( e.level == Push.NOTIFICATION ) onNotification( e.code ); // JSON }); push.register(); // all three callbacks are optional
Resumen de la API
| Push.getInstance() | Devuelve la instancia única. |
| isSupported | Verdadero en macOS, falso en el resto. |
| register(onToken, onError, onNotification) | Solicita permiso y se registra para notificaciones remotas. Los tres callbacks son opcionales; onNotification se dispara mientras la app está en ejecución. Devuelve false donde push no es compatible. |
| token | El último token del dispositivo, o null hasta que termina el registro. |
| authStatus | El último estado de permisos conocido; -1 hasta que se ejecuta register() o refreshStatus(). |
| refreshStatus(onStatus) | Lee el estado actual de los permisos; se llama a onStatus(status:int) cuando llega y de nuevo con la respuesta al aviso de register(). |
| openSettings() | Abre Ajustes del Sistema en Notificaciones. |
| STATUS_NOT_DETERMINED, STATUS_DENIED, STATUS_AUTHORIZED | Valores de estado de permisos 0, 1 y 2. macOS también puede informar 3 (provisional) y 4 (efímero). |
| TOKEN, ERROR, NOTIFICATION | Niveles de StatusEvent para los listeners: el nivel indica el tipo y el código lleva el valor. |
Eventos
| nivel token | code = el token del dispositivo, una cadena hexadecimal |
| nivel error | code = el mensaje de error del registro |
| nivel notification | code = el payload de la notificación como JSON |
Compra KlugPush
Una licencia anual para una aplicación AIR, con todas las actualizaciones durante 12 meses. Tras el pago recibes la extensión, la biblioteca ActionScript y la documentación por e-mail, normalmente en un día hábil. Licencia y términos
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Sin soporte
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 7 días
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 48 horas
Requisitos
| AIR SDK | 51.x (HARMAN) |
| macOS | macOS 11 o posterior |
| Firma | Entitlement de notificaciones push y un perfil de aprovisionamiento correspondiente |
| Servidor | Envía notificaciones a través del servicio push de Apple |