我正在使用Phonegap开发iOS应用程序。
当我收到推送通知usijng phonegap-plugin-push时,我正在实施递增徽章编号的流程。
在发送推送通知的服务器端, 徽章编号未配置。
我想在应用收到推送通知时实施该流程, app计算当前的徽章编号,递增它并设置badgenumber。
使用push.getApplicationIconBadgeNumber和push.setApplicationIconBadgeNumber, 当app是Foreground时,我的代码下面工作正常, 但是当应用程序是后台,暂停,未运行时,它不起作用。
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');
});
});
}
};
在这个网站上,
push.setApplicationIconBadgeNumber被解释 “在应用未运行时设置徽章计数”,并且 解释了push.getApplicationIconBadgeNumber “当应用程序未运行时,可以看到当前徽章计数。”
但是这个我的代码,当app是Foreground时,两个函数都有效, 当应用程序在后台状态下收到推送通知时,徽章编号不会更改。
那么,该网站上的解释是错误的吗?
应用程序的工作方式相同,但推送通知发送服务器端的推送通知选项“content-available”配置为1或不配置。
所以,请告诉我我应该写什么代码。
- 版本 -
crodova版本:7.1.0
平台iOS:4.5.4
phonegap-plugin-push:1.10.6
答案 0 :(得分:0)
我是由myselr解决的。
但是,当应用状态为"未运行"时,徽章编号不会更新。
我认为当应用程序状态为" Not runnnig"时,无法更新徽章编号。
所以,这将是这个应用程序的规范。
如果您想在应用状态为"未运行"时更新徽章编号, 我认为您可以通过在发送服务器端定义徽章编号来实现它。
以下步骤可以解决我的问题。
*** 1:使用cordova-plugin-background-fetch
在config.xml中写下。
<plugin name="cordova-plugin-background-fetch" source="npm" />
*** 2:启用&#34;后台刷新&#34;这个应用程序
对于iPhone,您可以启用它 点按&#34;设置 - &gt;一般 - &gt;后台应用刷新&#34;。
*** 3:配置内容可用= 1&amp; id发送数据。
以下是发送数据的示例。
{\&#34; aps \&#34;:{\&#34; alert \&#34;:\&#34; Hello World \&#34;,\&#34; content-available \&#34;:1},\&#34; id \&#34; :3}
在此示例中,id配置为3。
此id用于push.finish函数(参见下一节)。
*** 4:添加push.finish功能
将此功能添加到&#34; push.on(&#39; notification&#39;,function(data){});&#34;。
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);
});