FirebaseInstanceId.getInstance() returns null



我正在将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'

apllication level 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。 所以我无法获得令牌。

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

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

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

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

经过长时间的研究,我发现清单文件中tools:node="replace"使 FCM 不起作用。

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

通过此链接

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

尝试替换您的 Android 清单应用程序标记 具有以下属性

android:allowBackup="false" 工具:节点="合并" tools:replace="android:label,android:allowBackup">

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

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

对我来说,AndroidManifest.xml中缺少一个声明

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

添加后,问题已解决。

相关内容

  • 没有找到相关文章

最新更新