现在使用的是不推荐使用FirebaseInstanceId.getInstance().getToken()

Bha*_*tta 65 android push-notification firebase firebase-cloud-messaging

我想知道在不推荐使用getToken()的情况下,获取Firebase令牌以发送推送通知的正确方法是什么.

Fac*_*ndo 110

正如文件所说:

此方法已弃用.赞成getInstanceId().

getInstanceId()将返回一个带有InstanceIdResult的Task.像这样:

 FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( new OnSuccessListener<InstanceIdResult>() {                    
                @Override
                public void onSuccess(InstanceIdResult instanceIdResult) {
                      String deviceToken = instanceIdResult.getToken();
                      // Do whatever you want with your token now
                      // i.e. store it on SharedPreferences or DB
                      // or directly send it to server 
                }
});
Run Code Online (Sandbox Code Playgroud)

更新:虽然这种方法确实取代了FirebaseInstanceId.getInstanceId().getToken()的使用,但它并没有解决FirebaseInstanceIdService也被弃用的事实,而是留下了另一个问题:在哪里使用它?它可以在任何活动上下文中使用,它将始终返回令牌.但是,如果我们只想在创建时获取令牌并且很少更新它,该怎么办?为此,您应该从旧的FirebaseMessagingService实现覆盖新方法onNewToken :(是,"消息",而不是"InstanceId")

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    String deviceToken = s;
    // Do whatever you want with your token now
    // i.e. store it on SharedPreferences or DB
    // or directly send it to server 
}
Run Code Online (Sandbox Code Playgroud)

这种方式代码将保持更精简,甚至不需要使用第一种方法.

  • 当您在回调之外需要令牌时,这不是解决方案。这不起作用。 (3认同)
  • @PedroPauloAmorim我同意。newToken似乎没有被100%调用,因此需要另一种方法来检索现有令牌 (2认同)
  • FirebaseInstallations.getInstance().getToken(true) 不提供消息令牌,每次启动后都会更改 (2认同)

KUS*_*B K 27

FirebaseInstanceIdService已弃用.

只是覆盖 onNewToken()FirebaseMessagingService

public class LatestFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onNewToken(String mToken) {
    super.onNewToken(mToken);
    Log.e("TOKEN",mToken);
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
}} 
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

<service
        android:name=".LatestFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

getToken() 这也被弃用了.

如果您需要在活动中获取令牌,请使用以下代码.

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
     @Override
     public void onSuccess(InstanceIdResult instanceIdResult) {
           String mToken = instanceIdResult.getToken();
           Log.e("Token",mToken);
     }
 });
Run Code Online (Sandbox Code Playgroud)

  • 现在 FirebaseInstanceId 已被弃用,是的 (5认同)
  • FirebaseMessaging.getInstance().getToken() 是新方式......来源:https://firebase.google.com/docs/cloud-messaging/android/client#retrieve-the-current-registration-token (4认同)