Firebase - 在.delete()之后清除缓存的订阅

时间:2017-02-14 18:18:54

标签: ios swift firebase firebase-cloud-messaging

当用户退出时,我会这样做:

<% constructioncost = @costproject.costestimates.find{|c| c.costcat.position == 1}.amount %>
<% @costproject.costestimates.each do |costestimate| %>
    <% if costestimate.costcat.typical != nil %>
       <% costtypical = costestimate.costcat.typical * constructioncost %>
    <% end %>
    <td><%= costtypical %></td>
    <td><%= costestimate.notes %></td>

哪个应该(?)使令牌无效并取消订阅所有主题。

它可以工作,但使用相同的设备登录并调用FIRInstanceID.instanceID().delete(handler: { (error) in }) (从准备就绪时的通知),我得到相同的令牌(不是真正的问题,但是意外)。然而;订阅主题(例如登录时)似乎从之前的登录中缓存在设备中,因此它不会进行网络呼叫,这意味着令牌不会与FCM端的任何主题相关联。假设它是同一个用户进行重新连接;他/她想要订阅的主题与FIRInstanceID.instanceID().token()之前的主题相同。

我可以通过使用令牌查询delete()来验证这一点:即使在我的应用中调用https://iid.googleapis.com/iid/info/<token>后,主题列表仍为空。通常此订阅会在订阅多个主题时导致-5错误(此处描述https://github.com/firebase/quickstart-ios/issues/146),但没有任何反应,向我表明应用程序认为已经订阅了主题,因此什么都不做。

那么 - 如何在注销时取消订阅所有主题,并在登录时成功重新订阅?循环使用主题subscribeToTopic对我来说似乎有点笨拙。

1 个答案:

答案 0 :(得分:0)

相反,您可以通过执行FiRMessaging.messaging.disconnect()来断开用户与获取推送通知的连接 并在用户登录时连接用户