当应用程序在BG中或在Android客户端上被杀死时,如何使FCM通知显示为横幅?

问题描述 投票:0回答:1

这不是调试问题。

我将从最重要的问题开始:

当 Android 应用程序处于后台或终止时,FCM 消息需要什么确切的配置参数才能显示横幅?

在我的研究中,我得出的结论是答案在于:

  • A) FCM 消息 JSON 定义(见下文),
  • B) Flutter 代码 (即 FCM.instance.makeAndroidShowBannerInBackground(true),或
  • C) 自定义原生 Android 配置,例如创建自定义消息 频道。

在使用 Firebase 云消息传递 (FCM) 的 Flutter+Firebase 应用程序中,我有一个云函数,它按以下方式定义消息(“正常”Javascript,v1 函数):

const multicastMessage = {
      tokens: tokens, // Array of tokens
      notification: {
        title: `Alert from ${userName}`,
        body: notificationBody, 
      },
      android: {
        priority: "high", // High priority for Android notifications
        ttl: 60, // TTL of 60 seconds (~1 minute)
        notification: {
          sound: "custom_notification_sound_alert",
        },
      },
      apns: {
        headers: {
          "apns-priority": "10", // High priority for APNs
          // Expires in 60 seconds
          "apns-expiration": `${Math.floor(Date.now() / 1000) + 60}`,
        },
        payload: {
          aps: {
            "alert": {
              title: `Alert from ${userName}`,
              body: notificationBody,
            },
            "sound": "CustomNotificationSoundAlert.wav",
          },
        },
      },
    };

如前所述,这不是一个调试问题,如果您了解消息已传递到 Android 和 IOS 客户端并且似乎在所有方面都有效,则不需要“更多代码”,除了一件事 -在 Android 上,当应用程序处于后台或被终止时,通知会以小图标的形式发送到系统托盘 - 它不会显示为位于其他所有内容之上的横幅。

我尝试过的事情:

一般谷歌搜索会产生这个github问题...但它已经很旧了,我不相信它仍然适用。

Firebase FCM 文档...虽然有许多相关主题,但文档似乎没有直接/准确地承认这一点(Android 在后台/杀死时显示横幅与不显示横幅以及原因)作为潜在问题。 虽然我已经阅读了很多内容,但我还没有阅读所有文档,部分原因是我不确定答案在哪一部分——Android、Flutter、“服务器”……而 FCM 很复杂并且在我的脑海中,概念已经很容易混淆了。

我不想相信答案在于 (C)——自定义 Android 代码配置(例如定义自定义消息通道),因为我认为 FCM 的重点是成为一个包装器......如果这是真的那么为什么 JSON 中有 Android 优先级键?

也许这只是一些愚蠢的事情,比如“优先级:“高””中的高需要大写?

android flutter firebase firebase-cloud-messaging firebase-admin
1个回答
0
投票

虽然 FCM 消息本身并不直接控制 Android 上的通知行为,但选择 (B) 和 (C) 选项是正确的:

(B) Flutter 代码:您需要在 Flutter 代码中使用 FCM.instance.makeAndroidShowBannerInBackground(true) 才能在应用程序处于后台时启用横幅。

(C) 自定义消息通道(推荐):这是更强大的解决方案。 使用 IMPORTANCE_HIGH 设置创建自定义消息通道可以对通知的显示方式进行细粒度控制,即使应用程序处于后台或终止状态也是如此。

这就是为什么 (C) 可能更可取:

更多控制:通道为通知外观和行为提供了更好的自定义。 面向未来:这种方法符合最新的 Android 通知实践。 https://cafelam.com/elizabeth-fraley-leads-kinderready-to-unleash-real-time-tracking-analytics-to-enhance-childrens-development-and-parental-engagement/

© www.soinside.com 2019 - 2024. All rights reserved.