为什么用于接收 Firebase 推送通知的服务中 android:exported 为 false?

Che*_*eng 10 android firebase-cloud-messaging

基于https://developer.android.com/guide/topics/manifest/service-element

\n

关于意义android:exported

\n
\n

其他应用程序的组件是否可以调用该服务\xe2\x80\x94 或与其交互\xe2\x80\x94 如果可以,则为“true”,如果不能,则为“false”。当值为“false”时,只有同一应用程序的组件或具有相同用户 ID 的应用程序才能启动服务或绑定到该服务。

\n
\n

当我查看代码时https://firebase.google.com/docs/cloud-messaging/android/client

\n
<service\n    android:name=".java.MyFirebaseMessagingService"\n    android:exported="false">\n    <intent-filter>\n        <action android:name="com.google.firebase.MESSAGING_EVENT" />\n    </intent-filter>\n</service>\n
Run Code Online (Sandbox Code Playgroud)\n

我认为当我们收到推送通知时,是外部 Android 系统(被视为“其他应用程序”)调用我们的应用程序代码。如果是这样,为什么android:exported上述情况是错误的?

\n

如果它是调用我们的应用程序代码的外部应用程序,这不是应该是真的吗?

\n

谢谢。

\n

小智 9

如果你去查看firebase-message的Android Manifest,你可以发现FirebaseInstanceIdReceiver它是实际Service用来接收消息的。

在此输入图像描述

另请查看此 PR https://github.com/firebase/quickstart-android/pull/850

将 FirebaseMessagingServices 设置为导出=“false”以明确阻止其他应用程序向其发送消息。