据我所知,我们可以在iOS客户端添加代码来检测用户是否已禁用推送通知权限,我的问题是,是否可以仅使用APN进行操作?
我首先尝试使用Apple编程指南中的“反馈服务”:
Apple推送通知服务包括反馈服务 提供有关失败的远程通知的信息。当一个遥控器 无法发送通知,因为预期的应用程序没有 在设备上存在,反馈服务将该设备的令牌添加到 它的清单。在传递之前到期的远程通知是 不被视为交付失败,不会影响反馈 服务。通过使用此信息停止发送远程 通知将无法交付,您减少不必要的 消息开销并提高整体系统性能。
因此,“反馈服务”本质上为我们提供了失败推送通知的令牌列表。我尝试将推送发送到已禁用推送通知权限或已卸载应用的设备,但我的设备令牌未显示在此列表中。
Apple的文档还提到,一旦我们发送推送通知,我们将立即得到APN的回复:
如果您发送APN接受的通知,则不会发生任何事情 回。如果您发送格式错误或其他通知 难以理解,APN返回错误响应数据包并关闭 连接。在格式错误之后发送的任何通知 使用相同连接的通知将被丢弃,并且必须是 怨恨。图A-2显示了错误响应数据包的格式。
但是,无论我做什么,似乎返回状态都保持不变:启用/禁用推送通知权限甚至卸载应用程序......
事实上,我的假设是,即使用户已禁用推送通知,APN仍会将其视为成功发送,但iOS只是不显示它。来自APN的响应代码似乎都与禁用的推送通知无关。
我想知道是否有办法用APN做到这一点?谢谢!