首页 > 解决方案 > 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 问题吗?

值得注意的是,我们的研究还使我们得出结论,某些流行的应用程序默认被列入白名单。当然这对我们没有帮助,但可能有助于解释为什么其他流行的应用程序不需要这些措施。

我们将不胜感激。谢谢你。

标签: androidpush-notificationfirebase-cloud-messaging

解决方案


推荐阅读