卸载应用程序后 apns http2 api 未返回状态 410

Posted

技术标签:

【中文标题】卸载应用程序后 apns http2 api 未返回状态 410【英文标题】:apns http2 api not returning status 410 after uninstalling app 【发布时间】:2017-01-10 11:08:54 【问题描述】:

我使用带有 http2 协议的 apns 来发送推送通知,我使用的代码类似于这篇文章: https://***.com/a/34831873/1546652

当我的应用程序正确安装后,apns http2 api 在发送消息时可以正常工作,我的回复是这样的: "响应":"","httpcode":200

问题是,当我卸载应用程序并向无效的 registrationId 发送推送通知时,我没有收到状态 410,也没有收到响应“原因:未注册”,但仍然收到状态为 200 的真实响应。

在 apns http2 中卸载应用程序时如何接收 410 状态和对应响应?

【问题讨论】:

你能检测到这个问题吗? 有同样的问题。有什么解决办法吗? 【参考方案1】:

您还应该尝试旧的反馈服务,它仍然有效。

NWPusher 是一种快速检查方法。

【讨论】:

【参考方案2】:

这是我在 APNS 产品服务上的 410 状态体验;在设备上删除分发应用程序后,我可以得到 410 响应几次,但是在测试 APNS Http/2 API 花费了太多时间之后,我注意到对于属于已删除应用程序的先前设备令牌,它总是返回成功(http 200)响应,即使在 2-3 天之后

我在添加apns logging profile后发现了这两行log in device:

APSCourier: Received message for recently removed topic ‘com.xxx.xxx.xxx’
APSCourier: Sending acknowledgement message

我认为,这是关于在设备上接收已删除主题的通知并将其确认消息从设备发送到后面的 APNS 的异步流程。不知何故,APNS 不会对这些确认采取行动。

考虑到 APNS 行为的当前状态,使用新的 APNS 通知服务将其作为卸载跟踪过程的一部分目前不是正确的方法

您可以执行后台任务而不是 APNS,以 ping 您的服务器,让您检测卸载状态。

并想分享一些来自苹果开发者论坛的链接,讨论并行主题:

APNs token still valid after app uninstalled

Older APNs device tokens do reach the device

Old APNs tokens not invalidating?

How do APNS HTTP/2 and APNS HTTP/1.1 Work together?

When does APNS report an uninstall?

【讨论】:

你能分享更多细节吗?我正在尝试检测卸载,但我总是在 curl 请求中获得 200。【参考方案3】:

This technical note 可能会有所帮助,基本上

ios 将为每个 APNS 环境(生产/沙盒)保留一个套接字连接,当您从 iOS 删除应用程序时,如果它是给定环境的最后一个应用程序,它也会终止该套接字连接,从而导致删除事件放弃了最后一个应用程序。

这通常发生在开发应用程序中。

解决方案是在注册 APNs 并使用开发者身份签名的设备上安装一个虚拟应用程序,现在当您在开发期间从设备中删除您的真实应用程序时,它将保持与 APNS 的连接打开,从而导致应用程序删除报告给 APNS。

此外,在我的测试中,我在 APNS 响应中反映应用删除之前经历了大约 30-60 分钟的延迟。

【讨论】:

谢谢老兄,但是我创建了另一个使用开发人员身份(相同的证书)和不同的临时配置文件签名的应用程序,因为您不能使用具有不同捆绑 ID 的相同临时配置文件并且没有工作。我想我使用专用设备来不丢失服务。我也不认为技术说明中所说的可能是“只需从 App Store 安装任何支持推送的免费应用程序,然后您应该能够删除您的应用程序并看到它出现在反馈服务中”.. 这样做你觉得有道理吗? 引自注释,“您可以通过在设备或计算机上保留至少一个支持推送的应用程序来解决此问题,以保持持久连接。保持与生产环境的持久连接起来,只需从 App Store 安装任何支持推送的免费应用程序,然后您就可以删除您的应用程序并看到它出现在反馈服务中。”建议的应用商店安装仅适用于生产案例。安装一个虚拟的开发应用程序应该可以解决这个问题。另外,您的问题是否特定于 http2 api?您是否可以直接从二进制 api 中的反馈服务中获得卸载? 您链接到的注释是旧文档的一部分。问题是指http2 api,记录在here。我还在使用 http2 api 的测试中发现,由于应用程序“未注册”,推送可能需要至少 10 分钟才能失败。

以上是关于卸载应用程序后 apns http2 api 未返回状态 410的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift2 中通过 HTTP2 与 APNS 服务器通信

说说apns和http2

curl 将数据发布到 HTTP/1.1,即使使用 APNs 的 http2 选项

即使 http2 返回代码 200,iOS APNS 也不会在设备上用于开发和生产

应用程序删除和 APNS

APNS Apple 推送通知服务未收到来自 Apple 的成功消息