我们开发了一个Android聊天应用程序,该应用程序已成功在大多数Android设备上接收FCM推送通知。但是,我们发现在某些设备上,例如{OPPO,VIVO,Xiomi,Asus}。发送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>
Project Level Gradle文件:
dependencies {
...
classpath 'com.google.gms:google-services:4.0.1'
...
}
Firebase Job Scheduler服务:
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问题吗?
也许值得一提的是,我们的研究也使我们得出以下结论:某些流行的应用程序默认被列入白名单。当然这对我们没有帮助, 但可以帮助解释为什么其他流行的应用程序不需要此类措施。
我们将非常感谢您的协助。谢谢。