Flutter教程实现推送通知自定义动作

在Flutter中实现推送通知的自定义动作时,遇到以下问题:

  1. 使用firebase_messaging插件处理通知点击事件时,如何区分不同按钮的点击动作?
  2. 当App处于后台或完全退出状态,自定义通知按钮的点击事件无法正常触发,该如何解决?
  3. 在Android和iOS平台上,配置推送通知自定义动作的差异点有哪些?是否需要分别处理?
  4. 能否通过本地通知模拟带动作按钮的推送通知进行测试?如果可以,具体实现步骤是什么?
3 回复

要实现Flutter推送通知的自定义动作,可以使用Firebase Cloud Messaging(FCM)。以下是步骤:

  1. 集成FCM:在pubspec.yaml中添加依赖:

    firebase_messaging: latest_version
    

    运行flutter pub get

  2. 配置Android和iOS:按照官方文档完成Firebase初始化和配置。

  3. 请求权限

    FirebaseMessaging messaging = FirebaseMessaging.instance;
    NotificationSettings settings = await messaging.requestPermission(
      alert: true,
      badge: true,
      sound: true,
    );
    
  4. 监听消息

    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print("Received message: ${message.data}");
      // 自定义动作处理
      if (message.data['action'] == 'custom_action') {
        performCustomAction();
      }
    });
    
  5. 发送带有自定义动作的通知: 使用FCM API发送通知时,在data字段中添加自定义键值对:

    {
      "to": "device_token",
      "data": {
        "action": "custom_action",
        "extra_info": "some_data"
      }
    }
    
  6. 测试:运行应用并发送带有自定义动作的通知,检查逻辑是否正确执行。

记得在真机或模拟器上测试推送功能。

更多关于Flutter教程实现推送通知自定义动作的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现推送通知的自定义动作,需要借助firebase_messaging插件和Android/iOS原生代码。

  1. 配置Firebase

    • 在Firebase控制台添加项目并集成google-services.json(Android)或GoogleService-Info.plist(iOS)。
    • 配置firebase_messaging依赖:在pubspec.yaml添加firebase_messaging: ^x.x.x
  2. 初始化插件
    main.dart初始化:

    FirebaseMessaging messaging = FirebaseMessaging.instance;
    await messaging.requestPermission();
    String token = await messaging.getToken();
    
  3. 处理通知
    通过onMessage监听前台消息:

    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      RemoteNotification? notification = message.notification;
      if (notification != null) {
        print('Title: ${notification.title}, Body: ${notification.body}');
      }
    });
    
  4. 自定义动作
    在Firebase控制台,创建通知时设置键值对数据。如键为action,值为"customAction"

  5. 原生扩展(必要时)

    • Android: 修改MyFirebaseMessagingService.java解析自定义数据。
    • iOS: 使用UNNotificationContent处理自定义字段。

通过以上步骤即可实现推送通知的自定义动作。

Flutter 实现推送通知自定义动作教程

在 Flutter 中实现推送通知的自定义动作,可以使用 flutter_local_notifications 插件。以下是实现步骤:

基本实现步骤

  1. 添加依赖
dependencies:
  flutter_local_notifications: ^latest_version
  1. 初始化插件
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();

// 初始化设置
const AndroidInitializationSettings initializationSettingsAndroid =
    AndroidInitializationSettings('app_icon');

final InitializationSettings initializationSettings =
    InitializationSettings(android: initializationSettingsAndroid);

await flutterLocalNotificationsPlugin.initialize(
    initializationSettings,
    onSelectNotification: selectNotification);
  1. 创建带动作的通知
Future<void> showNotificationWithActions() async {
  const AndroidNotificationDetails androidPlatformChannelSpecifics =
      AndroidNotificationDetails(
    'your_channel_id',
    'your_channel_name',
    'your_channel_description',
    importance: Importance.max,
    priority: Priority.high,
    actions: <AndroidNotificationAction>[
      AndroidNotificationAction(
        'reply',
        'Reply',
        icon: DrawableResourceAndroidIcon('ic_reply'),
        showsUserInterface: true,
      ),
      AndroidNotificationAction(
        'archive',
        'Archive',
        icon: DrawableResourceAndroidIcon('ic_archive'),
      ),
    ],
  );
  
  const NotificationDetails platformChannelSpecifics =
      NotificationDetails(android: androidPlatformChannelSpecifics);
  
  await flutterLocalNotificationsPlugin.show(
    0,
    '新消息',
    '你有一条未读消息',
    platformChannelSpecifics,
  );
}
  1. 处理动作点击
Future<void> selectNotification(String? payload) async {
  if (payload != null) {
    debugPrint('notification payload: $payload');
  }
  // 处理通知点击
}

// 在初始化时设置动作处理器
await flutterLocalNotificationsPlugin.initialize(
    initializationSettings,
    onSelectNotification: selectNotification,
    // 处理动作点击
    onDidReceiveNotificationResponse: (NotificationResponse response) {
      if (response.actionId?.isNotEmpty ?? false) {
        // 处理自定义动作
        print('用户点击了动作: ${response.actionId}');
      }
    });

高级功能

对于更复杂的需求,可以结合 Firebase Messaging 实现远程推送的自定义动作,或使用 awesome_notifications 插件获得更多自定义选项。

记得在 AndroidManifest.xml 中声明通知渠道和权限,并在 iOS 的 Info.plist 中配置推送权限(如果使用 iOS)。

希望这个教程对你有帮助!如需更详细的信息,可以参考插件的官方文档。

回到顶部