在用户注销时使iOS设备推送令牌无效

当我们退出应用程序时,如何可靠地使设备的推送令牌无效(从我的服务器上删除用户配置文件)给我的服务用户

我在我的用户配置文件中保留一个包含apns令牌的字符串数组,每当用户在给定设备上启用推送通知添加一个.

后来我意识到推送令牌对于设备是唯一的,但显然对我的内部用户帐户一无所知,因此如果一个用户注销而另一个用户登录(同一设备),则每个用户都拥有相同的令牌.然后,设备的当前用户获得针对其中任何一个的推送通知.

基本的解决方案是在注销时从用户配置文件删除设备的令牌,但我想出了一堆陷阱,因为我认为通过:

>注销不应该要求网络访问 – 我可以尝试通知我的服务器,但需要注销才能异步成功,即使用户没有网络访问权限(?)
>实际的设备令牌可能是未知的 – 如果用户暂时关闭了推送权限,则不会给出当前令牌.并且存储设备< - >密钥信息充其量是微不足道的,因为每个安装的identifierForvendor更改并且不推荐使用UDID方法.
>服务器端是否正常(在向帐户添加令牌时,确保没有为任何其他帐户设置相同的令牌) – 这取决于第二个用户登录,这是无法保证的.

我是否缺少更多边缘案例,我可以使用哪些策略来解决它们?

解决方法

你的问题确实呈现了你可能面临的一些困难局面.我建议您转移或确保推送发送逻辑完全在服务器端:将pushtoken链接到您选择的用户标识符(意味着一个推送令牌确实可以链接到多个用户).您控制的此标识符是您需要发送推送时的目标帐户标识符.这样,您可以控制哪个用户应该接收通知并根据此标识符检索其pushtoken(与Apple提供的任何设备标识符相比,假设1个设备= 1个用户).

如果您的用户离线注销,您将无法了解它.您可以向该用户发送通知.如果用户选择对其进行操作,您的应用程序将打开,此时您可以取消订阅服务器中的用户标识符(因为此时他显然在线).

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...