Oversigt
KlugPush bringer remote push-notifikationer til AIR-apps på macOS. Den registrerer appen hos Apples push-notifikationstjeneste, giver dig enhedstokenet til din server og leverer indkommende notifikationer til ActionScript.
På macOS bliver en bruger, der engang har afvist notifikationer, ikke spurgt igen. KlugPush rapporterer derfor den aktuelle tilladelsesstatus til enhver tid og åbner siden Notifikationer i Systemindstillinger, så brugerne kan slå notifikationer til senere.
KlugPush er i daglig brug i Mac-versionen af vores apps, vores proof of concept.
Funktioner
- Selvstændig: én ANE, intet kernebibliotek eller afhængige ANE'er at tilføje
- Anmoder om tilladelse og registrerer til remote notifikationer
- Enhedstoken til din server, så snart registreringen er færdig
- Indkommende notifikationer leveret til ActionScript som JSON
- Live tilladelsesstatus: endnu ikke afgjort, afvist eller tilladt
- Åbner Systemindstillinger direkte ved Notifikationer
- Sendes direkte gennem Apples push-tjeneste, ingen ekstra push-udbyder nødvendig
Understøttede platforme
På andre platforme returnerer isSupported false, så den samme kode kan blive i en cross-platform-app.
Kom i gang
Tilføj udvidelsen til din applikationsdescriptor:
<extensions>
<extensionID>com.klug.push.Push</extensionID>
</extensions>
Appen skal være signeret med push-notifikations-entitlementet og en provisioning profile, der inkluderer capability'en Push Notifications.
Kodeeksempler
Fire komplette flows, taget fra den API, der kører i Mac-versionen af vores apps. Hvert kald vender straks tilbage; resultater ankommer via dine callbacks og som StatusEvents. Fuld dokumentation →
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
API-oversigt
| Push.getInstance() | Returnerer den enkelte instans. |
| isSupported | Sand på macOS, falsk andre steder. |
| register(onToken, onError, onNotification) | Anmoder om tilladelse og registrerer til remote notifikationer. Alle tre callbacks er valgfrie; onNotification udløses, mens appen kører. Returnerer false, hvor push ikke understøttes. |
| token | Det seneste enhedstoken, eller null, indtil registreringen er færdig. |
| authStatus | Den senest kendte tilladelsesstatus; -1, indtil register() eller refreshStatus() er kørt. |
| refreshStatus(onStatus) | Læser den aktuelle tilladelsesstatus; onStatus(status:int) kaldes, når den ankommer, og igen med svaret på prompten fra register(). |
| openSettings() | Åbner Systemindstillinger ved Notifikationer. |
| STATUS_NOT_DETERMINED, STATUS_DENIED, STATUS_AUTHORIZED | Værdier for tilladelsesstatus 0, 1 og 2. macOS kan også rapportere 3 (provisional) og 4 (ephemeral). |
| TOKEN, ERROR, NOTIFICATION | StatusEvent-niveauer til listeners: niveauet angiver typen, koden bærer værdien. |
Events
| level token | code = enhedstokenet, en hex-streng |
| level error | code = fejlmeddelelsen fra registreringen |
| level notification | code = notifikationens payload som JSON |
Køb KlugPush
En årlig licens til én AIR-applikation, med alle opdateringer i 12 måneder. Efter betaling modtager du udvidelsen, ActionScript-biblioteket og dokumentationen pr. e-mail, normalt inden for én hverdag. Licens og vilkår
- Licens til én AIR-applikation
- Alle opdateringer i 12 måneder
- Svar pr. e-mail inden for 7 dage
- Licens til én AIR-applikation
- Alle opdateringer i 12 måneder
- Svar pr. e-mail inden for 48 timer
Krav
| AIR SDK | 51.x (HARMAN) |
| macOS | macOS 11 eller nyere |
| Signering | Push-notifikations-entitlement og en tilhørende provisioning profile |
| Server | Sender notifikationer gennem Apples push-tjeneste |