我可以通过推送通知处理我的应用程序徽章计数的最佳方式是什么?
What is the best way I can handle my app's badge count via push notifications?
用户
posts
评论
unread_messages
部分期望结果
完全期望的结果
我希望我的应用程序的徽章图标显示一个数字,代表用户拥有的未读评论数。该应用程序是 Post/Comment 风格的应用程序。例如,如果用户 Alice 发表了一个 post,并且用户 Bob 对其进行了评论,则 POST 将被发送到后端 JSON API 到 /comments URL.它将保存评论,将 1 添加到用户 Alice 的 unread_messages 行,并向 APNS 发送推送通知,设置徽章等于 [=80= 中的 count ] table爱丽丝
这样做的原因 unread_messages table 是为了避免在 posts 和 [=53= 上进行 INNER JOIN ]评论,这可能是数据库中最大的两个 table。如果 Alice 有 500 posts,这可能是一个很大的连接,我被告知 count() 是一项昂贵的操作。
客户端
在 iOS 应用程序中,徽章将等于 APNS 发送给它的值。当爱丽丝打开应用程序时,我希望 3 个选项卡的选项卡栏的第一个选项卡显示 unread_messages 数量的徽章。为此,它不会依赖应用徽章上的值,而是向后端 API 调用 Alice 的 unread_messages 中的值。在这种情况下它将 return 3 。该值还将用作上图中 "My Posts" 行中的视觉指示器。
现在,当爱丽丝点击 'My Posts' 时,她将被带到一个显示她所有 post 的新视图。她会看到她的 Post 1 和 Post 2 作为 2 个单独的行。每个旁边都会有一个视觉指示器,显示每个有多少条未读消息。所以这个视图需要拉取 user=alice 的所有 Post 信息,以及所有那些 posts 的所有评论信息,包括 read=false 的数量。这将使我们能够显示 Post 1 有 2 个未读,Post 2 有 1 个未读。
如果 Alice 查看了 Post 1 条,这意味着她将查看 2 条未读消息。将调用服务器以减少 unread_messages 她正在查看的数量,并将 comments 上的 read 列设置为真的。如果她随后退出,则只有 Post 2 会留下一个视觉指示器,显示它是 1 条未读消息。第一个选项卡也将有一个徽章 1。应用程序徽章也会更新,如果她关闭应用程序,徽章也只会显示 1。
这是最好的设计方式吗?这里是否有太多的服务器调用、连接等?有没有更有效的设计方法?
感谢阅读!
由于推送通知是由 iOS 而不是您的应用程序处理的,因此您无法在收到推送通知时更改应用程序徽章。
但是您可以在推送通知的负载中发送徽章编号,但是您必须在服务器端进行计算。
您应该阅读:本地和推送通知编程指南,特别是通知负载。
有效负载可能如下所示:
{
"aps" : {
"alert" : "You got your emails.",
"badge" : 9
}
}
现在应用程序徽章图标将显示 9。
你可以找到类似的答案 here
用户
posts
评论
unread_messages
部分期望结果
完全期望的结果
我希望我的应用程序的徽章图标显示一个数字,代表用户拥有的未读评论数。该应用程序是 Post/Comment 风格的应用程序。例如,如果用户 Alice 发表了一个 post,并且用户 Bob 对其进行了评论,则 POST 将被发送到后端 JSON API 到 /comments URL.它将保存评论,将 1 添加到用户 Alice 的 unread_messages 行,并向 APNS 发送推送通知,设置徽章等于 [=80= 中的 count ] table爱丽丝
这样做的原因 unread_messages table 是为了避免在 posts 和 [=53= 上进行 INNER JOIN ]评论,这可能是数据库中最大的两个 table。如果 Alice 有 500 posts,这可能是一个很大的连接,我被告知 count() 是一项昂贵的操作。
客户端
在 iOS 应用程序中,徽章将等于 APNS 发送给它的值。当爱丽丝打开应用程序时,我希望 3 个选项卡的选项卡栏的第一个选项卡显示 unread_messages 数量的徽章。为此,它不会依赖应用徽章上的值,而是向后端 API 调用 Alice 的 unread_messages 中的值。在这种情况下它将 return 3 。该值还将用作上图中 "My Posts" 行中的视觉指示器。
现在,当爱丽丝点击 'My Posts' 时,她将被带到一个显示她所有 post 的新视图。她会看到她的 Post 1 和 Post 2 作为 2 个单独的行。每个旁边都会有一个视觉指示器,显示每个有多少条未读消息。所以这个视图需要拉取 user=alice 的所有 Post 信息,以及所有那些 posts 的所有评论信息,包括 read=false 的数量。这将使我们能够显示 Post 1 有 2 个未读,Post 2 有 1 个未读。
如果 Alice 查看了 Post 1 条,这意味着她将查看 2 条未读消息。将调用服务器以减少 unread_messages 她正在查看的数量,并将 comments 上的 read 列设置为真的。如果她随后退出,则只有 Post 2 会留下一个视觉指示器,显示它是 1 条未读消息。第一个选项卡也将有一个徽章 1。应用程序徽章也会更新,如果她关闭应用程序,徽章也只会显示 1。
这是最好的设计方式吗?这里是否有太多的服务器调用、连接等?有没有更有效的设计方法?
感谢阅读!
由于推送通知是由 iOS 而不是您的应用程序处理的,因此您无法在收到推送通知时更改应用程序徽章。
但是您可以在推送通知的负载中发送徽章编号,但是您必须在服务器端进行计算。
您应该阅读:本地和推送通知编程指南,特别是通知负载。
有效负载可能如下所示:
{
"aps" : {
"alert" : "You got your emails.",
"badge" : 9
}
}
现在应用程序徽章图标将显示 9。 你可以找到类似的答案 here