我使用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并将前景替换为背景,但它并没有真正改变任何内容。
我已经为应用程序配置了通知中心,因为它应该是:
我一直在四处寻找,但我有点空白,如果Stack-overflow有帮助,我会很感激。我经常坚持回答问题,但现在轮到我问了问题:)
答案 0 :(得分:2)
推送通知有效负载需要一个aps密钥,以及一个包含将显示的消息的警报:
对于每个通知,编写一个JSON字典对象(由...定义) RFC 4627)。该词典必须包含另一个字典 通过关键的aps。 aps字典可以包含一个或多个属性 指定以下用户通知类型
- 要向用户显示的提醒消息
- 使用
标记应用图标的数字- 播放声音
有效载荷示例:
{
"aps" : {
"alert" : "You got your emails.",
"badge" : 9,
"sound" : "bingbong.aiff"
},
"acme1" : "bar",
"acme2" : 42
}
当应用程序位于前台时,您会收到整个有效负载,即使它没有这种格式也可以处理它,但是当应用程序处于后台或关闭时,系统需要aps密钥和警报将显示在通知中心上的消息。