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。所以我无法获得令牌。
即使在应用程序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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
经过长时间的研究,我发现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)
请尝试以下步骤:
添加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();
}
});
}
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 次 |
| 最近记录: |