2017-10-18 105 views
0

好像我发现的所有其他信息都过时了。 考虑一名拥有iPhone和iPad的用户,并且每台设备上都安装了相同的应用程序。首次从每个设备登录时,唯一设备令牌将被放置在数据库中以用于将来的通知。下面是我用的AppDelegate获得设备令牌的方法:当同一用户使用多个设备时APNs设备令牌更新

- (void)application:(UIApplication*)application 
didRegisterForRemoteNotificationsWithDeviceToken(NSData*)deviceToken 
    { 
    [[NSUserDefaults standardUserDefaults] setValue:deviceToken forKey:@"token"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 

...这样以后我可以在登录过程中使用它。

现在,如果由于某种原因应用程序被卸载并重新安装,或者iOS更新后,设备令牌将会不同,我必须更新数据库中的记录。

如果我不得不处理每个用户只有一个设备,那么我会按用户ID去删除以前的记录并插入新的记录。但是,如果有多个设备......我如何确定要更新哪个数据库记录,哪个令牌不再被使用?

是否有一些独特的设备ID永远不会改变?

回答

0

每次启动应用程序时,更新的设备令牌都将采用您用来存储设备令牌的相同方法。所以你可以只使用逻辑来保存和更新令牌。

您将当前令牌存储在UserDefaults中,因此只需从数据库中首先删除该令牌,然后更新新令牌。 您可以使用您保存令牌的相同方法执行此操作。为此,每次必须检查当前设备令牌是否在数据库中?如果是,则将其删除并更新为用户标识。如果不是,只需将这一个保存在用户ID的数据库中。

+0

不,如果我卸载并重新安装应用程序,它不会以这种方式工作。 UserDefaults将为空。但旧的令牌仍然在数据库中。 – ekashking

+0

您可以尝试在用户第一次登录时删除每个令牌,并且每次启动应用时都应更新其他设备的令牌。虽然有一个问题,但在设备令牌被删除并且设备仍处于活动状态的短时间内,您将无法在短时间内发送通知。 –