android - Firebase 云消息传递:未找到特定制造商的 ServiceIntent
问题描述
我们开发了一款 Android 聊天应用,已成功在大多数 Android 设备上接收 FCM 推送通知。但是,我们发现在某些设备上,例如 {OPPO、VIVO、小米、华硕}。发送 FCM 消息时,我们无法启动我们的服务。
我们搜索了日志,发现:
2019-03-14 16:23:50.191 29074-29074/com.ourapp E/FirebaseInstanceId:传递消息时出错:找不到 ServiceIntent。
我们的项目结构如下:
显现:
<service
android:name=".services.FirebaseScheduledJobService"
android:exported="false">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE" />
</intent-filter>
</service>
项目级 Gradle 文件:
dependencies {
...
classpath 'com.google.gms:google-services:4.0.1'
...
}
Firebase 作业调度程序服务:
public class FirebaseScheduledJobService extends JobService {
@Override
public boolean onStartJob(JobParameters job) {
new Thread(() -> {
if (job.getExtras() != null)
sendDeliveryReceipt(job.getExtras());
jobFinished(job, false);
}).start();
return true;
}
@Override
public boolean onStopJob(JobParameters job) {
return false;
}
private void sendDeliveryReceipt(Bundle bundle) {
String currentUserJid = SharedPreferenceManager.instance.getUserJidFromPreference();
...
}
}
}
我们研究了这个问题,发现我们需要为这些制造商手动启用自动启动,并让用户关闭我们应用的电池优化。但是,我们认为这种解决方案对于普通用户来说技术性太强,因为他们基本上不知道这些设置。
为了提供帮助,我们添加了特定于设备的代码,以帮助用户导航到其设备上的自动启动设置页面。我们还添加了代码来帮助这些用户打开他们的电池优化设置。
对于这些特定的制造商,还有其他方法可以解决这个 FCM 问题吗?
值得注意的是,我们的研究还使我们得出结论,某些流行的应用程序默认被列入白名单。当然这对我们没有帮助,但可能有助于解释为什么其他流行的应用程序不需要这些措施。
我们将不胜感激。谢谢你。
解决方案
推荐阅读
- ios - 将像素数据写入texture2d的某个mipmap级别
- java - 如何在 Java 中表示 wav 文件?
- css - HTML CSS 试图使固定侧导航栏响应
- docker - tensorflow:2.0.0- docker 容器无法访问 GPU
- python-3.x - OpenCV 视频编写器无法找到编解码器或“avc1”
- python - 从python中的文本中仅删除特定的变音符号
- mysql - MySQL NodeJS .then() 不是函数
- json - 空手道 - 使用仅包含 JSON 验证架构中的布尔值
- php - PHP:如何正确地制作这个“包装器”方法?
- sql - 如何识别指定值的日期范围/间隔?