You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter应用内实现向其他应用发送FCM通知?

Flutter 跨应用发送通知实现方案

核心前提

  • 受移动端系统权限限制,你无法直接在自己的应用中为其他应用触发系统通知,只能通过跨进程通信给目标应用传递消息,由目标应用自身调用通知API完成通知弹出
  • 如果目标应用不属于你且未对外公开通信协议,该功能无法实现
  • 该功能依赖原生层能力,无全平台通用的Flutter纯Dart实现方案

Android 端实现方案

  • 方案1:显式广播通信
    双方提前约定好广播Action、参数规则,目标应用注册对应的广播接收器,你的应用通过显式Intent发送广播,目标应用收到广播后自行弹出通知。原生层发送广播的示例代码:
    // Android 原生层Kotlin代码
    val intent = Intent().apply {
      action = "com.target.app.NOTIFY_ACTION"
      setPackage("com.target.app.package.name")
      putExtra("notify_content", "要发送的通知内容")
    }
    sendBroadcast(intent)
    
    你可以通过Flutter MethodChannel调用上述原生逻辑完成广播发送。Android 8.0及以上版本仅支持显式广播,必须指定目标应用的包名和接收器完整类名。
  • 方案2:DeepLink 唤起
    目标应用配置好自定义Scheme,你的应用直接通过url_launcher包调用约定好的链接带参数,目标应用被唤起后接收参数弹出通知,该方案无需额外写原生代码。

iOS 端实现方案

  • 方案1:自定义Scheme/通用链接唤起
    和Android DeepLink逻辑一致,目标应用配置好自定义Scheme或者通用链接,你的应用通过url_launcher调用约定链接传递参数,目标应用被唤起后自行弹出通知。需要注意在你的应用info.plist中添加LSApplicationQueriesSchemes字段,配置目标应用的Scheme,否则无法检测目标应用是否安装。
  • 方案2:App Group 共享通信
    如果两款应用都归你所有,且在同一个苹果开发者账号下,可以开启同一份App Group权限,通过共享的NSUserDefaults或者共享目录传递消息,配合后台刷新能力,目标应用检测到新消息后弹出通知,可实现无需唤起目标应用就能发通知的效果。

Flutter 层通用实现示例

直接使用url_launcher包实现跨端DeepLink调用,是成本最低的实现方案:

  1. 先在pubspec.yaml中添加依赖:url_launcher: ^6.2.0
  2. 调用示例代码:
import 'package:url_launcher/url_launcher.dart';

Future<void> sendNotifyToTargetApp(String content) async {
  // 双方提前约定的通信协议格式
  final Uri notifyUri = Uri.parse(
    'targetapp://custom_notify?content=${Uri.encodeComponent(content)}&timestamp=${DateTime.now().millisecondsSinceEpoch}'
  );
  if (await canLaunchUrl(notifyUri)) {
    // 外部唤起目标应用
    await launchUrl(notifyUri, mode: LaunchMode.externalApplication);
  }
}

内容的提问来源于stack exchange,提问作者Sunny Rahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:54:07