Перейти к содержанию

Adobe AIR

Для плагина требуется AIR SDK версии 33.0 или выше.

Anchor link to

Скачать SDK
Пример проекта
Документация по SDK API

Чтобы интегрировать push-уведомления Pushwoosh в ваше приложение Adobe Air, выполните следующие шаги:

  1. Скачайте PushNotifications.ane и добавьте его в свой проект.
  2. Добавьте библиотеки distriqt в ваш проект:
com.distriqt.playservices.Base
com.google.firebase.core

Скачать библиотеки Google Play Services

androidx.appcompat
com.google.android.material
androidx.recyclerview
androidx.core

Скачать библиотеки Android Support

com.distriqt.Core

Скачать библиотеку Distriqt Core

3. Настройте ваш проект в консоли Firebase.

4. Поместите файл google-services.json в корневой каталог вашего проекта.

5. Добавьте следующий код в процедуру запуска вашего приложения:

// set push notification callbacks for the plugin
var pushwoosh:PushNotification = PushNotification.getInstance();
pushwoosh.addEventListener(PushNotificationEvent.PERMISSION_GIVEN_WITH_TOKEN_EVENT, onToken);
pushwoosh.addEventListener(PushNotificationEvent.PERMISSION_REFUSED_EVENT, onError);
pushwoosh.addEventListener(PushNotificationEvent.PUSH_NOTIFICATION_RECEIVED_EVENT, onPushReceived);
// important! Call this function when callbacks have been set. It triggers delivery of all pending push notifications.
pushwoosh.onDeviceReady();
// register for push
pushwoosh.registerForPushNotification();

Функции-обработчики просты:

public function onToken(e:PushNotificationEvent):void{
trace("\n TOKEN: " + e.token + " ");
}
public function onError(e:PushNotificationEvent):void{
trace("\n TOKEN: " + e.errorMessage+ " ");
}
public function onPushReceived(e:PushNotificationEvent):void{
trace("\n TOKEN: " + JSON.stringify(e.parameters) + " ");
}

6. Теперь настройте ваш app.xml. Замените PUSHWOOSH_APP_ID на ваш фактический Pushwoosh App ID. Для Android замените FCM_SENDER_ID на ваш Firebase Sender ID и PACKAGE_NAME на ваше имя пакета Android.

Как для Android, так и для iOS, обязательно добавьте ваш Pushwoosh Device API Token.

Важно: Убедитесь, что токен имеет доступ к правильному приложению в вашей панели управления Pushwoosh. Узнать больше

