Flutter即时通讯插件zego_zpns的使用

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

Flutter即时通讯插件zego_zpns的使用

本项目是一个用于 Flutter 的插件包,专门包含针对 Android 和/或 iOS 平台的特定实现代码。

对于 Flutter 开发的帮助信息,可以查看 官方文档,该文档提供了教程、示例、移动开发指南以及完整的 API 参考。

获取开始

示例代码

import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:zego_zpns/zego_zpns.dart';
import 'package:zego_zim/zego_zim.dart';

// 背景处理函数,用于处理推送消息
[@pragma](/user/pragma)('vm:entry-point')
Future<void> _zpnsMessagingBackgroundHandler(ZPNsMessage message) async {
  print("收到推送消息: $message");
}

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

  if (kIsWeb) {
    // 如果是 Web 端,初始化配置
    ZIMAppConfig appConfig = ZIMAppConfig();
    appConfig.appID = 0;
    appConfig.appSign = "";

    ZIM.create(appConfig);
    return;
  }

  // 设置后台消息处理器
  ZPNs.setBackgroundMessageHandler(_zpnsMessagingBackgroundHandler);

  // 配置推送服务
  ZPNsConfig config = ZPNsConfig();
  config.enableFCMPush = true;
  ZPNs.setPushConfig(config);

  // 请求通知权限(仅限 iOS)
  ZPNs.getInstance().applyNotificationPermission();

  // 注册推送服务
  try {
    await ZPNs.getInstance().registerPush(
      iOSEnvironment: ZPNsIOSEnvironment.Development,
      enableIOSVoIP: true,
    );
  } catch (onError) {
    if (onError is PlatformException) {
      // 处理异常
      log(onError.message ?? "");
    }
  }

  // 处理点击通知事件
  ZPNsEventHandler.onNotificationClicked = (ZPNsMessage zpnsMessage) {
    if (zpnsMessage.pushSourceType == ZPNsPushSourceType.APNs) {
      Map aps = Map.from(zpnsMessage.extras['aps'] as Map);
      String payload = aps['payload'];
      log("我的有效载荷是: $payload");
    } else if (zpnsMessage.pushSourceType == ZPNsPushSourceType.FCM) {
      // FCM 不支持此接口,请在 Android 活动中通过 Intent 获取有效载荷
    }
    log("用户点击了离线推送通知,标题是: ${zpnsMessage.title},内容是: ${zpnsMessage.content}");
  };
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Column(
          children: [
            // 注册 Push 服务按钮
            GestureDetector(
              onTap: () {
                ZPNsWebConfig config = ZPNsWebConfig();
                config.apiKey = "";
                config.authDomain = "";
                config.projectID = "";
                config.storageBucket = "";
                config.messagingSenderID = "";
                config.appID = "";
                config.measurementID = "";
                config.vapidKey = "";
                ZPNs.getInstance().registerPush(webConfig: config);
              },
              child: Container(
                padding: const EdgeInsets.all(12),
                decoration: BoxDecoration(
                  color: Colors.lightBlue,
                  borderRadius: BorderRadius.circular(8),
                ),
                child: const Text('注册 Push 服务'),
              ),
            ),
            // 登录按钮
            GestureDetector(
              onTap: () {
                ZIMUserInfo userInfo = ZIMUserInfo();
                String token = "";
                userInfo.userID = "";
                userInfo.userName = "";
                ZIM.getInstance()!.login(userInfo, token);
              },
              child: Container(
                padding: const EdgeInsets.all(12),
                decoration: BoxDecoration(
                  color: Colors.lightBlue,
                  borderRadius: BorderRadius.circular(8),
                ),
                child: const Text('登录'),
              ),
            ),
          ],
        )
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中集成并使用zego_zpns插件来实现即时通讯功能的示例代码。请注意,这个示例仅用于演示基本集成和消息发送/接收功能,实际项目中可能需要根据具体需求进行调整和扩展。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  zego_zpns: ^最新版本号  # 替换为实际的最新版本号

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

2. 配置Android和iOS权限

根据zego_zpns插件的文档,你可能需要在AndroidManifest.xmlInfo.plist中添加一些必要的权限和配置。具体配置请参考插件的官方文档。

3. 初始化ZegoZPNS

在你的Flutter应用中,初始化ZegoZPNS客户端。通常这会在应用的入口文件(如main.dart)中进行。

import 'package:flutter/material.dart';
import 'package:zego_zpns/zego_zpns.dart';

void main() {
  runApp(MyApp());
  // 初始化ZegoZPNS
  ZegoZPNS.init(
    appKey: '你的AppKey', // 替换为你的实际AppKey
    appName: '你的AppName', // 替换为你的实际AppName
    onSuccess: () {
      print('ZegoZPNS 初始化成功');
    },
    onError: (int code, String msg) {
      print('ZegoZPNS 初始化失败: $code, $msg');
    },
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter ZegoZPNS Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

4. 登录和订阅消息

在用户登录成功后,调用ZegoZPNS的登录方法,并订阅需要的消息类型。

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    // 假设用户已经登录,这里调用ZegoZPNS的登录方法
    ZegoZPNS.login(
      userId: '用户ID', // 替换为实际用户ID
      token: '用户Token', // 如果有使用Token验证的话
      onSuccess: () {
        print('ZegoZPNS 登录成功');
        // 登录成功后订阅消息
        ZegoZPNS.subscribe({
          'chat_message': (msg) {
            // 处理收到的聊天消息
            print('收到聊天消息: ${msg.toJson()}');
          },
        });
      },
      onError: (int code, String msg) {
        print('ZegoZPNS 登录失败: $code, $msg');
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter ZegoZPNS Demo'),
      ),
      body: Center(
        child: Text('等待登录...'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _sendMessage,
        tooltip: '发送消息',
        child: Icon(Icons.send),
      ),
    );
  }

  void _sendMessage() {
    // 构造消息并发送
    ZegoZPNSMessage message = ZegoZPNSMessage(
      type: 'chat_message',
      content: {'text': 'Hello, this is a test message!'},
      toUserIds: ['接收者用户ID'], // 替换为实际接收者用户ID列表
    );
    ZegoZPNS.sendMessage(message);
  }
}

5. 处理收到的消息

在上面的代码中,我们已经在ZegoZPNS.subscribe中处理了收到的聊天消息。你可以根据消息类型和内容执行相应的逻辑。

注意事项

  • 确保你的AppKey和AppName是有效的,并且已经在ZEGO云平台进行了相应的配置。
  • 根据实际需求处理用户登录逻辑,这里为了演示简化处理。
  • 订阅的消息类型和内容格式需要与你的应用逻辑相匹配。
  • 错误处理和日志记录对于调试和生产环境都非常重要,不要在生产代码中忽略它们。

这个示例展示了如何在Flutter中使用zego_zpns插件进行基本的即时通讯功能集成。根据实际需求,你可能需要扩展和优化这个基础示例。

回到顶部