Firebase 推送通知 - 如何跟踪用户 FCM 令牌?

Posted

技术标签:

【中文标题】Firebase 推送通知 - 如何跟踪用户 FCM 令牌?【英文标题】:Firebase Push Notification - How to keep track of user FCM tokens? 【发布时间】:2018-06-11 12:01:56 【问题描述】:

这是关于 FCM 令牌的一般问题。目前在我的 react-native 应用程序中,一旦我有了新的令牌,我就会进行 API 调用以将此令牌与用户 ID 链接起来。当这个令牌也被刷新时,我再次进行相同的 API 调用。

我们使用这些令牌发送“生日快乐”推送通知等。

我想知道,如果用户不使用该应用程序,此令牌将过期,我们无法跟踪令牌。生日推送通知仍将发送到旧的过期令牌。我们怎样才能减轻这种情况?有什么想法吗?

我实际上正在寻找一种方式/策略,即使他们有一段时间没有使用该应用程序,仍然可以将推送通知传递给用户?您认为预定的推送通知可能有效吗?

【问题讨论】:

【参考方案1】:

当您将数据发送到过期令牌时,您会收到表明这一点的响应。您可以捕获此响应,并使用它从数据库中删除令牌。

这个samples repo for Cloud Functions has a great example。从那里修改:

var response = admin.messaging().sendToDevice(tokens, payload);
// For each message check if there was an error.
const tokensToRemove = [];
response.results.forEach((result, index) => 
  const error = result.error;
  if (error) 
    // Cleanup the tokens who are not registered anymore.
    if (error.code === 'messaging/invalid-registration-token' ||
        error.code === 'messaging/registration-token-not-registered') 
      tokensSnapshot.ref.child(tokens[index]).remove();
    
  
);

【讨论】:

【参考方案2】:

如果用户不使用该应用程序,我想知道, 此令牌将过期,我们无法跟踪 令牌。生日推送通知仍然会发送给旧的 过期的令牌。我们怎样才能减轻这种情况?有什么想法吗?

就我而言,每次启动前端应用程序时,我都会注册 firebase 令牌。大多数情况下,它会发送已存储在我的数据库中的注册令牌。但是,当我的服务器端收到新的 firebase 注册令牌时,我会存储新令牌,并在发送推送通知时,将通知发送到我拥有的所有可用注册令牌。

在您通过将 firebase 注册令牌发送到服务器端应用程序而收到有关启动应用程序的通知之前,您无法确定用户是否已停止使用您的应用程序。希望对您有所帮助。

【讨论】:

我实际上已经实现了你所做的。我们是否可以使用另一种策略来确保特定用户收到“生日快乐”消息,即使他很久以前就停止使用该应用程序? 嗯...我认为没有。最好的方式是通过电子邮件或短信与他们沟通。【参考方案3】:

我们将推动能够留住客户的活动。不过以上所有答案都是正确的。

【讨论】:

以上是关于Firebase 推送通知 - 如何跟踪用户 FCM 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

跟踪 iOS 的 Firebase 通知

如何在 iOS 中使用 Google Firebase 向特定用户发送推送通知?

如何跟踪用户以获取基于位置的推送通知?

您如何向从应用程序本身订阅主题的用户发送 Firebase 推送通知

iOS - 如何在 iOS 应用上跟踪用户对推送通知的选择?

Android firebase:仅向付费用户发送推送通知