Push-уведомление не получено в Android-приложении Cordova

Я не получаю push-уведомления в моем приложении Cordova для Android. С тем же кодом я могу получать push-уведомления в моем приложении для iOS. Ранее я использовал плагин pushwoosh из сборки phonegap (PGB):

< gap:plugin name="com.pushwoosh.plugins.pushwoosh" version="3.4.2" />

Push-уведомления были получены как для iOS, так и для Android без ошибок.

Я недавно изменил плагин и добавил новый:

< gap:plugin name="pushwoosh-cordova-plugin" version="6.4.0" source="npm" />     

Устройство регистрируется в pushwoosh и получает токен устройства.
GCM (php-backend) используется для отправки push-уведомлений для Android.
Я получаю успешный ответ от GCM при отправке push-уведомления:

{"multicast_id":86307627949689xxxxx,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1480488792901983%a4d1b626f9xxxxxx"}]}

Но push-уведомление не принимается приложением Android в любых случаях, если приложение работает в фоновом режиме или на переднем плане или закрыто.

Тем не менее, обе версии приложения для iOS и Android получают push-уведомления при отправке с панели Pushwoosh.

Справочный документ: http://docs.pushwoosh.com/docs/cordova-phonegap

Мой код:

document.addEventListener("deviceready", DeviceReady, false);

function DeviceReady()
{
  window.pushwoosh = cordova.require("pushwoosh-cordova-plugin.PushNotification");

  // should be called before pushwoosh.onDeviceReady
  document.addEventListener('push-notification', function(event) {
     navigator.notification.alert(JSON.stringify(event.notification));  

     //get the notification payload
     if (device.platform == 'android' || device.platform == 'Android') {    
             navigator.notification.alert(event.notification.message);          
    }else{
        navigator.notification.alert(event.notification.aps.alert);             
    }

     if (device.platform == 'iOS') {
        pushwoosh.setApplicationIconBadgeNumber(0);
     }

  });

  // Initialize Pushwoosh. This will trigger all pending push notifications on start.
  // projectid : GOOGLE_PROJECT_NUMBER
  pushwoosh.onDeviceReady({
    appid: "3FXXX-3CXXX",
    projectid: "4631220XXXXX"
  });

  pushwoosh.registerDevice(
    function(status) {
        var pushToken = status.pushToken;
        document.getElementById('hiddentoken').value = pushToken;               
    },function(status) {
        //~ alert("Error Status" + status );
 }); 

  //reset badges on app start
  pushwoosh.setApplicationIconBadgeNumber(0);

}

Манифест:

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:amazon="http://schemas.amazon.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" android:windowSoftInputMode="adjustPan" package="com.XXXXX.XXXXX" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <permission android:name="com.XXXXX.XXXXX.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
    <uses-permission android:name="com.XXXXX.XXXXX.permission.C2D_MESSAGE"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
    <uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
    <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
    <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
    <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>
    <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
    <uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"/>
    <uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>
    <uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE"/>
    <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"/>
    <uses-permission android:name="android.permission.READ_APP_BADGE"/>
    <uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS"/>
    <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
    <permission android:name="com.XXXXX.XXXXX.permission.RECEIVE_ADM_MESSAGE" android:protectionLevel="signature"/>
    <uses-permission android:name="com.XXXXX.XXXXX.permission.RECEIVE_ADM_MESSAGE"/>
    <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE"/>
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:configChanges="locale|keyboard|keyboardHidden|orientation|screenSize" android:label="@string/app_name" android:name="com.XXXXX.XXXXX.Apppp" android:screenOrientation="portrait" android:windowSoftInputMode="adjustUnspecified|stateUnspecified">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
        <meta-data android:name="PW_LOG_LEVEL" android:value="DEBUG"/>
        <meta-data android:name="PW_NO_BROADCAST_PUSH" android:value="false"/>
        <receiver android:exported="true" android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                <category android:name="com.XXXXX.XXXXX"/>
            </intent-filter>
        </receiver>
        <activity android:exported="false" android:name="com.google.android.gms.common.api.GoogleApiActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
        <receiver android:name="com.pushwoosh.MessageAlertReceiver" android:permission="com.amazon.device.messaging.permission.SEND">
            <intent-filter>
                <action android:name="com.amazon.device.messaging.intent.REGISTRATION"/>
                <action android:name="com.amazon.device.messaging.intent.RECEIVE"/>
                <category android:name="com.XXXXX.XXXXX"/>
            </intent-filter>
        </receiver>
        <service android:name="com.pushwoosh.PushAmazonIntentService"/>
        <amazon:enable-feature android:name="com.amazon.device.messaging" android:required="false"/>
        <activity android:name="com.pushwoosh.richpages.RichPageActivity"/>
        <activity android:name="com.pushwoosh.MessageActivity"/>
        <activity android:name="com.pushwoosh.PushHandlerActivity"/>
        <activity android:name="com.pushwoosh.inapp.WebActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
        <service android:name="com.pushwoosh.inapp.InAppRetrieverService"/>
        <receiver android:enabled="true" android:name="com.pushwoosh.local.BootReceiver" 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:exported="false" android:name="com.pushwoosh.GCMListenerService">
            <intent-filter android:priority="-50">
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
            </intent-filter>
        </service>
        <service android:exported="false" android:name="com.pushwoosh.GCMInstanceIDListenerService">
            <intent-filter android:priority="-50">
                <action android:name="com.google.android.gms.iid.InstanceID"/>
            </intent-filter>
        </service>
        <service android:exported="false" android:name="com.pushwoosh.GCMRegistrationService"/>
        <service android:name="com.pushwoosh.location.GeoLocationService"/>
        <activity android:name="com.pushwoosh.internal.utils.PermissionActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
        <receiver android:name="com.pushwoosh.local.AlarmReceiver"/>
        <service android:enabled="true" android:exported="true" android:isolatedProcess="false" android:label="iBeacon" android:name="com.pushwoosh.thirdparty.radiusnetworks.ibeacon.service.IBeaconService"/>
        <service android:enabled="true" android:name="com.pushwoosh.thirdparty.radiusnetworks.ibeacon.IBeaconIntentProcessor"/>
        <service android:name="com.pushwoosh.beacon.PushBeaconService"/>
        <service android:enabled="true" android:exported="false" android:name="com.pushwoosh.internal.utils.LockScreenService"/>
    </application>
</manifest>

Любая помощь будет оценена.

2 ответа

Используйте плагин Pushbot для push-уведомлений приложения Cordova

Вы можете попробовать следующее, перечисленное в учебнике по push-уведомлениям Apache Cordova / Phonegap:

  • Проверьте, установлен ли у вас плагин push-уведомлений
  • Убедитесь, что вы установили необходимые инструменты в SDK Manager
  • Проверьте, что вы включили cordova.js файл с вашим проектом
  • Проверьте свой идентификатор отправителя, который вы создали в проектах GCM
  • Убедитесь, что у вас есть подключение к интернету

Вы также можете получить дополнительные советы и информацию о реализации push-уведомлений в приложении Cordova по следующим ссылкам:

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

Примечание. Последняя версия сервисов воспроизведения не поддерживает несколько GCMListenerServices. В идеале у вас должна быть одна собственная служба, которая понимает, является ли отправка с вашего сервера или pushwoosh, и обрабатывает его соответствующим образом. Во время тестирования вы можете увидеть случаи, когда полезная нагрузка доставляется нескольким GCMListenerServices, но это поведение не согласовано, поэтому лучше всего иметь только одну службу

Другие вопросы по тегам