【问题标题】:Can firebase messaging services can be android:exported="false"?firebase 消息服务可以是 android:exported="false" 吗?
【发布时间】:2022-04-22 21:46:28
【问题描述】:

想确认一下是否可以设置android:exported="false",例如id服务和消息服务。

我通过保持android:exported="false" 进行了测试,并且通知工作正常。

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service
    android:name=".MyFirebaseInstanceIDService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

    firebase-messaging 库以低优先级 (-500) 导出它自己的非专用 FirebaseMessagingService。您可以在合并的 AndroidManifest.xml 中看到它。该服务可以处理带有通知的推送消息,例如您可以通过 Firebase 控制台发送的消息。

    如果您的专业服务类未导出,则系统会将消息从 Google 服务包路由到此非专业服务,并且通知将正常工作。

    但这意味着您将无法在接收消息或处理自定义数据负载时执行其他操作。

    【讨论】:

    • 值得一提的是,对于任何至少有一个intent-filter 的服务,其exported 值将默认为trueSource.
    • 我不太明白你的最后一句话 - you wouldn't be able to, for example, perform other actions when receiving a message or process custom data payloads. 如果我只想让我的应用程序接收消息和处理数据负载,可以将导出属性设置为 false 吗?
    • 最后一条语句——它源于 Android 将 firebase 消息传递给 firebase 库的服务而不是你的服务。如果您要在MyFirebaseMessagingService 中编写代码来处理数据负载,它永远不会运行。这就是为什么答案应该是否定的,将 export 属性设置为 false 是不行的。
    【解决方案2】:

    您应该导出服务以确保它由@guest 指定的类处理

    <service 
        android:name=".services.MyFirebaseMessagingService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      相关资源
      最近更新 更多