检测用户是否已禁用来自APN的推送通知权限

use*_*962 5 apple-push-notifications ios

我了解我们可以在iOS客户端上添加代码来检测用户是否已禁用推送通知权限,我的问题是,是否可以仅使用APN来做到这一点?

我先从Apple编程指南尝试“反馈服务”:

Apple Push Notification服务包括一项反馈服务,可为您提供有关失败的远程通知的信息。当由于预期的应用程序不存在而无法发送远程通知时,反馈服务会将该设备的令牌添加到其列表中。在传递之前过期的远程通知不被视为传递失败,并且不会影响反馈服务。通过使用此信息停止发送将无法传递的远程通知,可以减少不必要的消息开销并提高整体系统性能。

反馈服务有效负载

因此,“反馈服务”本质上为失败的推送通知提供了令牌列表。我尝试将推送发送到具有禁用推送通知权限或卸载了应用程序的设备,但是我的设备令牌未出现在此列表中。

苹果的文档还提到,一旦发送推送通知,我们将立即得到APN的响应:

如果您发送APN接受的通知,则不会返回任何内容。如果您发送格式不正确或无法理解的通知,则APNs将返回错误响应数据包并关闭连接。使用相同的连接在格式错误的通知之后发送的所有通知都将被丢弃,并且必须重新发送。错误响应数据包的格式如图A-2所示。

但是,无论我做什么,似乎返回的状态都保持不变:启用/禁用推送通知权限,甚至卸载应用程序...

我的假设是,即使用户禁用了推送通知,APN仍会将其视为成功交付,但iOS只是不显示它。它们中没有一个来自APN的响应代码似乎与禁用的推送通知有关。

我想知道是否可以使用APN做到这一点?谢谢!

参考:Apple Doc:https//developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html#//apple_ref/doc/uid/TP40008194-CH13-SW1