当用户注销时,我会:
FIRInstanceID.instanceID().delete(handler: { (error) in })
哪个应该(?)使令牌无效并取消订阅所有主题。
它是有效的,但使用相同的设备登录并调用FIRInstanceID.instanceID().token()
(当它准备好时从通知中),我会得到相同的令牌(这不是一个真正的问题,但出乎意料)。然而订阅主题(例如登录时)似乎是从上次登录时缓存在设备中的,因此它不会进行网络调用,这意味着令牌不会与FCM端的任何主题相关联。假设是同一个用户在重新登录;他/她想要订阅的主题与CCD_ 2之前的主题相同。
我可以通过使用令牌查询https://iid.googleapis.com/iid/info/<token>
来验证这一点:即使在我的应用程序中调用了subscribeToTopic
,主题列表仍然为空。通常,此调用会导致-5错误(此处描述https://github.com/firebase/quickstart-ios/issues/146)当订阅多个主题时,但什么都没有发生,这表明应用程序认为已经订阅了这些主题,因此什么也不做。
那么,如何在注销时取消订阅所有主题,并在登录时成功重新订阅?循环主题和做unsubscribeFromTopic
对我来说有点古怪。
相反,您可以通过执行FiRMessaging.messageing.disconnect()来断开用户获取推送通知的连接并在用户重新登录时连接用户