Flutter通知处理插件sendbird_notification_handler的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter通知处理插件sendbird_notification_handler的使用

动机

通过Sendbird发送的推送通知在应用中缺乏可见性。它使用了FCM和APNS作为底层技术,在iOS上你不能与通知进行交互或在前台接收它们。在Android上,你可以通过点击通知来接收它们或者在前台时使用firebase_messaging来接收它们,但在后台因为Sendbird只发送数据消息而无法显示通知。此插件填补了这些缺失的部分,无需编写原生代码即可实现。它旨在与firebase_messaging并行工作,而不是替代。

插件的功能

iOS

  • 可以在前台接收通知
  • 当应用在后台运行时可以处理通知点击
  • 当应用被终止时可以处理通知点击

Android

  • 当应用在后台运行时或被终止时可以显示通知
  • 在后台运行时监听通知点击
  • 当应用被终止时处理通知点击

开始使用

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  sendbird_notification_handler: <latest_version>

监听通知

注意: iOS上的推送通知只能在物理设备上接收,模拟器无法接收到。

当应用在后台运行时处理通知点击(iOS & Android)

import 'package:sendbird_notification_handler/sendbird_notification_handler.dart';

SendbirdNotificationHandler.onMessageOpened.listen((message) {
  // 导航到聊天屏幕
});

获取从终止状态打开应用的初始消息(iOS & Android)

import 'package:sendbird_notification_handler/sendbird_notification_handler.dart';

final message = await SendbirdNotificationHandler.getInitialMessage();

if(message != null) {
  // 重定向到聊天屏幕
}

监听前台接收到的消息(仅限iOS)

import 'package:sendbird_notification_handler/sendbird_notification_handler.dart';

SendbirdNotificationHandler.onMessageReceived.listen((message) {
  // 显示一个Snackbar,更新消息计数等
});

在Android上,使用FirebaseMessaging#onMessage并检查sendbird对象。

当应用在后台时显示通知(仅限Android,iOS会自动显示)

import 'package:sendbird_notification_handler/sendbird_notification_handler.dart';
import 'package:firebase_messaging/firebase_messaging.dart';

FirebaseMessaging.onBackgroundMessage(initBackgroundNotificationsHandler);

@pragma('vm:entry-point')
Future<void> initBackgroundNotificationsHandler(RemoteMessage message) async {
  final isSendbirdMessage = message.data.containsKey('sendbird');

  if (!isSendbirdMessage) {
    return;
  }

  SendbirdNotificationHandler.sendNotification(
    payload: message.data,
  );
}

赞助

如果没有来自Trim的巨大支持,这个插件是不可能实现的。

待办事项

  • ❌ 显示发送者头像在通知中
  • ❌ 添加回复操作的支持
  • ❌ 添加标记为已读操作的支持

贡献

欢迎提交拉取请求。对于重大更改,请先创建一个问题讨论你想要进行的更改。


示例代码

以下是完整的示例代码:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:sendbird_notification_handler/sendbird_notification_handler.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _sendbirdNotificationHandlerPlugin = SendbirdNotificationHandler();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息是异步的,因此我们在异步方法中初始化。
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能会失败,所以我们使用try/catch PlatformException。
    // 我们还处理消息可能返回null的情况。
    try {} on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果在异步平台消息还在飞行时小部件从树中移除,我们希望丢弃回复而不是调用
    // setState来更新我们的非存在的外观。
    if (!mounted) return;

    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行于: $_platformVersion\n'),
        ),
      ),
    );
  }
}

更多关于Flutter通知处理插件sendbird_notification_handler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter通知处理插件sendbird_notification_handler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在处理Flutter中的通知时,特别是使用sendbird_notification_handler插件,通常需要配置一些关键步骤来确保通知能够正确接收和处理。以下是一个基本的代码示例,展示了如何使用sendbird_notification_handler插件来处理通知。

首先,确保你已经在pubspec.yaml文件中添加了sendbird_notification_handler依赖:

dependencies:
  flutter:
    sdk: flutter
  sendbird_sdk: ^x.y.z  # 确保使用与sendbird_notification_handler兼容的版本
  sendbird_notification_handler: ^a.b.c  # 替换为最新版本号

然后,运行flutter pub get来安装依赖。

配置sendbird_notification_handler

在Flutter应用的main.dart文件中,你可以按照以下步骤配置sendbird_notification_handler

import 'package:flutter/material.dart';
import 'package:sendbird_sdk/sendbird_sdk.dart';
import 'package:sendbird_notification_handler/sendbird_notification_handler.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SendBird SDK
  SendBird.init(yourSendBirdAppId);  // 替换为你的SendBird应用ID

  // 配置通知处理器
  SendBirdNotificationHandler.instance.initialize(
    onMessageReceived: (message) async {
      // 处理接收到的消息通知
      print('Received message: ${message.toMap()}');
    },
    onChannelChanged: (channel) async {
      // 处理频道变更通知
      print('Channel changed: ${channel.toMap()}');
    },
    onUserTypingStatusChanged: (typingStatus) async {
      // 处理用户正在输入状态变化的通知
      print('User typing status changed: ${typingStatus.toMap()}');
    },
    onReadReceiptReceived: (readReceipt) async {
      // 处理已读回执通知
      print('Read receipt received: ${readReceipt.toMap()}');
    },
    onReactionChanged: (reaction) async {
      // 处理反应变化的通知
      print('Reaction changed: ${reaction.toMap()}');
    },
    onGroupChatMemberChanged: (member) async {
      // 处理群组聊天成员变化的通知
      print('Group chat member changed: ${member.toMap()}');
    },
    onGeneralNotification: (notification) async {
      // 处理其他一般通知
      print('General notification: ${notification.toMap()}');
    },
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter SendBird Notification Handler Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('SendBird Notification Handler Demo'),
        ),
        body: Center(
          child: Text('Check your console for notification logs.'),
        ),
      ),
    );
  }
}

iOS和Android平台配置

对于iOS,你需要在Info.plist中添加必要的权限配置,如NSLocationAlwaysUsageDescription(如果需要基于位置的通知)和UNNotificationTypes。同时,确保在AppDelegate.swiftAppDelegate.m中正确配置SendBird的推送通知。

对于Android,你需要在AndroidManifest.xml中配置必要的权限和服务,并在MainActivity.ktMainActivity.java中初始化SendBird的推送服务。

由于这些配置依赖于具体的项目需求和SendBird SDK的版本,建议查阅最新的SendBird官方文档sendbird_notification_handler插件文档来获取详细的配置信息。

请注意,以上代码是一个基本的示例,实际应用中可能需要根据具体需求进行调整和扩展。

回到顶部