【问题标题】:Push-Notification Badge auto increment推送通知徽章自动递增
【发布时间】:2010-12-28 21:28:13
【问题描述】:

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

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

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

也许有一种方法可以在 JSON 徽章字段中发送一些变量,如“++”或类似的东西。 有什么技巧吗?还是我需要在服务器端使用计数系统??

【问题讨论】:

  • 自动增量还是不行吗?我正在构建一个名为AcaniChat 的聊天应用程序。与 iPhone 的原生消息应用程序一样,徽章计数等于新(未读)消息的数量,并且您会收到每条新消息的推送通知。因此,如果可以自动递增,我就不必将每个设备令牌的标记计数存储在服务器上。

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


【解决方案1】:

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

扩展程序能够在 iOS 显示通知负载之前对其进行修改。总之,在 UserDefaults 中存储一个标记计数器,并根据需要修改通知的标记计数。您需要添加应用组功能以共享用户默认值。

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

【讨论】:

  • 指南链接无效。你能给我发一步吗?
【解决方案2】:

不,您必须在服务器端进行跟踪。如果您没有为徽章添加任何值,它将被完全删除。

当然,这只是在用户收到通知并且应用未运行/他们选择不启动它的情况下。如果用户启动了应用程序或已经运行了它,您可以在递增方面做任何您想做的事情。

2014 年 3 月更新:请参阅 cmets 了解可能的更新。我已经好几年没有推送了,所以我自己无法验证这一点。

【讨论】:

  • 我就是这么想的。我已经想到了一个系统,但我突然想到苹果这次可能会更聪明一些——并且自己想到了。感谢您清除它。
  • 为什么不通过缓存来维护应用程序中的徽章编号(例如 NSUserDefaults)
  • @MSK 在客户端维护徽章编号如何解决此问题?无论如何,如果您想获得徽章编号,您可以直接使用[UIApplication sharedApplication].applicationIconBadgeNumber,无需将其缓存在NSUserDefaults
  • 如果徽章不包含在负载中,它不会从应用程序图标中删除徽章。它只是不碰它。要删除徽章,必须将其设置为零。
  • @bpapa hi 在我的 gmail 应用程序中,我没有打开应用程序,但我的图标徽章设置为零,即使我没有打开应用程序,只有我打开我的电脑浏览器并检查邮件。怎么可能?
【解决方案3】:

您可以试用 App42 后端服务,该服务提供在服务器端维护的推送徽章计数的自动递增。更多详情可以关注blog的链接。以下是博文内容:

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

推送徽章自动加1,需要发送推送消息,如下图。

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

注意:解释的示例适用于 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】:

    发送+1获取徽章计数,这将自动将徽章计数增加1。

    【讨论】:

    • 这是 APNS 协议中的新内容吗?你自己测试过吗?
    • 这根本行不通。将徽章设置为 +1 时,通知甚至不会发送到设备。
    【解决方案5】:

    这是可能的,但需要权衡。

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

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

    【讨论】:

    • 这不是一个真正的答案......你说我可以将它添加为 JSON 的有效负载,但这是我已经可以做的事情,我的意思是 - 有没有办法在每次推送时自动增加徽章... 答案,看来 - 是否。我将不得不在服务器上管理它,然后发送一个数字作为 aps=>badge... 每当用户进入应用程序时自己重置徽章,并在用户获取数据时重置服务器上的计数器。无论如何,谢谢。
    • 这里的另一个问题是,仅在用户访问应用程序后更新徽章计数,我们就失去了吸引不太活跃用户的机会。
    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    相关资源
    最近更新 更多