← Todas as extensões

Extensão nativa

KlugPush

com.klug.push.Push

NÃO É NECESSÁRIO APM. Baixe e aproveite. Não tem como ser mais simples.

Notificações push remotas para apps AIR no Mac, com o status de permissão em tempo real e um atalho para os ajustes do sistema.


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

macOS Apple silicon · Intel

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:

app.xml
<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 →

1 · Registrar e enviar o token ao seu servidor
Push.as
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 );
}
2 · Notificações enquanto o app está em execução
Incoming.as
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 );
}
3 · Status da permissão e Ajustes do Sistema
Settings.as
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 );
});
4 · Ouvir com eventos em vez de callbacks
Events.as
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.
isSupportedVerdadeiro 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.
tokenO último token do dispositivo, ou null até o registro terminar.
authStatusO ú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_AUTHORIZEDValores de status de permissão 0, 1 e 2. O macOS também pode informar 3 (provisório) e 4 (efêmero).
TOKEN, ERROR, NOTIFICATIONNíveis de StatusEvent para listeners: o nível indica o tipo, o código traz o valor.

Eventos

nível tokencode = o token do dispositivo, uma string hexadecimal
nível errorcode = a mensagem de erro do registro
nível notificationcode = 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

Simples
€19 / ano
  • Licença para um app AIR
  • Todas as atualizações por 12 meses
  • Sem suporte
Comprar Simples
Padrão
€149 / ano
  • Licença para um app AIR
  • Todas as atualizações por 12 meses
  • Resposta por e-mail em até 7 dias
Comprar Padrão
Prioritário
€299 / ano
  • Licença para um app AIR
  • Todas as atualizações por 12 meses
  • Resposta por e-mail em até 48 horas
Comprar Prioritário
Os impostos são calculados no checkout pelo Link (Stripe). Você informa o ID do aplicativo do seu app AIR durante o checkout.

Requisitos

AIR SDK51.x (HARMAN)
macOSmacOS 11 ou posterior
AssinaturaEntitlement de notificações push e um perfil de provisionamento correspondente
ServidorEnvia notificações pelo serviço de push da Apple