使用PushPlugin插件

时间:2015-07-11 20:57:33

标签: ios cordova push-notification

简介

我使用Phonegap 4.2(基于Cordova 5.0)创建跨平台应用。

对于iOS,我使用Xcode 6.0,并使用PushPlugin Cordova插件来处理推送通知。

我的问题

我能够在iOS版本的应用中接收推送通知,但当应用在后台运行时,我没有收到任何推送通知和它们不会出现在状态栏中或锁定屏幕中。通过 background 我的意思是应用程序关闭时。

详细

引用

我在config.xml中正确包含了PushPlugin插件:

<feature name="PushPlugin">
    <param name="android-package" value="com.plugin.gcm.PushPlugin" />
    <param name="ios-package" value="PushPlugin" />
</feature>

我在index.html文件中正确引用了PushPlugin JavaScript对象:

<script type="text/javascript" src="./js/PushNotification.js"></script>

附加推送通知事件

我已将通知事件正确附加到onNotificationAPN上的方法:

pushNotification = window.plugins.pushNotification;
if (device.platform == 'android' || device.platform == 'Android' || device.platform == 'amazon-fireos')
{
    // ...
}
else
{
    pushNotification.register(tokenHandler, errorHandler, 
    {
        "badge":"true",
        "sound":"true",
        "alert":"true",
        "ecb":"onNotificationAPN"
    });
}

tokenHandler errorHandler 已定义,因此 onNotificationAPN ;

function onNotificationAPN(e)
{
    // handle APNS notifications for iOS
    if (e.alert)
    {
        // showing an alert also requires the org.apache.cordova.dialogs plugin
        // Note that I have org.apache.cordova.dialogs aswell
        navigator.notification.alert(e.alert);
        // This code snippet runs fine when the app is open: the app receives the push notification and it's alerted to the user.
    }
    if (e.sound)
    {
        // playing a sound also requires the org.apache.cordova.media plugin
        // Note that I have org.apache.cordova.media plugin aswell
        var snd = new Media(e.sound);
        snd.play();
    }
    if (e.badge)
    {
        pushNotification.setApplicationIconBadgeNumber(successHandler, e.badge);
        // This code snippet works fine when the app is open: the app receives a push notification and when I close the app the badge count is set to 1, whether that's an expected behavior or not I'm not sure but not what matters right now. 
    }
}

如上所述,当应用程序打开时,应用程序会接收并提醒推送给它的通知。 但是,当应用程序未打开时,设备似乎没有注意到推送。我希望推送通知出现在锁定屏幕和/或状态栏中。

测试设备

我在iPad上进行测试,操作系统版本为7.0.3。

供应资料

我正在使用开发配置文件,而我用于测试的设备已添加到苹果开发中心的应用程序设备中。

推送通知的有效负载

推送通知中发送的有效负载如下所示:

Msg: {
    "sound":"beeb.wav",
    "alert":"Here is a testing push notification",
    "badge":"1",
    "location":"", // Custom variable
    foreground:"1"
}

我尝试将前景变量更改为0并将前景替换为背景,但它并没有真正改变任何内容。

通知中心

我已经为应用程序配置了通知中心,因为它应该是:

  • 徽章App图标已开启。
  • 声音已开启。
  • 在通知中心显示已开启。
  • 包含设置为5个最近的项目。
  • 锁定屏幕上的显示已开启。

帮助?

我一直在四处寻找,但我有点空白,如果Stack-overflow有帮助,我会很感激。我经常坚持回答问题,但现在轮到我问了问题:)

1 个答案:

答案 0 :(得分:2)

推送通知有效负载需要一个aps密钥,以及一个包含将显示的消息的警报:

  

对于每个通知,编写一个JSON字典对象(由...定义)   RFC 4627)。该词典必须包含另一个字典   通过关键的aps。 aps字典可以包含一个或多个属性   指定以下用户通知类型

     
      
  • 要向用户显示的提醒消息
  •   
  • 使用
  • 标记应用图标的数字   
  • 播放声音
  •   

More info

有效载荷示例:

  {

    "aps" : {

        "alert" : "You got your emails.",

        "badge" : 9,

        "sound" : "bingbong.aiff"

    },

    "acme1" : "bar",

    "acme2" : 42

}

当应用程序位于前台时,您会收到整个有效负载,即使它没有这种格式也可以处理它,但是当应用程序处于后台或关闭时,系统需要aps密钥和警报将显示在通知中心上的消息。