Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Android 注销/登录后的Google FCM主题订阅_Android_Firebase_Firebase Cloud Messaging - Fatal编程技术网

Android 注销/登录后的Google FCM主题订阅

Android 注销/登录后的Google FCM主题订阅,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,当用户X订阅了许多不同的主题,如“组中的新订阅源”或“我写的问题的新答案”,然后在应用程序中注销(这会导致令牌ID刷新)并在一段时间后登录时,使用新FCM令牌,所有订阅都会丢失 编辑:在我的应用程序中,如果另一个用户登录此设备,令牌将被刷新示例:如果卸载并重新安装应用程序,或者用户登录到另一台设备,则会丢失有关其过去的所有数据,我需要重新订阅所有相关主题 恢复特定用户的所有主题订阅的最佳做法是什么。我想,将用户的每个订阅保存在一个数据库中(mongodb在一个单独的集合中或redis as li

当用户X订阅了许多不同的主题,如“组中的新订阅源”或“我写的问题的新答案”,然后在应用程序中注销(这会导致令牌ID刷新)并在一段时间后登录时,使用新FCM令牌,所有订阅都会丢失

编辑:在我的应用程序中,如果另一个用户登录此设备,令牌将被刷新示例:如果卸载并重新安装应用程序,或者用户登录到另一台设备,则会丢失有关其过去的所有数据,我需要重新订阅所有相关主题

恢复特定用户的所有主题订阅的最佳做法是什么。我想,将用户的每个订阅保存在一个数据库中(mongodb在一个单独的集合中或redis as list中,使用lua脚本),并对所有订阅进行数据库检查,并在登录后对此fcm令牌进行新订阅。我使用MongoDB进行用户/组管理,但也使用redis


另外,我希望用户可以订阅/取消订阅一个组、问题等。。(并查看他是否已订阅)。

如果用户注销,则不会刷新令牌,因为身份验证和未使用身份验证的注销/登录都不重要

在4种情况下刷新:

应用程序删除实例ID

应用程序已在新设备上还原

用户卸载/重新安装应用程序

用户清除应用程序数据

更多信息请点击此处:

假设一个用户订阅了一个名为
weather
的主题,那么他将拥有一个与他相关的令牌ID。如果您使用
onTokenRefresh()
并在该方法中添加订阅,则当他重新安装应用程序时,他无需再次订阅

另外,我希望用户可以订阅/取消订阅一个组、问题等。。(看看他是否在上面签了名)

用户可以通过以下方式轻松订阅:

 FirebaseMessaging.getInstance().subscribeToTopic("weather");
取消订阅:

 FirebaseMessaging.getInstance().unsubscribeFromTopic("weather");

您可以简单地这样做,用户单击按钮subscribe,然后他将订阅特定主题,另一个按钮Unscribe,他将被取消订阅,不再收到该主题的通知(直到他再次订阅)

如果用户注销,令牌将不会刷新,因为在不使用身份验证的情况下,身份验证和注销/登录都不重要

在4种情况下刷新:

应用程序删除实例ID

应用程序已在新设备上还原

用户卸载/重新安装应用程序

用户清除应用程序数据

更多信息请点击此处:

假设一个用户订阅了一个名为
weather
的主题,那么他将拥有一个与他相关的令牌ID。如果您使用
onTokenRefresh()
并在该方法中添加订阅,则当他重新安装应用程序时,他无需再次订阅

另外,我希望用户可以订阅/取消订阅一个组、问题等。。(看看他是否在上面签了名)

用户可以通过以下方式轻松订阅:

 FirebaseMessaging.getInstance().subscribeToTopic("weather");
取消订阅:

 FirebaseMessaging.getInstance().unsubscribeFromTopic("weather");

你可以简单地这样做,用户单击按钮subscribe,然后他将订阅一个特定的主题,另一个按钮Unscribe,他将被取消订阅,并且不再收到该主题的通知(直到他再次订阅)

我已经用Redis和LUA脚本以及列表解决了这个问题,这保证了我的快速访问,以及用户可以看到的每一组/新闻饲料,如果他订阅或不订阅(如Facebook)。当用户登录到一个新设备时,他将重新订阅他曾经订阅过的所有主题。

我已经用Redis和LUA脚本以及列表解决了这个问题,这保证了我可以快速访问,并且用户可以查看每个群组/新闻提要,无论他是否订阅(如Facebook)。当用户登录到新设备时,他将重新订阅他所订阅的所有主题。

如果他注销,则在上次编辑时不会刷新令牌。我已在回答中对此进行了解释,如果用户卸载,则会删除令牌。您需要使用方法
onTokenRefresh()
并在其内部执行此操作
FirebaseMessaging.getInstance().subscribeToTopic(“天气”)这样,令牌会被刷新,无论何时执行,如果用户注销,则仍将被订阅。如果在上次编辑中未刷新令牌,我已在答案中解释过。如果用户卸载,则会删除令牌。您需要使用方法
onTokenRefresh()
并在其内部执行此操作
FirebaseMessaging.getInstance().subscribeToTopic(“天气”)
这样,令牌就会被刷新,无论何时执行,用户都会被订阅。我知道,但是当我调用onTokenRefresh()(在应用程序删除实例ID之后)并在该方法中添加订阅时,我从何处获取某个用户订阅的主题?示例:如果卸载应用程序,然后再次安装,则会丢失有关其过去的所有数据,我需要重新订阅所有相关主题。目前您无法这样做,请选中此项。好的,那么唯一的可能性是,将某个用户的主题保存在数据库存储中进行检索。@BestPractice2Go是的,但老实说,我不认为这有什么意义,因为他的设备上的用户只能取消订阅,正如您从答案中看到的那样,主题与令牌相关,令牌也与设备相关,因此只有用户可以从他的设备订阅或取消订阅。如果存在管理员,他无法阻止用户接收通知是的,您是对的,但是当用户登录到另一个设备时,他希望获得他过去订阅的所有主题的通知。这只能通过从数据库中检索特定用户的所有主题列表来实现。然后,onTokenRefresh()中的一个方法可以在新设备上为该用户重新订阅所有主题。否则,用户必须自己完成本手册,但他没有完成