Flutter实时通信插件pusher_client_fixed的使用
Flutter实时通信插件pusher_client_fixed的使用
概述
pusher_client_fixed
是一个用于Flutter应用的Pusher Channels客户端插件,支持Android和iOS平台。它封装了 pusher-websocket-java
和 pusher-websocket-swift
,允许开发者在Flutter应用中实现实时通信功能。
安装
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
pusher_client_fixed: ^0.0.4
然后运行 flutter pub get
来安装插件。
配置
iOS配置
-
在
ios/Podfile
中设置最低部署目标为9.0:platform :ios, '9.0'
-
如果你使用本地的Pusher服务器(如 laravel-websockets),需要在
ios/Runner/Info.plist
中添加以下内容:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
Android配置
如果启用了代码混淆(R8或proguard),需要在 android/app/build.gradle
中添加混淆规则:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
然后在 android/app/proguard-rules.pro
中添加:
-keep class com.github.chinloyal.pusher_client.** { *; }
示例代码
以下是一个完整的示例,展示如何使用 pusher_client_fixed
插件来订阅私有频道并监听事件。
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:pusher_client_fixed/pusher_client_fixed.dart';
void main() {
runApp(const MyApp());
}
const String appId = "1321495";
const String key = "037c47e0cbdc81fb7144";
const String cluster = "mt1";
const String hostEndPoint = "172.17.96.1";
const String hostAuthEndPoint = "http://$hostEndPoint/broadcasting/auth";
const String token = "2|2gAA0Z1w43jasatIFaw0MD3H8LSDeGIoK2sCtTDw6ac6eb51";
const String channelName = 'private-messages';
const String eventName = 'MessageCreatedEvent';
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late PusherClient pusherClient;
late Channel channel;
[@override](/user/override)
void initState() {
super.initState();
initPusher();
}
void initPusher() {
pusherClient = PusherClient(
key,
PusherOptions(
cluster: cluster,
auth: PusherAuth(
hostAuthEndPoint,
headers: {'Authorization': 'Bearer $token'},
),
),
autoConnect: false,
enableLogging: true,
);
pusherClient.connect();
pusherClient.onConnectionStateChange((state) {
log(
"previousState: ${state?.previousState}, currentState: ${state?.currentState}, socketId: ${pusherClient.getSocketId()}",
);
if (state?.currentState == 'CONNECTED') {
channel = pusherClient.subscribe(channelName);
channel.bind(eventName, (event) {
log('${event?.data}');
});
}
});
pusherClient.onConnectionError((error) {
log("error: ${error?.message}");
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter Pusher Client Example'),
),
body: const Center(
child: Text('Listening to Pusher events...'),
),
),
);
}
[@override](/user/override)
void dispose() {
pusherClient.unsubscribe(channelName);
pusherClient.disconnect();
super.dispose();
}
}
更多关于Flutter实时通信插件pusher_client_fixed的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter实时通信插件pusher_client_fixed的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用pusher_client_fixed
插件来实现实时通信的示例代码。这个插件是Pusher Beams官方Flutter插件的一个修正版,用于处理WebSocket连接和事件订阅。
首先,确保你已经在pubspec.yaml
文件中添加了pusher_client_fixed
依赖:
dependencies:
flutter:
sdk: flutter
pusher_client_fixed: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中如下使用pusher_client_fixed
插件:
import 'package:flutter/material.dart';
import 'package:pusher_client_fixed/pusher_client_fixed.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
PusherClient? _pusherClient;
String _channelName = 'my-channel';
String _eventName = 'my-event';
String _receivedMessage = '';
@override
void initState() {
super.initState();
initPusher();
}
void initPusher() {
var options = PusherOptions(
cluster: 'YOUR_PUSHER_CLUSTER', // 替换为你的Pusher集群
key: 'YOUR_PUSHER_APP_KEY', // 替换为你的Pusher应用密钥
debug: true,
);
_pusherClient = PusherClient(options);
_pusherClient!.connect().then((value) {
print('Connected to Pusher!');
var channel = _pusherClient!.subscribe(_channelName);
channel.bind(_eventName, (data) {
setState(() {
_receivedMessage = data['message'];
});
print('Received event: $_eventName with data: $data');
});
}).catchError((error) {
print('Error connecting to Pusher: $error');
});
}
@override
void dispose() {
_pusherClient?.disconnect();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Pusher Client Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Received Message: $_receivedMessage',
style: TextStyle(fontSize: 24),
),
],
),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
-
初始化Pusher客户端:在
initPusher
方法中,我们创建了PusherClient
实例,并配置了Pusher集群和应用密钥。然后,我们连接到Pusher服务器。 -
订阅频道和事件:一旦连接成功,我们订阅了一个名为
my-channel
的频道,并绑定了一个名为my-event
的事件。当事件触发时,我们更新UI以显示接收到的消息。 -
清理资源:在
dispose
方法中,我们断开了与Pusher的连接,以释放资源。
请注意,你需要将YOUR_PUSHER_CLUSTER
和YOUR_PUSHER_APP_KEY
替换为你自己的Pusher集群和应用密钥。
这个示例代码展示了如何使用pusher_client_fixed
插件进行基本的实时通信。根据你的需求,你可以进一步扩展这个示例,比如处理更多类型的事件、管理多个频道等。