FirebaseInstanceId.getInstance()返回null

时间:2018-10-03 13:05:07

标签: android firebase firebase-cloud-messaging

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

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'
复制级build.gradle中的

类路径是

dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath 'com.google.gms:google-services:4.0.1'
    }

我的清单就是这样

<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" />

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

即使onNewToken中的MyFirebaseMessagingService也未在应用中触发过。

有人可以告诉我为什么在这里得到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();

            }
        });
    }

4 个答案:

答案 0 :(得分:1)

尝试替换您的Android Manifest应用程序标签 具有以下属性

  

android:allowBackup =“ false”   工具:节点=“合并”   工具:replace =“ android:label,android:allowBackup”

答案 1 :(得分:0)

在UI线程上有FirebaseInstanceId.getInstance();应该不是问题。我在MainActivity的onCreate方法中具有以下内容,并且它运行完美(可能不被google等推荐):

FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(instance_id_completion_listener);

尝试以下步骤:

  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();

        }
    });
}

仅出于测试目的,因为这不是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();

        }
    });
}

答案 2 :(得分:0)

对我来说AndroidManifest.xml

中缺少声明
<application ... >

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

添加后,问题已解决。

答案 3 :(得分:0)

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

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

通过此链接

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