android - 我没有收到 FCM 消息,可能 FirebaseMessagingService 没有运行
问题描述
我正在使用 FCM 进行通知。由于某些问题,我在使用 FCM 云控制台发送时没有收到通知。
<service android:name=".MyInstanceIDService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".MyMessagingService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
这是我的两门课。
public class MyInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyInstanceIDService";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
System.out.println("Refreshed token: " + refreshedToken);
// Util.getInstance().saveDeviceID(UniversalImageLoaderConfigurationApplication.getContext(), refreshedToken);
// sendRegistrationToServer(refreshedToken);
}
}
public class MyMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyMessagingService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//Displaying data in log
//It is optional
// if(LOG)
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
Map<String, String> data = remoteMessage.getData();
int id = Integer.parseInt(data.get("id"));
if (id == (Constants.NOTI_NOTIFCATION)) {
String title = data.get("title");
String body = data.get("body");
sendNotification(id, title, body, "");
} else {
sendNotification(1, "", "", "");
}
}
}
我注意到public void onTokenRefresh()从未调用过。所以我用了它
字符串 refreshedToken = FirebaseInstanceId.getInstance().getToken();
在我的 MainActivity 中,我得到了 tokenID。可能 FirebaseInstanceIdService 和 FirebaseMessagingService 没有运行。下面是我的毕业典礼
implementation 'com.google.firebase:firebase-messaging:17.0.0'
implementation 'com.google.firebase:firebase-core:16.0.1'
我也用过
apply plugin: 'com.google.gms.google-services'
这是我的根级 gradle
buildscript {
repositories {
// google()
maven { url "https://maven.google.com" }
jcenter()
// mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:4.0.1' // google-services plugin
}
}
allprojects {
repositories {
// google()
mavenLocal()
maven { url "https://maven.google.com" }
jcenter()
mavenCentral()
google()
}
}
解决方案
对于您的服务声明,这些操作是相反的。改成这样:
<service android:name=".MyInstanceIDService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service android:name=".MyMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
请参阅文档中的示例。
推荐阅读
- matlab - MATLAB 未正确发送 HTTP POST 请求
- python - 如何从字典中的键和值中删除非字母数字字符,然后将其写入文本文件?
- d3.js - 带有数据绑定的 d3.js 前端
- c# - 运行所选代码生成器时出错数据库提供程序尝试注册“IRelationTypeMappingSource”的实现
- web-component - 为什么使用的时候需要用到cloneNode with Shadow Dom
I've been looking around the mdn documents about web component,I followed the link and i arrived to documents about template below the link is what i was looking.
According to the d
- javascript - 将容器内的 div 从边缘移动到边缘
- arrays - Ruby on Rails:将哈希数组中的值与数组数组组合(或附加?)
- apollo - Apollo 文件上传 & React Apollo 上传客户端,零字节文件
- if-statement - 'If' 和 'Else' 都在我的 Windows 批处理文件中执行
- javascript - Javascript document.controller.setValue getValue(this)