Översikt
KlugPush ger AIR-appar på macOS fjärrpushnotiser. Det registrerar appen hos Apples pushnotistjänst, ger dig enhetstoken för din server och levererar inkommande notiser till ActionScript.
På macOS tillfrågas en användare som en gång har tackat nej till notiser inte igen. KlugPush rapporterar därför när som helst den aktuella behörighetsstatusen och öppnar sidan Notiser i Systeminställningar, så att användare kan slå på notiser senare.
KlugPush används dagligen i Mac-versionen av våra appar, vårt proof of concept.
Funktioner
- Fristående: ett ANE, inget kärnbibliotek eller beroende-ANE:er att lägga till
- Ber om behörighet och registrerar för fjärrnotiser
- Enhetstoken till din server, så snart registreringen är klar
- Inkommande notiser levereras till ActionScript som JSON
- Live-status för behörighet: ännu inte avgjord, nekad eller tillåten
- Öppnar Systeminställningar direkt på Notiser
- Skickas direkt via Apples pushtjänst, ingen extra pushleverantör behövs
Plattformar som stöds
På andra plattformar returnerar isSupported false, så att samma kod kan ligga kvar i en plattformsoberoende app.
Kom igång
Lägg till tillägget i din applikationsbeskrivning (application descriptor):
<extensions>
<extensionID>com.klug.push.Push</extensionID>
</extensions>
Appen måste vara signerad med push-notifikationsbehörigheten (entitlement) och en provisioning profile som innehåller capability Push Notifications.
Kodexempel
Fyra kompletta flöden, hämtade från det API som körs i Mac-versionen av våra appar. Varje anrop returnerar direkt; resultat kommer via dina callbacks och som StatusEvents. Fullständig 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-översikt
| Push.getInstance() | Returnerar den enda instansen. |
| isSupported | True på macOS, false på övriga. |
| register(onToken, onError, onNotification) | Ber om behörighet och registrerar för fjärrnotiser. Alla tre callbacks är valfria; onNotification utlöses medan appen körs. Returnerar false där push inte stöds. |
| token | Den senaste enhetstoken, eller null tills registreringen är klar. |
| authStatus | Den senast kända behörighetsstatusen; -1 tills register() eller refreshStatus() har körts. |
| refreshStatus(onStatus) | Läser den aktuella behörighetsstatusen; onStatus(status:int) anropas när den kommer, och igen med svaret på frågan från register(). |
| openSettings() | Öppnar Systeminställningar på Notiser. |
| STATUS_NOT_DETERMINED, STATUS_DENIED, STATUS_AUTHORIZED | Behörighetsstatusvärdena 0, 1 och 2. macOS kan också rapportera 3 (provisional) och 4 (ephemeral). |
| TOKEN, ERROR, NOTIFICATION | StatusEvent-nivåer för lyssnare: nivån anger typen, koden bär värdet. |
Händelser
| level token | code = enhetstoken, en hexsträng |
| level error | code = felmeddelandet från registreringen |
| level notification | code = notisens nyttolast som JSON |
Köp KlugPush
En årslicens för en AIR-applikation, med alla uppdateringar i 12 månader. Efter betalning får du tillägget, ActionScript-biblioteket och dokumentationen via e-post, vanligtvis inom en arbetsdag. Licens och villkor
- Licens för en AIR-applikation
- Alla uppdateringar i 12 månader
- Ingen support
- Licens för en AIR-applikation
- Alla uppdateringar i 12 månader
- Svar via e-post inom 7 dagar
- Licens för en AIR-applikation
- Alla uppdateringar i 12 månader
- Svar via e-post inom 48 timmar
Krav
| AIR SDK | 51.x (HARMAN) |
| macOS | macOS 11 eller senare |
| Signering | Behörighet (entitlement) för pushnotiser och en matchande provisioning profile |
| Server | Skickar notiser via Apples pushtjänst |