FirebaseInstanceId.getInstance() 返回 null

Nav*_*pta 6 android firebase firebase-cloud-messaging

我正在 android 中集成 Firebase Cloud 消息传递

app build.gradle 看起来像这样

implementation 'com.google.firebase:firebase-auth:16.0.3'
implementation 'com.google.firebase:firebase-messaging:17.3.3'
implementation 'com.google.android.gms:play-services-auth:16.0.0'


apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

应用级别 build.gradle 中的类路径是

dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath 'com.google.gms:google-services:4.0.1'
    }
Run Code Online (Sandbox Code Playgroud)

我的清单就是这样的

<service android:name=".firebase.MyFirebaseMessagingService">
       <intent-filter>
          <action android:name="com.google.firebase.MESSAGING_EVENT" />
       </intent-filter>
  </service>
       <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_artize_a" />

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />
Run Code Online (Sandbox Code Playgroud)

我的问题是当我尝试获取FirebaseInstanceId.getInstance()它时返回 null。所以我无法获得令牌。

即使在应用程序onNewTokenMyFirebaseMessagingService也不会被触发一次。

有人可以告诉我为什么我要FirebaseInstanceId.getInstance() null到这里提前谢谢。

在这里,我正在尝试获取 firebase 令牌

private void getFirebaseToken(){
        FirebaseInstanceId firebaseInstanceId = FirebaseInstanceId.getInstance();
        if(firebaseInstanceId == null){
            return;
        }


        firebaseInstanceId.getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

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

cre*_*der 5

经过长时间的研究,我发现tools:node="replace"清单文件中的 FCM 无法正常工作。

更改tools:node="replace"tools:node="merge"

通过这个链接

https://github.com/firebase/quickstart-android/issues/477


小智 0

在 UI 线程上FirebaseInstanceId.getInstance();应该不是问题。我在 MainActivity 的 onCreate 方法中有以下内容,它工作得很好(谷歌和其他人可能不推荐):

FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(instance_id_completion_listener);
Run Code Online (Sandbox Code Playgroud)

请尝试以下步骤:

  1. 添加implementation 'com.google.firebase:firebase-core:16.0.1'到应用程序 build.gradle 文件。

  2. 删除但备份与 Firebase 相关的所有清单条目。我的清单文件中没有任何内容,但我仅使用 Firebase 来获取实例 ID。

  3. 如果尚未这样做,请先转至https://firebase.google.com/docs/android/setup并将 Firebase 添加到您的 Android 项目。

人们还可以尝试以下方法:

private void getFirebaseToken(){

    FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
        @Override
        public void onComplete(@NonNull Task<InstanceIdResult> task) {
            if (!task.isSuccessful()) {
                return;
            }

            Log.d("getFirebaseToken", "Successful");

            // Get new Instance ID token
            String token = task.getResult().getToken();

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

仅出于测试目的,因为这在 UI 线程上不是一个好主意,请尝试以下操作:

private void getFirebaseToken(){
    FirebaseInstanceId firebaseInstanceId = FirebaseInstanceId.getInstance();

    try
    {
        Thread.sleep(2000);
    } 
    catch (InterruptedException e)
    {
        e.printStackTrace();
    }

    if(firebaseInstanceId == null){
        return;
    }


    firebaseInstanceId.getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
        @Override
        public void onComplete(@NonNull Task<InstanceIdResult> task) {
            if (!task.isSuccessful()) {
                return;
            }

            // Get new Instance ID token
            String token = task.getResult().getToken();

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


归档时间:

查看次数:

4234 次

最近记录:

6 年,10 月 前