flutter 集成 腾讯 im

18 篇文章 0 订阅

flutter 集成腾讯im比较简单

注意点UserSig的生成   登陆的时候调用

开发者后台生成
在开发者后台,实际上调用云通信IM生成UserSig的库,把以下三个重要信息进行对称加密(非对称的方式已经停用),生成UserSig

 SdkAppid:云通信IM应用的唯一ID

 SecretKey:云通信IM应用的唯一密钥

 ExpireTime:密码过期时间,开发者指定
GenerateTestUserSig    UserSig的生成
/**
 *
 * @class name:
 * @class describe
 *@class name:
 * @author XUIELIANG
 * @time 2021/11/20 0020 15:55
 * @change
 * @chang time
 * @class describe
 */
library generate_test_im_usersig;
import 'package:crypto/crypto.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'dart:io';



///生成腾讯云即时通信测试用userSig
///
class GenerateTestUserSig {
  GenerateTestUserSig({required this.sdkappid, required this.key});
  int sdkappid;
  String key;

  ///生成UserSig
  String genSig({
    required String identifier,
    required int expire,
    List<int>? userBuf,
  }) {
    int currTime = _getCurrentTime();
    String sig = '';
    Map<String, dynamic> sigDoc = new Map<String, dynamic>();
    sigDoc.addAll({
      "TLS.ver": "2.0",
      "TLS.identifier": identifier,
      "TLS.sdkappid": this.sdkappid,
      "TLS.expire": expire,
      "TLS.time": currTime,
    });

    sig = _hmacsha256(
      identifier: identifier,
      currTime: currTime,
      expire: expire,
    );
    sigDoc['TLS.sig'] = sig;
    String jsonStr = json.encode(sigDoc);
    List<int> compress = zlib.encode(utf8.encode(jsonStr));
    return _escape(content: base64.encode(compress));
  }

  int _getCurrentTime() {
    return (new DateTime.now().millisecondsSinceEpoch / 1000).floor();
  }

  String _hmacsha256({
    required String identifier,
    required int currTime,
    required int expire,
  }) {
    int sdkappid = this.sdkappid;
    String contentToBeSigned =
        "TLS.identifier:$identifier\nTLS.sdkappid:$sdkappid\nTLS.time:$currTime\nTLS.expire:$expire\n";
    Hmac hmacSha256 = new Hmac(sha256, utf8.encode(this.key));
    Digest hmacSha256Digest =
    hmacSha256.convert(utf8.encode(contentToBeSigned));
    return base64.encode(hmacSha256Digest.bytes);
  }

  String _escape({
    required String content,
  }) {
    return content
        .replaceAll('\+', '*')
        .replaceAll('\/', '-')
        .replaceAll('=', '_');
  }
}

1 https://pub.dev/packages/tencent_im_sdk_plugin

这将在包的 pubspec.yaml 中添加这样的一行(并运行一个隐式flutter pub get):

dependencies:
  tencent_im_sdk_plugin: ^3.5.3

现在在您的 Dart 代码中,您可以使用:

import 'package:tencent_im_sdk_plugin/tencent_im_sdk_plugin.dart';

class _MyAppState extends State<MyApp> {
  late V2TIMManager timManager;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    //获取腾讯即时通信IM manager;
    timManager = TencentImSDKPlugin.v2TIMManager;
    inits();
  }
 int expire = 60 * 60 * 27 * 7; //开发者自定过期时间,比如7天

//初始化SDK
    V2TimValueCallback<bool> initRes = await timManager.initSDK(
        sdkAppID: 1400600479, //填入在控制台上申请的sdkappid
        loglevel: LogLevel.V2TIM_LOG_DEBUG,
        listener: V2TimSDKListener(onConnectFailed: (int code, String error) {
          print("================注册失败${code}====${error}");
        }, onConnectSuccess: () {
          print("================成功");
        }));
    int code = initRes.code;
    String desc = initRes.desc;
    bool? data = initRes.data; //为V2TimValueCallback实例化时接收的泛型。
    if (initRes.code == 0) {
      //初始化成功
      //以下监听可按需设置,为防止遗漏消息,请在登录前设置监听。
      //简单监听
      timManager.addSimpleMsgListener(
        listener: V2TimSimpleMsgListener(),
      );
//会话监听
      timManager.getConversationManager().setConversationListener(
            listener: V2TimConversationListener(),
          );
      //高级消息监听
      timManager.getMessageManager().addAdvancedMsgListener(
            listener: V2TimAdvancedMsgListener(),
          );

      //设置信令相关监听
      timManager.getSignalingManager().addSignalingListener(
            listener: V2TimSignalingListener(),
          );

      // 不时生产环境走,自己测试即不需要手机验证即可登陆
      GenerateTestUserSig usersig = new GenerateTestUserSig(
        sdkappid: Config.sdkappid,
        key: Config.key,
      );
      String pwdStr = usersig.genSig(identifier: "xueliang", expire: expire);
      TencentImSDKPlugin.v2TIMManager
          .login(
        userID: "xueliang",
        userSig: pwdStr,
      )
          .then((value) {
        print("=============${value}");
      });
    }
  }

登陆测试

void login() async {
  int expire = 60 * 60 * 27 * 7; //开发者自定过期时间,比如7天
  // 不时生产环境走,自己测试即不需要手机验证即可登陆
  GenerateTestUserSig usersig = new GenerateTestUserSig(
    sdkappid: Config.sdkappid,
    key: Config.key,
  );
  String pwdStr = usersig.genSig(identifier: "liang", expire: expire);
  var data = await TencentImSDKPlugin.v2TIMManager.login(
    userID: "liang",
    userSig: pwdStr,
  );
  if (data.code != 0) {
    // Utils.toast("登录失败${data.desc}");
    print("===============登录失败=${data.code}==${data.desc}=");
    return;
  }
  V2TimValueCallback<List<V2TimUserFullInfo>> infos =
      await TencentImSDKPlugin.v2TIMManager.getUsersInfo(
    userIDList: ["liang"],
  );
  List<V2TimUserFullInfo>? data2 = infos.data;

  if (infos.code == 0) {
    data2?.forEach((item) {
      print("======成功==${item.nickName}===");
    });
    // print("===============chenggong=${infos.toString()}===");
    timManager.sendC2CTextMessage(
      text: "sdjhjshdshdsads 你好湿哒哒的呀的撒对手泰迪狗赛度过三岁德国世家的你丫的",
      userID: "liang",
    );
  }
}

config 类

class Config {
  static const int sdkappid = int.fromEnvironment('1400600479', defaultValue: 1400600479);
  static const String key = String.fromEnvironment('981f785bb12240035787e87a791bcacbf8ac524846e39b9b5320c57408228052', defaultValue: "981f785bb12240035787e87a791bcacbf8ac524846e39b9b5320c57408228052");
  static const bool productEnv =
  bool.fromEnvironment('ISPRODUCT_ENV', defaultValue: false);
  static const String smsLoginHttpBase =
      'https://demos.trtc.tencent-cloud.com/prod';
  static const String captchaUrl =
      'https://imgcache.qq.com/operation/dianshi/other/index.e7ef9e022229b9167136a9ed48572f258fe7d528.html';
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值