我正在向我的应用添加推送通知,我知道我需要在我的数据库中存储设备令牌,以便我可以向特定设备(或所有设备)发送推送通知。
我的问题是维护这些设备令牌的最佳做法是什么?我可以在收到所有设备令牌时存储它们,但是如何检测和删除不再有效的旧设备令牌?我假设如果用户删除应用程序,或者如果用户关闭了应用程序的通知,则设备令牌可能会无效。
更新 - 拥有用户身份验证并将其链接到设备令牌(并根据登录/注销进行更新)是有意义的。但是,如果用户删除应用程序呢?没有注销,那么如何删除设备令牌呢?
答案 0 :(得分:2)
不再使用Apple反馈服务。相反,我们必须从apple推送通知服务中查找401的响应状态,以确定令牌无效。
在开发环境中测试它。使用下面的技巧(它表示反馈服务,但也应该使用APNS的新状态代码)
答案 1 :(得分:1)
使用APNS反馈服务查找属于已卸载应用的设备令牌。 见this apple documentation
如果您使用Amazon SNS之类的推送通知,则可以使用其API获取已禁用的arns列表,并从数据库中删除相应的设备令牌。
答案 2 :(得分:0)
创建一个Web服务,将用户的设备令牌存储在特定用户的数据库中。仅在用户登录或根据您的要求识别用户时才调用此Web服务。当设备成功注册通知并且用户未识别(即未登录)时,您需要调用此Web服务,然后在登录api后调用此服务。
在登录时也传递设备令牌并注册API,如果你有根据你的流量并替换特定用户的设备令牌。
当用户注销时,只需取消注册通知
答案 3 :(得分:0)
正如您在上一篇声明中所述我假设如果用户删除应用程序,或者如果用户关闭了应用程序的通知,则设备令牌可能会无效。
一般情况是,当用户再次登录应用程序或注册到应用程序时,您需要再次从用户获取设备令牌并需要将其存储在数据库中
假设我有一个应用程序并且我只安装那个当时我再次登录应用程序时api必须具有deviceID
的参数,所以每次api调用时都会发生登录新设备只需替换旧的令牌就可以在您的数据库中进行。使用该应用程序的新注册也会发生同样的事情。
希望以上描述可以帮到你。 :)
答案 4 :(得分:0)
您的应用服务器不知道某个特定应用是否已被强行删除&您的服务器仍然会让令牌T1映射到已删除的应用/设备,让我们说A1。现在,另一个有效用户(A2)可能会提供相同的设备令牌T1。您只需要确保在任何时间点,一个设备令牌(即T1)仅映射到一个设备(最新提供T1的设备)。此时应删除所有其他旧设备令牌映射,即A1-T1,否则A2可能会收到A1的通知。