我正在将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();
}
});
}
答案 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);
尝试以下步骤:
将implementation 'com.google.firebase:firebase-core:16.0.1'
添加到应用程序build.gradle文件中。
删除但备份所有与Firebase相关的清单条目。我的清单文件中没有任何内容,但是我仅使用Firebase来获取实例ID。
如果尚未这样做,请转到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"
通过此链接