推送通知徽章自动增量

时间:2009-12-21 21:00:54

标签: iphone objective-c iphone-sdk-3.0 push-notification

我一直在为我的应用程序实现推送服务,我一直在考虑应用程序的徽章。我的应用程序是一个邮件应用程序(sorta),我想通过推送通知用户添加到收件箱中的新邮件,我想要徽章=收件箱中新邮件的数量。

我想到服务器端(提供商)检查新邮件并将号码作为徽章发送。

问题是: 有没有办法自动增加应用程序的徽章,而不必计算服务器侧的徽章值,然后将其作为推送有效负载的一部分发送到APSN?

也许有一种方法可以在JSON徽章字段中发送一些变量,如“++”或类似的东西。 任何黑客攻击?或者我是否需要使用服务器端计数系统?

5 个答案:

答案 0 :(得分:29)

不,你必须在服务器端跟踪这个。如果您没有包含徽章的任何值,它将被完全删除。

当然,虽然这只是在用户收到通知并且应用未运行/他们选择不启动它时。如果用户启动应用程序或已经运行该应用程序,您可以执行任何有关增量的操作。

更新2014年3月:查看评论以了解可能的更新。我好几年没做过推,所以我自己也没能验证过。

答案 1 :(得分:2)

现在可以让客户端使用UNNotificationServiceExtension自动增加徽章。

扩展可以在iOS显示通知有效负载之前对其进行修改。总之,将徽章计数器存储在UserDefaults中,并根据需要修改通知的徽章计数。您需要添加“应用程序组”功能以共享用户默认值。

这是详细的分步指南:https://prodocs.cometchat.com/docs/ios-increment-app-icon-badge-count

答案 2 :(得分:1)

这有点可能,但有一个权衡。

作为推送有效负载的一部分,您始终可以将未读总计作为附加JSON值发送(推送忽略它未明确理解的密钥)。用户打开应用后,请阅读该值并通过UIApplication的applicationIconBadgeNumber属性以编程方式调整徽章。

这样做的问题是,即使用户没有打开应用程序(即当他们收到通知并且用户点击'取消'而不是'查看'时),推送会调整徽章值。在这些情况下,您的徽章不会更改,但只要他们运行应用程序(如果他们点击“查看”),那么您的应用就可以正确设置。

答案 3 :(得分:1)

您可以尝试App42后端服务,该服务提供服务器端维护的推送徽章计数的自动增量。有关详细信息,请访问blog的链接。这是blogpost conent:

以下是可通过App42推送通知中的自动增量徽章计数实现的少数用例。

如果推牌的自动增量为1,则需要发送推送信息,如下所示。

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService (); // Initializing PushNotification Service.
string userName = "UserName";
string message= "{'badge':'increment'}";
pushNotificationService.SendPushMessageToUser(userName,message, new UnityCallBack())

N.B:解释的示例适用于Unity / C#,但同样的过程也适用于其他人。

如果要为徽章规定任何编号或想要将徽章计数减少到零,则可以使用此方法更新计数,因为用户点击了通知。在这种情况下,您必须调用updatePushBadgeforDevice或updatePushBadgeforUser。

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService (); // Initializing PushNotification Service.
string userName = "UserName";
string deviceToken = "DeviceToken";
int badges = 10; // For clear count make it 0 
pushNotificationService.UpdatePushBadgeforDevice(userName, deviceToken, badges,  new UnityCallBack());

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService (); // Initializing PushNotification Service.
string userName = "UserName";
int badges = 10; // For clear count make it 0
pushNotificationService.UpdatePushBadgeforUser(userName, badges,  new UnityCallBack());

updatePushBadgeforDevice - 此方法用于更新用户注册的特定设备的推送徽章计数。

updatePushBadgeforUser - 此方法用于更新用户采购的所有设备的推送徽章计数。在这种情况下,我们假设用户有多个以他的名义注册的设备。

答案 4 :(得分:-11)

发送+1以获取徽章计数,这会将徽章计数自动递增1.

相关问题