1

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

我在这里读到收到新的推送通知时调用的“回调函数” 。所以我将以下代码设置为回调以增加徽章。

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
}

它在应用程序打开时工作,当它收到通知时,回调被触发,当应用程序进入后台时,徽章出现。但是我想在应用程序处于后台或退出时增加徽章编号。谁能帮我解决这个问题?

4

1 回答 1

1

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

  1. 在 Titanium 中创建一个新的移动应用程序项目。
  2. 将资源文件夹替换为您下载的文件夹。
  3. 登录 www.appcelerator.com,转到您的应用程序,然后转到管理 ACS
  4. 创建一个新用户为管理员,设置用户为管理员
  5. 使用管理员用户创建一个新的访问控制列表 (ACS),并将 ACL 名称指定为“SampleApp”
  6. 上传推送通知的p12证书
  7. 现在将应用程序安装到您的 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
       }
})
于 2013-04-29T04:11:26.137 回答