根据设置指南here,在示例应用程序中,A)我创建了一个extends
firebase服务类的类。 B)我将这些类放在AndroidManifest.xml
A)Java类
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//a) What's the life cycle of the service? How can I ensure this method is getting called?
//b) If the service is killed at some point, will system restart it on receiving new messages?
Log.d(TAG, "From: " + remoteMessage.getFrom());
}
}
B)AndroidManifest.xml
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
然后,该应用可以接收来自FCM的通知!
这是我的问题:
是谁启动了FirebaseMessagingService通知服务? 必须有一些地方调用startService(),不是吗?
我的理解是,无论我的应用状态如何,下游通知都会传送到我的移动设备的Google Play服务。
那么,当onMessageReceive()
或app
为service
时,我能在多大程度上确保调用swipe closed/killed/force stop
?相关行为是否记录在任何地方?
编辑:
data message
。 (与notification message
相比。)
我的客户端应用收到FCM消息并显示默认通知,因为Google Play服务正在运行并将其发送到系统托盘。但我的onMessageReceive()
未被调用,因为MyFirebaseMessagingService
被系统杀死而未重新启动。可能吗? 答案 0 :(得分:11)
1。谁启动了FirebaseMessagingService通知服务?必须有一些地方调用startService(),不是吗?
SDK会自动为您执行此操作。
2。我的理解是,无论我的应用状态如何,下游通知都会传送到我的移动设备的Google Play服务。那么,当
onMessageReceive()
或app
为service
时,我能在多大程度上确保调用swipe closed/killed/force stop
?相关行为是否记录在任何地方?
Receiving Message for Android is here的官方文档。它讨论了消息的行为(取决于您使用的消息有效负载的类型(即notification
或data
)),以确定您的应用在前台和后台的时间。
为了能够自己处理邮件(在onMessageReceived()
中),您必须发送data
- 仅邮件有效负载。
关于刷卡关闭/杀死/强制停止的主题,这个主题已经讨论了很长一段时间,似乎并不是一个明确的答案。在我的一次测试中,如果我滑动关闭<,我能够仍然收到消息(使用data
- 仅消息有效负载进行测试) / em>我的应用。但是当我从“设置”菜单强制关闭时,我无法接收任何消息。请注意, 不 始终是行为。
有些设备是在滑动关闭应用时设计的,它与强制停止它们相同(请参阅我的回答here )。
还有一些设备,即使应用仍然只是刷掉,即使它不是强制关闭,设备本身也会阻止它从接收消息。其他人则认为情况并非如此,因为像WhatsApp这样的应用程序能够做到这一点。到目前为止,我之所以学到这一点,是因为设备制造商已将列入白名单大多数知名应用程序都可以实现。
所以只是回答你的问题,不。这在任何地方都没有记录,因为(IMO)这个主题也取决于设备,FCM没有总控制。
3。我更关注以下案例。我们来谈谈数据信息。 (与通知消息相比。)我的客户端应用程序收到FCM消息并显示默认通知,因为Google Play服务正在运行并将其发送到系统托盘。但是我的onMessageReceive()没有被调用,因为MyFirebaseMessagingService被系统杀死而没有重新启动。有可能吗?
AFAIK,FirebaseMessagingService与Google Play服务绑定,只要Google Play服务处于有效状态,Firebase服务也是如此。我answer here的一部分:
但是,我已经看到之前曾提到的
FirebaseMessagingService
(请参阅此post,@ ArthurThompson的评论):这些服务将由Google Play服务启动,该服务始终在设备上运行。您不必也不应该自己开始/停止这些服务。