我的应用程序使用ACS推送通知。我在我的应用程序中实现了应用程序徽章但问题是appBadge在接收推送通知时没有自动递增。我在我的应用程序中使用了以下代码
var deviceToken;
Titanium.Network.registerForPushNotifications({
types: [
Titanium.Network.NOTIFICATION_TYPE_BADGE,
Titanium.Network.NOTIFICATION_TYPE_ALERT,
Titanium.Network.NOTIFICATION_TYPE_SOUND
],
success:function(e)
{
deviceToken = e.deviceToken;
SubscribeToPush(channelName, deviceToken, type);
},
error:function(e)
{
alert("Error: "+ ((e.error && e.message) || JSON.stringify(e.error)));
},
callback:function(e)
{
var badgeCount = Ti.UI.iPhone.getAppBadge();
badgeCount = badgeCount + 1;
Ti.UI.iPhone.setAppBadge(badgeCount);
}
});
我读了here "callback function",在收到新的推送通知时调用了{{3}}。所以我将以下代码设置为回调以增加徽章。
callback:function(e)
{
var badgeCount = Ti.UI.iPhone.getAppBadge(); //Will return the app badges
badgeCount = badgeCount + 1; //Incrementing the appbadge
Ti.UI.iPhone.setAppBadge(badgeCount); //Setting new appbadge
}
当应用程序处于打开状态并且收到通知时,回调会被触发,当应用程序转到后台时,徽章就会出现。但是我想在应用程序处于后台或退出时增加徽章编号。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
经过大量研究后,我创建了一个示例应用程序,用于在接收服务器推送通知时递增appBadge。 您可以从Increment the ios appBadge Titanium 下载代码。下载资源文件夹后请按照步骤进行操作。
- 在Titanium中创建一个新的移动应用程序项目。
- 将资源文件夹替换为您下载的资源文件夹。
- 登录www.appcelerator.com,转到您的应用,然后转到管理ACS
- 以管理员身份创建新用户,将用户设置为管理员
- 使用admin用户创建新的访问控制列表(ACS),并将ACL名称指定为'SampleApp'
- 上传推送通知的p12证书
- 现在将应用程序安装到iPhone并运行应用程序......
醇>
应用的每个用户都应该有一个存储通知数量的自定义对象。我在发送推送时更新它们并在我恢复/打开应用程序时将其清除。我用我的iPhone设备进行了测试,效果很好。但是由于我必须多次调用ACS,因此需要一些延迟。
更新:最新的Titanium SDK默认支持此功能。
您需要做的是按如下方式更改有效负载:
var payload = {"alert":"Hi, This is a test notification", badge: "+1"};
/*+1 will increment the current appbadge by 1, number of appbadge will be saved in the ACS*/
Cloud.PushNotifications.notify({
channel: 'friend_request',
payload: payload
}, function (e) {
if (e.success) {
alert('Success');
} else {
alert('Error:\n' +
((e.error && e.message) || JSON.stringify(e)));
}
});
这将使appbadge增加一个。您需要在恢复/打开应用程序时重置appbadge,如下所示
Cloud.PushNotifications.resetBadge({
device_token : myDeviceToken
}, function(e){
if(e.success){
Ti.UI.iPhone.setAppBadge(0);
} else {
//Error callback
}
})