Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS推送通知-设备令牌管理_Ios_Swift_Apple Push Notifications - Fatal编程技术网

iOS推送通知-设备令牌管理

iOS推送通知-设备令牌管理,ios,swift,apple-push-notifications,Ios,Swift,Apple Push Notifications,我正在向我的应用程序添加推送通知,我知道我需要在数据库中存储设备令牌,以便我可以向特定设备(或所有设备)发送推送通知 我的问题是,维护这些设备令牌的最佳实践是什么?我可以在收到所有设备令牌时存储它们,但如何检测并删除不再有效的旧设备令牌?我假设如果用户删除应用程序,或者如果用户关闭应用程序的通知,设备令牌可能会变得无效 更新-具有用户身份验证并将其链接到设备令牌(以及基于登录/注销的更新)是有意义的。但是如果用户删除了应用程序呢?没有注销,那么如何删除设备令牌?为特定用户制作一个Web服务,将用

我正在向我的应用程序添加推送通知,我知道我需要在数据库中存储设备令牌,以便我可以向特定设备(或所有设备)发送推送通知

我的问题是,维护这些设备令牌的最佳实践是什么?我可以在收到所有设备令牌时存储它们,但如何检测并删除不再有效的旧设备令牌?我假设如果用户删除应用程序,或者如果用户关闭应用程序的通知,设备令牌可能会变得无效


更新-具有用户身份验证并将其链接到设备令牌(以及基于登录/注销的更新)是有意义的。但是如果用户删除了应用程序呢?没有注销,那么如何删除设备令牌?

为特定用户制作一个Web服务,将用户的设备令牌存储在数据库中。仅当用户已登录或您已根据需要识别用户时,才调用此Web服务。当设备成功注册通知时,您需要调用此Web服务,如果用户未识别(即未登录),则在登录api后调用此服务

在登录和注册API时也传递设备令牌(如果您有),并根据您的流替换特定用户的设备令牌


当用户注销只是注销通知时,正如您在上一次声明中所说,我假设如果用户删除应用程序,或者如果用户关闭应用程序的通知,设备令牌可能会变得无效

一般情况下,当用户再次登录应用程序或注册应用程序时,您需要再次从用户处获取设备令牌,并需要将其存储在数据库中

假设我有一个应用程序,并且再次安装时,每当我再次登录到该应用程序时,api必须具有
deviceID
的参数,因此每当api调用登录时,只要替换旧的设备令牌,数据库中就会出现新的设备令牌。使用该应用程序注册新用户时也会发生同样的情况


希望以上描述对您有所帮助。:)

使用APNS反馈服务,查找属于已卸载应用的设备令牌。 看


如果您使用类似Amazon SNS的推送通知,您可以使用其API获取禁用的ARN列表,并从数据库中删除相应的设备令牌。

您的应用程序服务器将不知道某个特定应用程序是否已被强制删除&您的服务器仍会将令牌T1映射到已删除的应用程序/设备,比如A1。现在,另一个有效用户(A2)可能会出现相同的设备令牌T1。您只需确保在任何时间点,一个设备令牌(即T1)只映射到一个设备(提供T1最新令牌的设备)。此时应删除所有其他较旧的设备令牌映射,即A1-T1,否则A2可能会收到A1的通知。

不再使用Apple反馈服务。相反,我们必须从apple推送通知服务中查找401的响应状态,以确定令牌无效

在开发环境中测试这一点。使用下面的技巧(它说这是用于反馈服务,但也应该使用APNS的新状态代码)


如果您的应用程序使用用户身份验证,则您在身份验证时将其存储在服务器上,当用户注销时,您将代表任何唯一ID从服务器上删除。如果不是,则说明您的应用程序功能,这对于注销是有意义的,但如果用户删除该应用程序呢?那么我们如何删除设备令牌呢?您的应用程序服务器将不知道某个特定应用程序是否已被强制删除&您的服务器仍会将令牌T1映射到已删除的应用程序/设备,比如A1。现在,另一个有效用户(A2)可能会出现相同的设备令牌T1。您只需确保在任何时间点,一个设备令牌(即T1)只映射到一个设备(提供T1最新令牌的设备)。此时应删除所有其他较旧的设备令牌映射,即A1-T1,否则A2可能会收到A1的通知。@Ayush是对的,我认为没有任何针对增强型APNS(http/2)接口的反馈服务。@Ayush,在这种情况下,如果使用http APNS接口查找不再活动的令牌,您仍然可以使用http状态代码。HTTP状态代码410表示令牌不再处于活动状态。看到了吗?你确定吗?如果用户强制删除应用程序,苹果会拒绝说410&会删除设备令牌吗?我见过一个案例,应用程序被强制删除并重新安装,相同的设备令牌被再次分配给应用程序。我认为这些通知将被发送到iOS,如果应用程序被强制删除,iOS将删除这些通知。苹果云将如何检测该应用程序被删除?我认为,当苹果试图向删除应用程序的客户端发送通知时,它可能会检测到令牌并使其失效。如果您可以确认的话,是这样吗?反馈服务在遗留部分下。它还在用吗?