2009-12-21 172 views
23

我一直在向我的应用程序实施推送服务,并且我一直在考虑应用程序的徽章。我的应用程序是一个邮件应用程序(sorta),我想通过推送添加到收件箱的新邮件来通知用户,我希望收件箱中的徽章=新邮件数量。推送通知徽章自动增量

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

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

也许有一种方法可以在JSON徽章字段中发送一些像“++”或类似的变量。 任何破解?或者我需要去与计数系统服务器端?

+2

自动增量仍然不可能吗?我正在构建一个名为[AcaniChat]的聊天应用程序(https://github.com/acani/AcaniChat)。与iPhone本机Messages应用程序一样,徽章计数等于新(未读)消息的数量,并且您会收到每条新消息的推送通知。所以,如果可以自动增加,我不必在服务器上存储每个设备令牌的徽章数量。 – ma11hew28 2012-09-16 00:17:53

回答

28

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

当然,只有当用户收到通知并且应用程序没有运行时,他们才会选择不启动它。如果用户启动应用程序或已经运行了应用程序,则可以根据需要进行增加操作。

更新2014年3月:查看可能的更新的评论。我好几年没有做过推,所以还没有能够自己验证这一点。

+0

这就是我的想法。 我已经想到了一个系统,但是它让我想起了Apple这次可能会更聪明一点 - 并且自己想到了。 谢谢你清理那个。 – natanavra 2009-12-22 19:24:27

+1

为什么不通过缓存在应用程序中维护徽章号码(例如NSUserDefaults) – msk 2012-06-12 07:24:09

+2

@MSK维护客户端上的徽章号码如何解决此问题?无论如何,如果你想获得徽章号码,你可以''UIApplication sharedApplication] .applicationIconBadgeNumber',不需要将它缓存在'NSUserDefaults'中。 – ma11hew28 2012-09-16 00:24:28

1

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

作为推送有效负载的一部分,您始终可以将未读总数作为附加JSON值发送(推送忽略它不明确理解的键)。一旦用户打开应用程序,读取值并通过UIApplication的applicationIconBadgeNumber属性以编程方式自行调整徽章。

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

+1

这不是一个真正的答案......你说我可以将它添加为JSON的有效载荷,但这是我已经可以做的,我的意思是 - 有没有一种方法可以每次推动时自动递增徽章... 答案它看起来是 - 不是。 我将不得不在服务器上管理它,然后发送一个数字作为aps =>徽章... 每当用户进入应用程序时自己重新设置标志,并且每当用户获取数据时也重新设置服务器上的计数器。 无论如何感谢。 – natanavra 2009-12-22 19:23:30

+0

这里的另一个问题是,只有在用户访问应用程序后更新徽章数量,我们才会失去参与不太活跃用户的机会。 – Zorayr 2017-03-08 23:41:19

1

您可以尝试App42后端服务,它提供服务器端维护的推送徽章计数的自动增量。欲了解更多详情,你可以点击链接blog。以下是博文的内容:

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

对于推送徽章自动增加1,您需要发送推送消息,如下所示。

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

N.B:样品解释为统一/ 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 - 此方法用于更新用户采购的所有设备的推送标志计数。在这种情况下,我们假设用户有多个设备以他的名字注册。

-10

发送+1作为徽章计数,这会自动将徽章数增加1.

+0

这是APNS协议中的新内容吗?你自己测试过了吗? – natanavra 2015-07-15 08:42:47

+2

这根本不起作用。将徽章设置为+1时,通知甚至不会将其发送到设备。 – 2015-08-20 15:35:55