不调用onNewToken()

Adi*_*rel 8 android push-notification firebase

在过去的几天里,我试图使FCM在我的应用程序中正常工作,并且我发现一般不赞成onTokenRefreshed()函数和FirebaseInstanceIdService。因此,我在网上关注了一些Firebase文档和教程,但似乎没有一个对我有用。我的MyFirebaseMessagingService类是:

package com.example.android.aln4.Classes;

import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyFirebaseMessaging";

    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        Log.d(TAG,"Refreshed token: "+token);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的清单包含以下代码:

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

另外,我与Firebae有关的所有实现都是最新的,如下所示:

  //Firebase
    implementation 'com.google.firebase:firebase-crash:16.2.1'
    implementation 'com.firebase:firebase-client-android:2.5.2'
    implementation 'com.google.firebase:firebase-core:16.0.6'
    implementation 'com.google.firebase:firebase-database:16.0.6'
    implementation 'com.firebase:firebase-client-android:2.5.2'
    implementation 'com.firebaseui:firebase-ui-database:2.1.1'
    implementation 'com.google.firebase:firebase-storage:16.0.5'
    implementation 'com.google.firebase:firebase-firestore:18.0.0'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
Run Code Online (Sandbox Code Playgroud)

我的问题通常是,无论何时运行应用程序,无论是在卸载和安装之后还是正常运行时,都不会调用onNewToken()函数,或者至少在Logcat中看不到它。任何形式的帮助都可以申请:)

Hel*_*ane 19

onNewToken方法只是在生成令牌时调用,您应该在活动中检索令牌。

将此添加到您的活动中:

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


ism*_*oui 6

2020 年 12 月更新:使用新的 Firebase SDK (21.0.0),您可以FirebaseInstallations.getInstance()在您的范围内获取令牌:

FirebaseInstallations.getInstance().getToken(false).addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
          @Override
          public void onComplete(@NonNull Task<InstallationTokenResult> task) {
              if(!task.isSuccessful()){
                  return;
              }
              // Get new Instance ID token
              String token = task.getResult().getToken();

          }
      });
Run Code Online (Sandbox Code Playgroud)