Flutter实时推送插件laravel_flutter_pusher_plus的使用
Flutter实时推送插件laravel_flutter_pusher_plus的使用
⚠️ 请注意 这是一个重新设计并更新版本的laravel_flutter_pusher包。
一个非官方的Flutter插件,它封装了Android上的pusher-websocket-java和iOS上的pusher-websocket-swift。 这是对Flutter Pusher Client插件的延续。
此包允许你从Pusher服务器消费事件。为了使用此库,你需要在https://pusher.com上有一个免费账户。注册后,你需要你的应用程序的凭证。
注意 此包需要 <code>json_annotation : ^4.0.0</code>
。
如何安装
- 在你的
pubspec.yaml
文件中添加:
dependencies:
laravel_flutter_pusher_plus: ^[latest_version]
对于iOS Objective-C基础的Flutter应用
目前,将一些基于Swift的Flutter插件在Objective-C基础的Flutter应用中工作有点困难。参见这里了解更多信息,并查看这里了解修复方法。
这些步骤应该可以修复你的项目中的问题。
- 在
/ios/Podfile
中,将全局平台设置为至少10.0:
platform :ios, '10.0'
- 在
/ios/Podfile
的Runner部分末尾添加use_frameworks!
- 在你的iOS Runner项目中设置Swift版本。
- 使用Xcode打开项目。
- 在Runner中,选择
File -> New -> File -> Swift File
,命名任何名称。 - Xcode会询问你是否要创建桥接头文件,点击“是”。
- 转到Runner的
Build Settings
并将SWIFT_VERSION
设置为4.2或5.0。 - 删除在步骤2中创建的Swift文件。
- 删除在步骤3中创建的桥接头文件。
- 执行
flutter clean
- 在
/ios
目录下执行pod install --repo-update
开始使用
import 'package:laravel_flutter_pusher_plus/laravel_flutter_pusher_plus.dart';
void main() {
var options = PusherOptions(
host: '10.0.2.2',
port: 6001,
encrypted: false,
cluster: 'eu'
);
LaravelFlutterPusher pusher = LaravelFlutterPusher('app_key', options, enableLogging: true);
pusher
.subscribe('channel')
.bind('event', (event) => log('event => ' + event.toString()));
}
延迟连接
你可以延迟与服务器的连接,因此可以在客户端构造函数中设置lazyConnect
属性。
R8/Proguard代码混淆
如果你启用了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 dev.micazi.laravel_flutter_pusher_plus.** { *; }
开发
生成模型和工厂:flutter packages pub run build_runner build --delete-conflicting-outputs
示例代码
以下是一个完整的示例,展示了如何使用laravel_flutter_pusher_plus
插件。
import 'package:flutter/material.dart';
import 'package:laravel_flutter_pusher_plus/laravel_flutter_pusher_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Pusher Example"),
),
body: Center(
child: Text("Listening for events..."),
),
),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final pusher = LaravelFlutterPusher(
'app_key',
PusherOptions(
host: '10.0.2.2',
port: 6001,
encrypted: false,
cluster: 'eu',
),
enableLogging: true,
);
[@override](/user/override)
void initState() {
super.initState();
// 订阅频道并绑定事件
pusher.subscribe('channel').bind('event', (event) {
print('Received event: ${event.data}');
});
// 连接到Pusher服务器
pusher.connect();
}
[@override](/user/override)
void dispose() {
// 断开连接
pusher.disconnect();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Container();
}
}
更多关于Flutter实时推送插件laravel_flutter_pusher_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter实时推送插件laravel_flutter_pusher_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用laravel_flutter_pusher_plus
插件来实现实时推送的示例代码。这个插件通常用于与Laravel Pusher Beams服务进行集成,以实现实时消息推送功能。
Flutter端代码
-
添加依赖
首先,在你的
pubspec.yaml
文件中添加laravel_flutter_pusher_plus
依赖:dependencies: flutter: sdk: flutter laravel_flutter_pusher_plus: ^x.y.z # 替换为最新版本号
然后运行
flutter pub get
来安装依赖。 -
配置Pusher Beams
在你的Flutter项目的
main.dart
或相应的初始化文件中,配置Pusher Beams:import 'package:flutter/material.dart'; import 'package:laravel_flutter_pusher_plus/laravel_flutter_pusher_plus.dart'; void main() { runApp(MyApp()); // 初始化Pusher Beams PusherBeams.init( instanceId: 'your-pusher-beams-instance-id', // 替换为你的Pusher Beams实例ID key: 'your-pusher-beams-key', // 替换为你的Pusher Beams密钥 cluster: 'your-pusher-cluster', // 替换为你的Pusher集群(例如:ap2, eu1等) onMessageReceived: (message) { // 处理接收到的消息 print('Received message: $message'); }, onError: (error) { // 处理错误 print('Error: $error'); }, ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Pusher Demo', home: Scaffold( appBar: AppBar( title: Text('Flutter Pusher Demo'), ), body: Center( child: Text('Check the console for pushed messages!'), ), ), ); } }
-
订阅频道
在你的应用中,你可能需要让用户订阅特定的频道来接收消息。例如:
void subscribeToChannel() { PusherBeams.subscribe( to: 'your-channel-name', // 替换为你的频道名称 ); } // 可以在按钮点击事件中调用这个函数 void _onSubscribeButtonPressed() { subscribeToChannel(); }
然后在你的UI中添加一个按钮来触发订阅:
body: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text('Check the console for pushed messages!'), ElevatedButton( onPressed: _onSubscribeButtonPressed, child: Text('Subscribe to Channel'), ), ], ),
Laravel端代码
在Laravel端,你需要安装Pusher Beams SDK并配置相应的广播逻辑。以下是一个基本的Laravel广播示例。
-
安装Pusher Beams PHP SDK
使用Composer安装Pusher Beams PHP SDK:
composer require pusher/pusher-php-server
-
配置Pusher Beams
在
.env
文件中添加你的Pusher Beams配置:
PUSHER_APP_ID=your-pusher-app-id PUSHER_APP_KEY=your-pusher-app-key PUSHER_APP_SECRET=your-pusher-app-secret PUSHER_APP_CLUSTER=your-pusher-cluster
3. **广播消息**
在你的Laravel控制器或任何你想要广播消息的地方,使用Pusher Beams SDK发送消息:
```php
use Pusher\Pusher;
class YourController extends Controller
{
public function broadcastMessage()
{
$options = array(
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true
);
$pusher = new Pusher(
env('PUSHER_APP_KEY'),
env('PUSHER_APP_SECRET'),
env('PUSHER_APP_ID'),
$options
);
$data = array('message' => 'Hello, this is a test message!');
$pusher->trigger('your-channel-name', 'my_event', $data);
}
}
总结
上述代码示例展示了如何在Flutter和Laravel项目中集成laravel_flutter_pusher_plus
插件以实现实时推送功能。Flutter端负责接收和显示消息,而Laravel端负责广播消息到指定的频道。确保你已经正确配置了Pusher Beams的实例ID、密钥和集群信息,并根据需要调整频道名称和事件名称。