【问题标题】:Push notification not receiving in Cordova Android App在 Cordova Android 应用程序中未收到推送通知
【发布时间】:2016-11-30 08:49:26
【问题描述】:

我的 Cordova Android 应用程序没有收到推送通知。使用相同的代码,我可以在我的 iOS 应用程序中接收推送通知。 之前我使用的是 phonegap build(PGB) 中的 pushwoosh 插件:

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

iOS 和 Android 都收到推送通知,没有任何错误。

我最近更改了插件并添加了一个新插件:

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

设备在 pushwoosh 中注册并获取设备令牌。
GCM (php-backend) 用于为 Android 发送推送通知。
我在发送推送通知时收到 GCM 的成功响应:

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

但无论应用程序是在后台运行还是前台运行还是关闭,Android 应用程序都不会收到推送通知。

iOS 和 Android 版本的应用程序在从 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>

任何帮助将不胜感激。

【问题讨论】:

  • 在此处添加清单文件会有所帮助,可能您的清单文件中只有 pushwoosh 接收器,并且不了解服务器发送的有效负载
  • @UmangChamaria 我已经添加了清单文件。你能检查一下吗?

标签: android cordova push-notification google-cloud-messaging pushwoosh


【解决方案1】:

使用 Pushbot 插件进行 Cordova 应用推送通知

【讨论】:

  • 刚刚测试过 - 很棒的服务!!
【解决方案2】:

您可能想尝试Apache Cordova / Phonegap Push Notification Tutorial 中列举的以下内容:

  • 检查是否安装了推送通知插件
  • 确保您已在 SDK 管理器中安装了所需的工具
  • 检查您的项目中是否包含 cordova.js 文件
  • 检查您在 GCM 项目中创建的发件人 ID
  • 确保您有互联网连接

您还可以从以下参考资料中获得有关在 Cordova 应用程序中实现推送通知的更多提示和信息:

【讨论】:

  • 我已经交叉检查并尝试了上述所有方法。但仍然没有收到推送通知。这一切都是在我更新了原始帖子中提到的插件之后开始的。
【解决方案3】:

manifest 文件只有一个接收器,由 pushwoosh SDK 提供,如果通知负载是它期望的格式,这个接收器将只能显示推送通知。 如果您需要显示从您自己的服务器发送的通知,您需要拥有自己的接收器,该接收器应该了解您发送的有效负载,然后显示它。

注意:最新的播放服务版本不支持多个 GCMListenerServices。理想情况下,您应该拥有自己的一项服务,该服务了解推送是来自您的服务器还是来自 pushwoosh 并相应地处理它。在您的测试过程中,您可能会看到推送负载被传递到多个 GCMListenerServices 的实例,但这种行为并不一致,因此最好只有一个服务

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2015-09-21
    • 2014-06-26
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多