Firebase 中的 FCM 令牌是什么?

新手上路,请多包涵

在新的 Firebase 中,在 Notification 下,他们提到开发人员可以向特定设备发送通知。为此,在控制台中它要求提供 FCM 令牌。它到底是什么,我怎样才能得到那个令牌?

原文由 arunrk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

究竟是什么?

一个 FCM 令牌,或者通常称为 registrationToken 就像在 google-cloud-messaging 中一样。如GCM FCM 文档 中所述:

GCM 连接服务器向客户端应用程序发出的 ID,允许其接收消息。请注意,注册令牌必须保密。


我怎样才能得到那个令牌?

更新:仍然可以通过调用 getToken() 来检索令牌,但是,根据 FCM 的最新版本, FirebaseInstanceIdService.onTokenRefresh() 已替换为 FirebaseMessagingService.onNewToken() 体验 功能与 onTokenRefresh() 相同


老答案:

根据 FCM 文档

在您的应用程序首次启动时,FCM SDK 会为客户端应用程序实例生成一个注册令牌。如果您想定位单个设备或创建设备组,则需要访问此令牌。

您可以通过扩展 FirebaseInstanceIdService 来访问令牌的值。确保您已将服务添加到清单中,然后在 onTokenRefresh 的上下文中调用 getToken,并记录如下所示的值:

 @Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // TODO: Implement this method to send any registration to your app's servers.
    sendRegistrationToServer(refreshedToken);
}

每当生成新令牌时都会触发 onTokenRefreshcallback,因此在其上下文中调用 getToken 可确保您访问的是当前可用的注册令牌。如果尚未生成令牌,FirebaseInstanceID.getToken() 将返回 null。

获取令牌后,您可以将其发送到您的应用服务器并使用您喜欢的方法进行存储。有关 API 的完整详细信息,请参阅实例 ID API 参考。

原文由 AL. 发布,翻译遵循 CC BY-SA 4.0 许可协议

他们在以下发行说明中弃用了 getToken() 方法。相反,我们必须使用 getInstanceId。

https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId

 Task<InstanceIdResult> task = FirebaseInstanceId.getInstance().getInstanceId();
task.addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
      @Override
      public void onSuccess(InstanceIdResult authResult) {
          // Task completed successfully
          // ...
          String fcmToken = authResult.getToken();
      }
});

task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
    // Task failed with an exception
    // ...
}
});

要在同一个侦听器中处理成功和失败,请附加一个 OnCompleteListener:

 task.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
    if (task.isSuccessful()) {
        // Task completed successfully
        InstanceIdResult authResult = task.getResult();
        String fcmToken = authResult.getToken();
    } else {
        // Task failed with an exception
        Exception exception = task.getException();
    }
}
});

此外,不推荐使用 FirebaseInstanceIdService 类,他们在 FireBaseMessagingService 中提出了 onNewToken 方法来替代 onTokenRefresh,

你可以参考这里的发行说明, https://firebase.google.com/support/release-notes/android

 @Override
public void onNewToken(String s) {
    super.onNewToken(s);
    Use this code logic to send the info to your server.
    //sendRegistrationToServer(s);
}

原文由 Manoj Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题