Visão geral
O KlugPush traz notificações push remotas para apps AIR no macOS. Ele registra o app no serviço de notificações push da Apple, fornece o token do dispositivo para o seu servidor e entrega as notificações recebidas ao ActionScript.
No macOS, um usuário que recusou notificações uma vez não é perguntado de novo. Por isso, o KlugPush informa a situação atual da permissão a qualquer momento e abre a página Notificações dos Ajustes do Sistema, para que os usuários possam ativar as notificações depois.
O KlugPush é usado diariamente na versão para Mac de nossos apps, nossa prova de conceito.
Recursos
- Autossuficiente: uma ANE, sem biblioteca principal nem ANEs de dependência para adicionar
- Solicita a permissão e registra para notificações remotas
- Token do dispositivo para o seu servidor, assim que o registro termina
- Notificações recebidas entregues ao ActionScript como JSON
- Status da permissão em tempo real: ainda não decidido, negado ou permitido
- Abre os Ajustes do Sistema diretamente em Notificações
- Enviado diretamente pelo serviço de push da Apple, sem necessidade de outro provedor de push
Plataformas compatíveis
Em outras plataformas, isSupported retorna false, de modo que o mesmo código pode permanecer em um app multiplataforma.
Primeiros passos
Adicione a extensão ao descritor do seu aplicativo:
<extensions>
<extensionID>com.klug.push.Push</extensionID>
</extensions>
O app precisa ser assinado com a entitlement de notificações push e um perfil de provisionamento que inclua a capability Push Notifications.
Exemplos de código
Quatro fluxos completos, extraídos da API que roda na versão para Mac de nossos apps. Cada chamada retorna imediatamente; os resultados chegam por meio dos seus callbacks e como StatusEvents. Documentação 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
Visão geral da API
| Push.getInstance() | Retorna a instância única. |
| isSupported | Verdadeiro no macOS, falso nas demais plataformas. |
| register(onToken, onError, onNotification) | Solicita a permissão e registra para notificações remotas. Os três callbacks são opcionais; onNotification é disparado enquanto o app está em execução. Retorna false onde não há suporte a push. |
| token | O último token do dispositivo, ou null até o registro terminar. |
| authStatus | O último status de permissão conhecido; -1 até que register() ou refreshStatus() tenha sido executado. |
| refreshStatus(onStatus) | Lê o status atual da permissão; onStatus(status:int) é chamado quando ele chega, e de novo com a resposta ao pedido de register(). |
| openSettings() | Abre os Ajustes do Sistema em Notificações. |
| STATUS_NOT_DETERMINED, STATUS_DENIED, STATUS_AUTHORIZED | Valores de status de permissão 0, 1 e 2. O macOS também pode informar 3 (provisório) e 4 (efêmero). |
| TOKEN, ERROR, NOTIFICATION | Níveis de StatusEvent para listeners: o nível indica o tipo, o código traz o valor. |
Eventos
| nível token | code = o token do dispositivo, uma string hexadecimal |
| nível error | code = a mensagem de erro do registro |
| nível notification | code = o payload da notificação em JSON |
Compre o KlugPush
Uma licença anual para um app AIR, com todas as atualizações por 12 meses. Após o pagamento, você recebe a extensão, a biblioteca ActionScript e a documentação por e-mail, normalmente em até um dia útil. Licença e termos
- Licença para um app AIR
- Todas as atualizações por 12 meses
- Sem suporte
- Licença para um app AIR
- Todas as atualizações por 12 meses
- Resposta por e-mail em até 7 dias
- Licença para um app AIR
- Todas as atualizações por 12 meses
- Resposta por e-mail em até 48 horas
Requisitos
| AIR SDK | 51.x (HARMAN) |
| macOS | macOS 11 ou posterior |
| Assinatura | Entitlement de notificações push e um perfil de provisionamento correspondente |
| Servidor | Envia notificações pelo serviço de push da Apple |