我在应用中使用推送通知。一切都很顺利。
有时从服务器发送消息但在应用程序端发送的消息不会收到。
在这种情况下,我必须知道哪些邮件丢失(应用程序未收到)。
有没有办法从服务器端知道哪些消息是由app接收的,哪些不是?
答案 0 :(得分:26)
Apple不会告诉您以下内容:
另一方面,当用户选择推送通知时,您的应用可以在一定程度上处理此问题:
基本上,您可以在-didReceiveRemoteNotification:
和-didFinishLaunchingWithOptions:
中添加逻辑以联系您的服务器并告知您的服务器已收到该消息。
如果在特定时间段内未收到,则可以重新发送。
但正如您所见,这可能会导致使用相同推送通知充斥无辜用户的可能情况。
在某种意义上,骚扰他点击你的愚蠢推送通知,这反过来可能导致他完全关闭你的应用程序的推送通知,但大多数情况下他会删除该应用程序,甚至可能给它一个低评级?
我说,为你服务吧。
无论如何,如果你继续这样做,你需要实现一个识别模式,你可以在推送通知的有效载荷中插入一个唯一的message identifier
,当你的应用获得这个推送通知时,它应该发送这个message identifier
回到服务器
然后,您的服务器应记录特定设备令牌返回message identifier
,这意味着它已收到该特定推送通知。
您的服务器可以按小时/每日/不同的方式检查,并将特定邮件重新发送给尚未使用相对message identifier
报告的设备令牌。
同样,这意味着您的服务器有时可能需要工作OT。
整个方法还有其他问题:
您可以通过在应用程序中使用更多逻辑来绕过最后3个场景,这些逻辑将要发送到服务器的消息ID排队,并仅在服务器成功响应时将其删除。
所以你看,太多工作,服务器端+客户端。
此外,在与大量用户打交道时,服务器端的性能会大幅降低,同时还会降低应用程序的性能。
答案 1 :(得分:5)
<强> The Feedback Service 强>
Apple推送通知服务包括反馈服务 为您提供有关失败推送通知的信息。当推 无法发送通知,因为预期的应用程序没有 在设备上存在,反馈服务将该设备的令牌添加到 它的清单。在传递之前过期的推送通知 不被视为交付失败,不会影响反馈 服务。通过使用此信息停止发送推送通知 这将无法交付,您减少不必要的消息 开销并提高整体系统性能。
每天查询反馈服务以获取设备令牌列表。使用 验证设备令牌尚未验证的时间戳 自生成反馈条目以来重新注册。对于每个设备 尚未重新注册的,请停止发送通知。的APN 监督提供商在检查反馈方面的勤奋 服务和避免发送推送通知到不存在 设备上的应用程序。
答案 2 :(得分:3)
1。如果您询问的是在设备上安装了应用程序的设备上未提供的通知,并且仅仅是因为通知在交付之前已过期或其他原因,则无法通知通知。
然后答案是
它不提供支持,您可以检查通知是否已过期但未在有效设备上发送:
any option to know if apple app get the push notification?
请参阅上面链接中的Moshe的回答。我在这里包括他的答案,以便将来对每个人都有用,即使链接已经死了。
简短的回答,你不能,因为APNS是单向的。但是,自从 应用程序可以在收到通知后执行任意代码,您可以 用这个来说,当你的服务器发送一个http请求 收到通知。
2. 如果您在用户已卸载应用程序时询问未发送的通知,则可以参阅此帖子中的 meda 答案。
希望这可以帮助您,如果您对我的解释有任何疑问,请告诉我。
答案 3 :(得分:0)
您可以使用&#34;服务扩展程序&#34;来获取推送通知的发送报告,而不是来自服务器,而是来自您的应用。并在Push json中修改一点点。结帐this link了解详细说明。