<iPhone>
<InfoAdditions>
<
![CDATA[
<key>Pushwoosh_APPID</key>
<string>PUSHWOOSH_APP_ID</string>
<key>Pushwoosh_API_TOKEN</key>
<string>__YOUR_DEVICE_TYPE_API_TOKEN__</string>
]]>
</InfoAdditions>
<Entitlements>
<![CDATA[
<key>aps-environment</key>
<string>development</string>
]]>
</Entitlements>
<requestedDisplayResolution>high</requestedDisplayResolution>
</iPhone>
<android>
<manifestAdditions><![CDATA[
<manifest android:installLocation="auto">
<application>
<!-- Pushwoosh START -->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<meta-data android:name="com.pushwoosh.appid" android:value="PUSHWOOSH_APP_ID" />
<meta-data android:name="com.pushwoosh.senderid" android:value="AFCM_SENDER_ID" />
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_TYPE_API_TOKEN" />
<meta-data android:name="PW_BROADCAST_PUSH" android:value="true" />
<meta-data android:name="com.pushwoosh.notification_icon" android:value="@drawable/notification_small_icon" />
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.pushwoosh.nativeExtensions.PushwooshNotificationServiceExtension"/>
<activity
android:name="com.pushwoosh.inapp.view.RichMediaWebActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.pushwoosh.inapp.view.RemoteUrlActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<receiver
android:name="com.pushwoosh.BootReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<service
android:name="com.pushwoosh.FcmRegistrationService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name="com.pushwoosh.firebase.PushFcmIntentService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity
android:name="com.pushwoosh.internal.utils.PermissionActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<receiver android:name="com.pushwoosh.notification.LocalNotificationReceiver" />
<provider
android:name="com.pushwoosh.PushwooshInitProvider"
android:authorities="PACKAGE_NAME.pushwooshinitprovider"
android:enabled="true"
android:exported="false"
android:initOrder="50" />
<provider
android:initOrder="70"
android:enabled="true"
android:authorities="PACKAGE_NAME.firebasepushwooshinitprovider" android:exported="false"
android:name="com.pushwoosh.firebase.FirebaseInitProvider"/>
<provider
android:name="com.pushwoosh.nativeExtensions.PushwooshFirebaseInitProvider"
android:authorities="PACKAGE_NAME.FirebaseInitProvider"
android:enabled="true"
android:exported="false"
android:initOrder="60" />
<provider
android:name="com.pushwoosh.PushwooshSharedDataProvider"
android:authorities="PACKAGE_NAME.PushwooshSharedDataProvider"
android:enabled="true"
android:exported="true"
android:initOrder="60" />
<activity
android:name="com.pushwoosh.notification.NotificationOpenActivity"
android:noHistory="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:enabled="true"
android:exported="false" />
<receiver
android:name="com.pushwoosh.NotificationUpdateReceiver"
android:enabled="true"
android:exported="false" />
<meta-data
android:name="com.pushwoosh.plugin.badge"
android:value="com.pushwoosh.badge.BadgePlugin" />
<meta-data
android:name="com.pushwoosh.internal.plugin_provider"
android:value="com.pushwoosh.nativeExtensions.internal.AdobeAirPluginProvider" />
<meta-data
android:name="com.pushwoosh.plugin.inbox"
android:value="com.pushwoosh.inbox.PushwooshInboxPlugin" />
<activity
android:name="com.pushwoosh.nativeExtensions.AirInboxActivity" />
<activity
android:name="com.pushwoosh.inbox.ui.presentation.view.activity.AttachmentActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<!-- Pushwoosh END -->
<!-- Firebase START -->
<service
android:name="com.google.firebase.components.ComponentDiscoveryService"
android:exported="false" >
<meta-data
android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
<meta-data
android:name="com.google.firebase.components:com.google.firebase.datatransport.TransportRegistrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
<meta-data
android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
</service>
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<category android:name="PACKAGE_NAME"/>
</intent-filter>
</receiver>
<service
android:name="com.google.firebase.messaging.FirebaseMessagingService"
android:exported="false" >
<intent-filter android:priority="-500" >
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name="com.google.firebase.iid.FirebaseInstanceIdService" android:exported="true">
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:authorities="PACKAGE_NAME.firebaseinitprovider"
android:exported="false"
android:initOrder="100" />
<!-- Firebase END -->
<!-- Work-runtime START -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="PACKAGE_NAME.androidx-startup"
android:exported="false">
<!-- This entry makes WorkManagerInitializer discoverable. -->
<meta-data android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup" />
</provider>
<service
android:name="androidx.work.impl.background.systemalarm.SystemAlarmService"
android:directBootAware="false"
android:enabled="true"
android:exported="false" />
<service
android:name="androidx.work.impl.background.systemjob.SystemJobService"
android:directBootAware="false"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE" />
<receiver
android:name="androidx.work.impl.utils.ForceStopRunnable$BroadcastReceiver"
android:directBootAware="false"
android:enabled="true"
android:exported="false" />
<receiver
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxy"
android:directBootAware="false"
android:enabled="false"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
<receiver
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxy"
android:directBootAware="false"
android:enabled="false"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.BATTERY_OKAY" />
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
<receiver
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxy"
android:directBootAware="false"
android:enabled="false"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.DEVICE_STORAGE_LOW" />
<action android:name="android.intent.action.DEVICE_STORAGE_OK" />
</intent-filter>
</receiver>
<receiver
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxy"
android:directBootAware="false"
android:enabled="false"
android:exported="false" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<receiver
android:name="androidx.work.impl.background.systemalarm.RescheduleReceiver"
android:directBootAware="false"
android:enabled="false"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
</intent-filter>
</receiver>
<receiver
android:name="androidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiver"
android:directBootAware="false"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="androidx.work.impl.background.systemalarm.UpdateProxies" />
</intent-filter>
</receiver>
<!-- Work-runtimme END -->
</application>
<!-- Permissions START -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- FCM connects to Firebase Services. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- Vibration in push notification -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--BADGES-->
<!--for Samsung-->
<uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
<!--for htc-->
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>
<!--for sony-->
<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
<uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"/>
<!--for apex-->
<uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>
<!--for solid-->
<uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE"/>
<!--for huawei-->
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
<uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/>
<!--for ZUK-->
<uses-permission android:name="android.permission.READ_APP_BADGE"/>
<!--for OPPO-->
<uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
<!--for EvMe-->
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_READ"/>
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_WRITE"/>
<!-- Permissions END -->
</manifest>
]]>
</manifestAdditions>
<colorDepth>16bit</colorDepth>
</android>

7. Убедитесь, что вы установили флажок “Package” на панели “Native Extensions” в настройках. Также выберите путь к последней версии iOS SDK, как показано на скриншоте ниже, при экспорте для iOS:

Настройки экспорта для iOS в Adobe AIR

Поделитесь с нами своим мнением

Anchor link to

Ваши отзывы помогают нам улучшать наш продукт, поэтому мы будем рады, если вы расскажете нам о любых проблемах, возникших в процессе интеграции SDK. Если вы столкнетесь с какими-либо трудностями, пожалуйста, не стесняйтесь поделиться своими мыслями с нами через эту форму.