Flutter实时推送插件laravel_flutter_pusher_plus的使用

Flutter实时推送插件laravel_flutter_pusher_plus的使用

⚠️ 请注意 这是一个重新设计并更新版本的laravel_flutter_pusher包。

pub package

一个非官方的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

1 回复

更多关于Flutter实时推送插件laravel_flutter_pusher_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用laravel_flutter_pusher_plus插件来实现实时推送的示例代码。这个插件通常用于与Laravel Pusher Beams服务进行集成,以实现实时消息推送功能。

Flutter端代码

  1. 添加依赖

    首先,在你的pubspec.yaml文件中添加laravel_flutter_pusher_plus依赖:

    dependencies:
      flutter:
        sdk: flutter
      laravel_flutter_pusher_plus: ^x.y.z  # 替换为最新版本号
    

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

  2. 配置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!'),
            ),
          ),
        );
      }
    }
    
  3. 订阅频道

    在你的应用中,你可能需要让用户订阅特定的频道来接收消息。例如:

    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广播示例。

  1. 安装Pusher Beams PHP SDK

    使用Composer安装Pusher Beams PHP SDK:

    composer require pusher/pusher-php-server
    
  2. 配置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、密钥和集群信息,并根据需要调整频道名称和事件名称。

回到顶部