Flutter通知处理插件sendbird_notification_handler的使用
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
更多关于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.swift
或AppDelegate.m
中正确配置SendBird的推送通知。
对于Android,你需要在AndroidManifest.xml
中配置必要的权限和服务,并在MainActivity.kt
或MainActivity.java
中初始化SendBird的推送服务。
由于这些配置依赖于具体的项目需求和SendBird SDK的版本,建议查阅最新的SendBird官方文档和sendbird_notification_handler插件文档来获取详细的配置信息。
请注意,以上代码是一个基本的示例,实际应用中可能需要根据具体需求进行调整和扩展。