有推送通知问题的登录/注销用户

Posted

技术标签:

【中文标题】有推送通知问题的登录/注销用户【英文标题】:Login/Logout user with push notification issue 【发布时间】:2017-01-04 13:23:35 【问题描述】:

在我的应用程序中成功实现了推送通知相关的基础并且运行良好。 但是当用户成功注销并使用新用户登录/注册时面临的问题没有收到通知。

是的!这里的问题是针对DeviceToken

注册推送通知时第一次得到deviceToken。 将此 deviceToken 传递给服务器并接收推送通知。 注销此用户并通过其他用户注册/登录 没有获得任何令牌尝试 unregisterForRemoteNotifications 但不再使用 ios 10。这样设置可能不是一个好主意。

如果我们可以获得新的设备令牌,那么问题将得到解决,但可能无法解决。

注意:通过帮助后端可能我们可以解决但建议我更好的方法。如果可能在我们身边,那就太酷了。

那么我可以为我的第二个用户做些什么呢?

【问题讨论】:

登录时您会做什么,您将传递 devicetoken,因此在后端 webdeveloper 将设置 userid-devicetoken 关系,因此在后端他知道他需要在哪个设备令牌上为相应的用户发送推送......当你注销,你会给他用户 ID 和 devicetoken 和 webdeveloper 将再次打破现实...... @FahimParkar - 是的,做同样的事情 【参考方案1】:

首先你应该把你的通知注册码写在

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken

方法。然后将该令牌保存在某处,例如在用户默认值中

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken 

    NSString *token; //extract from devToken
    [[NSUserDefaults standardUserDefaults] setObject:token forKey:@"device_token"];


现在成功登录后将此令牌发送到您的后端服务器。同样在注销时,在注销请求或其他内容中向后端发送相同的令牌,并从您的后端系统注销此令牌。

【讨论】:

我尝试了相同但仍然无法为其他用户工作,只有第一个用户可以收到通知。【参考方案2】:

didRegisterForRemoteNotificationsWithDeviceToken 在成功注册远程通知时调用一次。您可以按照 Rahul 的建议保留令牌。但不是在 didRegisterForRemoteNotificationsWithDeviceToken() 中读取此值,而是在用户登录后调用的方法中读取它。如果该值存在,则将此令牌发送到您的服务器。您的服务器应删除与前一个用户关联的令牌并将此令牌分配给新用户。从苹果服务器/设备的角度来看,用户与设备令牌无关。因此,新用户登录后没有调用您的 api,或者您的服务器端存在令牌映射问题。

【讨论】:

【参考方案3】:

您可以在注销时调用一项 Web 服务来清除该特定用户的设备令牌,这样当用户再次注册时,它将使用设备令牌注册,并且在注销时,它将从数据库中清除设备令牌

【讨论】:

以上是关于有推送通知问题的登录/注销用户的主要内容,如果未能解决你的问题,请参考以下文章

Apple 推送通知、注销应用和删除应用问题/解决方案

IBM Workilght 6.0 - 注销后无法订阅推送通知

当应用程序未运行/注销时禁用苹果推送通知

当我尝试登录注册用户并通过解析启用推送通知时,我的应用程序崩溃

在 iOS 8 中取消注册推送通知

当我删除应用程序时推送通知