在背景上的应用程序接收ACS推送时增加应用程序徽章:Titanium

时间:2013-02-28 12:58:57

标签: push-notification titanium titanium-mobile acs badge

我的应用程序使用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
}

当应用程序处于打开状态并且收到通知时,回调会被触发,当应用程序转到后台时,徽章就会出现。但是我想在应用程序处于后台或退出时增加徽章编号。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

经过大量研究后,我创建了一个示例应用程序,用于在接收服务器推送通知时递增appBadge。 您可以从Increment the ios appBadge Titanium 下载代码。下载资源文件夹后请按照步骤进行操作。

  
      
  1. 在Titanium中创建一个新的移动应用程序项目。
  2.   
  3. 将资源文件夹替换为您下载的资源文件夹。
  4.   
  5. 登录www.appcelerator.com,转到您的应用,然后转到管理ACS
  6.   
  7. 以管理员身份创建新用户,将用户设置为管理员
  8.   
  9. 使用admin用户创建新的访问控制列表(ACS),并将ACL名称指定为'SampleApp'
  10.   
  11. 上传推送通知的p12证书
  12.   
  13. 现在将应用程序安装到iPhone并运行应用程序......
  14.   

应用的每个用户都应该有一个存储通知数量的自定义对象。我在发送推送时更新它们并在我恢复/打开应用程序时将其清除。我用我的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
       }
})