设置和管理消息优先级

Android 中的下行消息传递优先级有两种:普通优先级和高优先级。普通优先级和高优先级的消息传递方式如下:

  • 普通优先级。这是数据消息的默认优先级。当设备未休眠时,普通优先级消息会被立即传递。当设备处于低电耗模式时,此类消息可能会被延迟传递以节省电量,直到设备退出低电耗模式。如果是对时间不太敏感的消息(例如新电子邮件通知、使界面保持同步或在后台同步应用数据),建议您选择普通传递优先级。

    如果在 Android 上收到请求同步应用的后台数据的普通优先级消息,则您可以使用 WorkManager 安排一项任务,以便在网络可用时处理该请求。

  • 高优先级。FCM 会立即尝试传递高优先级消息,允许 FCM 在必要时唤醒休眠设备并运行一些有限的处理(包括非常有限的网络访问)。高优先级消息通常应该会导致用户与您的应用或其通知进行互动。

Android 设备上的消息处理和优先级降低

Android 设备上的高优先级消息适用于对时间敏感的用户可见内容,因此应该会生成面向用户的通知。如果 FCM 检测到一种模式,在这种模式下,消息不会生成面向用户的通知,那么系统可能会将您的消息优先级降低为普通优先级,或委托 Google Play 服务进行处理。

FCM 在确定是否降低消息优先级或代理消息时,会使用 7 天的消息行为;它会针对您应用的每个实例单独做出这一决定。如果在响应高优先级消息时,以对用户可见的方式显示通知,那么今后的高优先级消息不会受到影响。

使用 Google Play 服务进行通知委托

符合特定标准的高优先级通知消息(而非数据消息)由 Google Play 服务代理,而不是降低优先级。这意味着,Google Play 服务会代表应用显示通知,而无需启动应用。这样做是为了在 Android 设备上提供更好的整体用户体验。

请注意,在与收到的消息相关的分析报告方式方面,代理通知消息引入了一些变化:

  • 为了报告针对代理通知的分析,您的应用必须使用 FCM SDK 24.0.0 或更高版本。
  • 您可能会发现,与引入代理通知之前相比,收到的消息出现延迟或数量下降。这是因为,只有在应用启动后才会报告针对代理通知的分析,如果通知未导致应用打开,则可能根本不会报告这类分析。

以这种方式代理通知消息是使用 Android Q+ 以及 Google Play 服务 19054000 或更高版本的应用的默认行为。通过 HTTP v1 API 发送的消息会进行代理,但通过 Firebase 控制台或旧版 API 发送的消息不会进行代理。请注意,此功能目前处于 Beta 版阶段,随时可能发生变化。

虽然我们强烈建议您使委托保持启用状态,因为它对设备电池和内存有好处,但您可以通过以下任一方式停用此行为:

  • 基于应用级:在应用清单中,添加指令 <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
  • 基于应用实例:对于应用实例,请根据具体应用场景在界面流程中为应用设置 fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
  • 基于消息:对于发送请求,在 AndroidNotification 对象中将 proxy 键设置为 DENY

衡量 Android 设备上的消息优先级降低情况

  • 个别消息。在传递时,您可以将通过 getPriority() 获得的传递优先级与通过 getOriginalPriority() 获得的原始优先级进行比较,来确定是否降低个别消息的优先级。

  • 所有消息。FCM Aggregate Delivery Data API 可以报告您发送给 Android 的所有消息中,有多少百分比的消息被降低优先级。有些消息可能会从汇总数据报告中省略,但总体上,您应该可以通过这些报告从全局角度了解优先级降低率。如需了解详情以及获取用于查询 API 的示例代码,请参阅我们的汇总传送数据一文。您也可以通过 API Explorer 进行探索。

  • 代理通知。代理通知不会计入当前的 FCM 或 GA 传送指标,因此通知传送指标可能会下降高达 15%。如需针对代理消息进行报告,请使用 FCM Aggregate Delivery Data APIProxyNotificationInsightPercents 会报告成功代理的通知所占的百分比,以及无法成功代理的消息的详细信息。

问题排查

  • 确保应用实例启用了通知。如果用户已为您的应用停用通知权限,系统将无法发布任何通知,因此会降低您的消息的优先级。您应验证通知是否已启用,然后再向应用实例发送高优先级消息。

  • 发布通知之前,请勿拨打住宅电话号码。由于一小部分 Android 移动用户使用的是高延迟网络,因此请避免在显示通知之前打开与服务器的连接。在允许的处理时间结束之前回调服务器可能会让使用高延迟网络的用户面临风险。 请在 FCM 消息中包含通知内容并立即显示。如果您需要同步 Android 上的其他应用内内容,可以使用 WorkManager 安排一项任务,在后台进行同步。