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

如何基于OneSignal实现Flutter(Android/iOS)群组通知批量清除?

实现Flutter中OneSignal群组通知的清除功能

1. 点击群组通知时清除该群组所有通知

  • 确保OneSignal Flutter SDK已正确集成,建议使用最新稳定版。
  • 在应用初始化阶段配置通知点击回调,获取通知关联的群组标识后调用清除方法:
import 'package:onesignal_flutter/onesignal_flutter.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化OneSignal,替换为你的APP ID
  await OneSignal.initialize("YOUR_ONESIGNAL_APP_ID");

  // 设置通知点击监听
  OneSignal.Notifications.addClickListener((notificationClickEvent) {
    // 获取群组标识:优先取自定义附加数据中的groupKey,或OneSignal自带的group字段
    String? groupKey = notificationClickEvent.notification.additionalData?['groupKey'] 
                        ?? notificationClickEvent.notification.group;
    
    if (groupKey != null) {
      // 清除该群组下的所有通知
      OneSignal.Notifications.removeGroupedNotifications(groupKey);
    }

    // 此处添加跳转到对应群组页面的逻辑
    // Navigator.push(context, MaterialPageRoute(builder: (_) => GroupChatPage(groupKey: groupKey!)));
  });

  runApp(const MyApp());
}
  • 后端发送通知时需统一设置群组标识:
    • 在OneSignal REST API请求体中,给notification对象添加group字段,值为群组唯一ID;
    • 或在additional_data中加入自定义groupKey字段,保证前后端标识一致。

2. 直接打开群组页面时清除该群组所有通知

在群组页面初始化时调用清除方法即可:

class GroupChatPage extends StatefulWidget {
  final String groupKey; // 从路由参数传入当前群组的标识
  const GroupChatPage({super.key, required this.groupKey});

  @override
  State<GroupChatPage> createState() => _GroupChatPageState();
}

class _GroupChatPageState extends State<GroupChatPage> {
  @override
  void initState() {
    super.initState();
    // 页面加载时清除该群组的所有通知
    _clearGroupNotifications();
  }

  Future<void> _clearGroupNotifications() async {
    try {
      await OneSignal.Notifications.removeGroupedNotifications(widget.groupKey);
    } catch (e) {
      // 处理清除失败的情况,比如打印日志
      print('清除群组通知失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('群组聊天')),
      body: // 你的群组聊天UI内容
    );
  }
}

关键注意事项

  • 所有同群组的通知必须使用相同的groupKey,否则removeGroupedNotifications无法识别并清除全部通知。
  • 确认使用的OneSignal Flutter SDK版本支持removeGroupedNotifications方法(v3.0+版本已支持)。
  • 若使用OneSignal原生group字段做标识,Android端会自动折叠同group的通知,iOS端需配合apns_collapse_id实现折叠,但removeGroupedNotifications方法在两端均能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:45:04