我将使用 firebase-messaging 库并尝试在app启动时使用以下方法获取令牌 .

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener() {
           @Override
           public void onSuccess(InstanceIdResult instanceIdResult) {
               String token = instanceIdResult.getToken();
               // print token
           }
       });

应用程序在发布本身崩溃时崩溃

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.iid.FirebaseInstanceId.getInstanceId()' on a null object reference

AndroidManifest

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

Build.gradle:

implementation 'com.google.android.gms:play-services-analytics:16.0.5'
implementation 'com.google.firebase:firebase-messaging:17.3.4'

此外,我试图在SharedPreferences中缓存令牌,但似乎永远不会调用onNewToken() .

@Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preference.edit();
        editor.putString("TOKEN",token);
        editor.apply();
    }

可能是什么问题呢?