当前位置: 首页 > 知识库问答 >
问题:

Firebase中的FCM令牌是什么?

慕乐语
2023-03-14

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

共有3个答案

李睿
2023-03-14

他们在下面的发行说明中弃用了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();
    }
}
});

此外,FirebaseInstancedService类已被弃用,他们在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);
}
邵正雅
2023-03-14

下面是添加此渐变的简单步骤:

dependencies {
  compile "com.google.firebase:firebase-messaging:9.0.0"
}

在清单(如GCM)中不需要额外的权限。不需要接收者像GCM那样显化。使用FCM,com.google.Androidgms。gcm。自动添加GcmReceiver。

迁移侦听器服务

现在仅当您想访问FCM令牌时,才需要扩展InstanceIDListenerService的服务。

这是需要的如果你想

  • 管理设备令牌以直接向单个设备发送消息,或向设备组发送消息,或
  • 向设备组发送消息,或
  • 使用服务器订阅管理API为设备订阅主题。

在清单中添加服务

<service
    android:name=".MyInstanceIDListenerService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

<service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

更改MyInstanceIDListenerService以扩展FirebaseInstanceIdService,并更新代码以侦听令牌更新,并在生成新令牌时获取令牌。

public class MyInstanceIDListenerService extends FirebaseInstanceIdService {

  ...

  /**
   * Called if InstanceID token is updated. This may occur if the security of
   * the previous token had been compromised. Note that this is also called
   * when the InstanceID token is initially generated, so this is where
   * you retrieve the token.
   */
  // [START refresh_token]
  @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);
  }

}

有关更多信息,请访问

  1. 如何将以前的GCM项目导入Firebase
  2. 如何强制令牌刷新
  3. 如何访问令牌
  4. 如何建立firebase

秦学林
2023-03-14

它到底是什么?

FCM令牌,或通常称为注册令牌,类似于谷歌云消息传递。如GCM文件所述:

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

我怎么才能拿到那个令牌?

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

旧答案:

根据FCM文件:

在应用程序初始启动时,FCM SDK为客户端应用程序实例生成注册令牌。如果您想针对单个设备或创建设备组,则需要访问此令牌。

您可以通过扩展FirebaseInstancedService来访问令牌的值。确保已将服务添加到清单中,然后在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参考。

 类似资料:
  • 这是我第一次使用FCM。 我从Firebase/QuickStart-Android下载了一个示例,并安装了FCM QuickStart。但我无法从日志中获得任何令牌,甚至在应用程序中点击日志令牌按钮。 然后我尝试用Firebase控制台发送消息,并设置为目标我的应用程序包名称。我收到短信了。 完成以上操作后,您将在logcat中获得令牌。但最后,我找到了一个方便的方法来获取它,只需使用debug

  • 这是我送的东西。

  • 我使用了以下依赖项。它告诉我“默认的FirebaseApp在这个过程中没有初始化。请确保首先调用FirebaseApp.InitializeApp(Context)。”

  • 我的AndroidManifest文件: 谢谢你的帮助

  • 问题内容: 从www.JavaPractices.com复制的此代码中的令牌是什么意思?当我用更通用的泛型类型替换它时,它无法编译。(错误:T无法解析为类型。)为什么? 编辑:当然,当我们使用类似的通用类型标记时,它必须出现在类声明中。这里也没有,也没有在类的声明,但它仍然可以编译和运行正常。 问题答案: 它无法编译,因为您的类不是通用的(也不是您的任何方法)。在此特定示例中,小丑(?)表示Sch

  • FCM专家请帮助我,我必须使用FCM为android集成通知,我正在尝试Firebase提供的演示,我尝试了许多逻辑,但它为一些设备提供了第一个令牌:我使用了三个设备,Moto E(第二代)(android版本5.1.1),Samsung GT-S7562(A.V 4.1.2)和Karbon Titanium (A.V 4.2.2),我只收到了Karbon Titanium的令牌,不知道为什么我没