当应用程序在Phonegap(cordova)的后台状态下收到推送通知时增加徽章编号,
Posted
技术标签:
【中文标题】当应用程序在Phonegap(cordova)的后台状态下收到推送通知时增加徽章编号,【英文标题】:Incrementing badge number when app receives push notification in background state for Phonegap (cordova), 【发布时间】:2018-01-03 07:16:07 【问题描述】:我正在使用 Phonegap 开发 ios 应用。
我正在实现当应用收到推送通知时增加徽章编号的过程,使用 phonegap-plugin-push。
在发送推送通知的服务器端, 徽章编号未配置。
我想在应用收到推送通知时实现该流程, 应用程序计算当前徽章编号,将其递增并设置徽章编号。
使用 push.getApplicationIconBadgeNumber 和 push.setApplicationIconBadgeNumber, 当应用程序是前台时,我的代码下方运行良好, 但是当app是Background、Suspended、Not running时就不行了。
var app =
// Application Constructor
initialize: function()
this.bindEvents();
,
bindEvents: function()
document.addEventListener('deviceready', this.onDeviceReady, false);
,
onDeviceReady: function()
console.log('Received Device Ready Event');
console.log('calling setup push');
console.log('platform : '+device.platform);
if ((device.platform == 'iOS') || (device.platform == 'android'))
app.setupPush();
,
setupPush: function()
console.log('calling push init');
var push = PushNotification.init(
"android":
"senderID": "xxxxxxxxxx"
,
"browser": ,
"ios":
"sound": true,
"vibration": true,
"badge": true
,
"windows":
);
push.on('registration', function(data)
console.log('registration event: ' + data.registrationId);
var oldRegId = localStorage.getItem(key);
console.log('oldRegId : ' + oldRegId);
if (oldRegId !== data.registrationId)
console.log('different ID');
localStorage.setItem(key, data.registrationId);
);
push.on('error', function(e)
console.log("push error = " + e.message);
);
push.on('notification', function(data)
console.log('notification event');
navigator.notification.alert(
data.message, // message
null, // callback
data.title, // title
'Ok' // buttonName
);
push.getApplicationIconBadgeNumber(function(count)
console.log('get badge : ' + count);
count++;
push.setApplicationIconBadgeNumber(function()
console.log('set badge : ' + count);
, function()
console.log('set badge error');
, count);
, function()
console.log('get badge error');
);
);
;
在这个网站上,
https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/API.md#pushfinishsuccesshandler-errorhandler-id---ios-only
push.setApplicationIconBadgeNumber 解释 “设置应用程序未运行时可见的徽章计数”,以及 push.getApplicationIconBadgeNumber 解释 “在应用未运行时获取当前徽章计数”。
但是这是我的代码,当应用程序是前台时,这两个功能都有效, 并且当应用收到后台状态的推送通知时,徽章编号不会更改。
那么,那个网站上写的解释错了吗?
应用程序的工作原理相同,但推送通知选项“内容可用”在推送通知发送服务器端配置为 1 或未配置。
所以,请告诉我应该写什么代码。
-- 版本--
crodova 版本:7.1.0
平台 iOS:4.5.4
phonegap-plugin-push : 1.10.6
【问题讨论】:
【参考方案1】:我通过myselr解决了。
但是,当应用状态为“未运行”时,徽章编号不会更新。
我认为当应用状态为“未运行”时,无法更新徽章编号。
所以,这将是这个应用程序的规范。
如果您想在应用状态为“未运行”时更新徽章编号, 我认为您可以通过在发送服务器端定义徽章编号来实现它。
以下步骤可以解决我的问题。
*** 1:使用cordova-plugin-background-fetch
在 config.xml 中写下。
<plugin name="cordova-plugin-background-fetch" source="npm" />
*** 2 : 开启此应用的“后台刷新”
对于 iPhone,您可以使用 点击“设置 -> 常规 -> 后台应用刷新”。
*** 3 : 配置 content-available=1 & id 发送数据。
以下是发送数据的示例。
\"aps\": \"alert\": \"Hello World\",\"content-available\": 1 , \"id\" : 3
在本例中,id 配置为 3。
此 id 用于 push.finish 函数(请参阅下一节)。
*** 4 : 添加 push.finish 函数
将此函数添加到“push.on('notification', function(data));”中。
data.additionalData的id名称对应发送数据的id名称。
(在官网查看push.finish函数的规范)
push.on('notification', function(data)
console.log('notification event');
navigator.notification.alert(
data.message, // message
null, // callback
data.title, // title
'Ok' // buttonName
);
push.getApplicationIconBadgeNumber(function(count)
//alert('get badge : ' + count);
console.log('get badge : ' + count);
count++;
push.setApplicationIconBadgeNumber(function()
console.log('set badge : ' + count);
, function()
console.log('set badge error');
, count);
, function()
console.log('get badge error: ' + count);
);
//alert('notId: ' + data.additionalData.notId);
console.log('notification id: ' + data.additionalData.id);
// do something with the push data
// then call finish to let the OS know we are done
push.finish(function()
console.log("processing of push data is finished");
, function()
console.log("something went wrong with push.finish for ID =", data.additionalData.id)
, data.additionalData.id);
);
【讨论】:
以上是关于当应用程序在Phonegap(cordova)的后台状态下收到推送通知时增加徽章编号,的主要内容,如果未能解决你的问题,请参考以下文章
div 标签在使用 PhoneGap 构建的 iOS 应用程序中是可选的