← Все расширения

Нативное расширение

KlugPush

com.klug.push.Push

APM НЕ НУЖЕН. Скачайте и пользуйтесь. Проще уже некуда.

Удалённые push-уведомления для приложений AIR на Mac, с актуальным статусом разрешения и быстрым переходом в системные настройки.

macOS В продакшене От €19 / год · Купить

Обзор

KlugPush добавляет удалённые push-уведомления в приложения AIR на macOS. Он регистрирует приложение в сервисе push-уведомлений Apple, выдаёт токен устройства для вашего сервера и доставляет входящие уведомления в ActionScript.

На macOS пользователя, однажды отклонившего уведомления, повторно не спрашивают. Поэтому KlugPush в любой момент сообщает текущий статус разрешения и открывает страницу «Уведомления» в системных настройках, чтобы пользователи могли включить уведомления позже.

KlugPush ежедневно используется в версии для Mac наших приложений, нашего доказательства работоспособности.

Возможности

  • Автономность: один ANE, без базовой библиотеки и зависимых ANE
  • Запрашивает разрешение и регистрирует приложение для удалённых уведомлений
  • Токен устройства для вашего сервера — сразу после завершения регистрации
  • Входящие уведомления передаются в ActionScript в виде JSON
  • Актуальный статус разрешения: ещё не решено, отклонено или разрешено
  • Открывает системные настройки сразу на странице «Уведомления»
  • Отправка напрямую через сервис push-уведомлений Apple, дополнительный push-провайдер не нужен

Поддерживаемые платформы

macOS Apple silicon · Intel

На других платформах isSupported возвращает false, поэтому один и тот же код можно оставить в кроссплатформенном приложении.

Начало работы

Добавьте расширение в дескриптор вашего приложения:

app.xml
<extensions>
    <extensionID>com.klug.push.Push</extensionID>
</extensions>

Приложение должно быть подписано с правом push-уведомлений (entitlement) и профилем подготовки, включающим возможность Push Notifications.

Примеры кода

Четыре полных сценария из API, который работает в версии наших приложений для Mac. Каждый вызов возвращается сразу; результаты приходят через ваши обратные вызовы и в виде StatusEvent. Полная документация →

1 · Регистрация и отправка токена на ваш сервер
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 · Уведомления, пока приложение запущено
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 · Статус разрешения и системные настройки
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 · Прослушивание событий вместо обратных вызовов
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

Обзор API

Push.getInstance()Возвращает единственный экземпляр.
isSupportedTrue на macOS, false на остальных.
register(onToken, onError, onNotification)Запрашивает разрешение и регистрирует приложение для удалённых уведомлений. Все три обратных вызова необязательны; onNotification срабатывает, пока приложение запущено. Возвращает false там, где push не поддерживается.
tokenПоследний токен устройства или null, пока регистрация не завершена.
authStatusПоследний известный статус разрешения; -1, пока не выполнен register() или refreshStatus().
refreshStatus(onStatus)Считывает текущий статус разрешения; onStatus(status:int) вызывается по получении, а также снова с ответом на запрос из register().
openSettings()Открывает системные настройки на странице «Уведомления».
STATUS_NOT_DETERMINED, STATUS_DENIED, STATUS_AUTHORIZEDЗначения статуса разрешения 0, 1 и 2. macOS может также сообщать 3 (provisional) и 4 (ephemeral).
TOKEN, ERROR, NOTIFICATIONУровни StatusEvent для слушателей: уровень указывает тип, код несёт значение.

События

level tokencode = токен устройства, шестнадцатеричная строка
level errorcode = сообщение об ошибке регистрации
level notificationcode = содержимое уведомления в формате JSON

Купить KlugPush

Годовая лицензия на одно приложение AIR со всеми обновлениями в течение 12 месяцев. После оплаты вы получаете расширение, библиотеку ActionScript и документацию по e-mail, обычно в течение одного рабочего дня. Лицензия и условия

Базовый
€19 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Без поддержки
Купить Базовый
Стандартный
€149 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Ответ по e-mail в течение 7 дней
Купить Стандартный
Приоритетный
€299 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Ответ по e-mail в течение 48 часов
Купить Приоритетный
Налоги рассчитываются при оформлении заказа через Link (Stripe). ID приложения вашего приложения AIR вы указываете при оформлении заказа.

Требования

AIR SDK51.x (HARMAN)
macOSmacOS 11 или новее
ПодписьПраво push-уведомлений (entitlement) и соответствующий профиль подготовки
СерверОтправляет уведомления через сервис push-уведомлений Apple