Adobe AIR
El plugin necesita la versión 33.0 o superior del SDK de AIR.
Anchor link toDescargar SDK
Proyecto de ejemplo
Documentación de la API del SDK
Para integrar las notificaciones push de Pushwoosh en tu aplicación de Adobe Air, sigue estos pasos:
- Coge PushNotifications.ane y añádelo a tu proyecto.
- Añade las librerías
distriqta tu proyecto:
com.distriqt.playservices.Basecom.google.firebase.coreDescargar librerías de Google Play Services
androidx.appcompatcom.google.android.materialandroidx.recyclerviewandroidx.coreDescargar librerías de soporte de Android
com.distriqt.CoreDescargar librería Distriqt Core
3. Configura tu proyecto en la Consola de Firebase.
4. Ubica el archivo google-services.json en el nivel raíz de tu proyecto.
5. Añade el siguiente código a la rutina de inicio de tu aplicación:
// set push notification callbacks for the pluginvar 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 pushpushwoosh.registerForPushNotification();Las funciones de manejador (handler) son sencillas:
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. Ahora configura tu app.xml. Reemplaza PUSHWOOSH_APP_ID con tu App ID real de Pushwoosh. Para Android, reemplaza FCM_SENDER_ID con tu Sender ID de Firebase y PACKAGE_NAME con el nombre de tu paquete de Android.
Tanto para Android como para iOS, asegúrate de añadir también tu Token de API de Dispositivo de Pushwoosh.
Importante: Asegúrate de que el token tenga acceso a la aplicación correcta en tu Panel de Control de Pushwoosh. Aprende más
<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. Asegúrate de marcar la casilla “Package” en el panel “Native Extensions” en la configuración. También selecciona la ruta al SDK de iOS más reciente según la captura de pantalla a continuación al exportar para iOS:

Comparte tus comentarios con nosotros
Anchor link toTus comentarios nos ayudan a crear una mejor experiencia, por lo que nos encantaría saber de ti si tienes algún problema durante el proceso de integración del SDK. Si encuentras alguna dificultad, no dudes en compartir tus opiniones con nosotros a través de este formulario.