From 3ed76003ffdddcee5610c928efb1fa3a04611e03 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Mon, 12 Oct 2020 11:17:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=85=BE=E8=AE=AFIM=20SDK=20?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5recook=E8=B4=A6=E5=8F=B7=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=85=BE=E8=AE=AFIM=20=E8=B4=A6=E5=8F=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/constants/api.dart | 6 ++++ lib/main.dart | 7 ++++ .../live_stream/live_stream_view_page.dart | 18 ++++++++++ .../live/models/tencent_im_user_model.dart | 22 ++++++++++++ lib/pages/live/sub_page/live_stream_page.dart | 1 - .../live/tencent_im/tencent_im_tool.dart | 35 +++++++++++++++++++ pubspec.lock | 7 ++++ pubspec.yaml | 2 ++ 8 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 lib/pages/live/models/tencent_im_user_model.dart create mode 100644 lib/pages/live/tencent_im/tencent_im_tool.dart diff --git a/lib/constants/api.dart b/lib/constants/api.dart index 5ad3396..08e0872 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -457,4 +457,10 @@ class LiveAPI { ///直播关注列表 static const String liveAttentionList = '/v1/live/live/follow_list'; + + ///通过已登陆账号获取腾讯IM账号 + static const String tencentUser = '/v1/live/live/im/login_info'; + + ///通过未登陆账号获取腾讯IM账号 + static const String tencentUserNotLogin = '/v1/live/live/im/no_login_info'; } diff --git a/lib/main.dart b/lib/main.dart index c0dab46..2fa69fe 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -18,6 +18,7 @@ import 'package:recook/third_party/bugly_helper.dart'; import 'package:recook/utils/CommonLocalizationsDelegate.dart'; import 'package:recook/utils/test.dart'; import 'package:redux/redux.dart'; +import 'package:tencent_im_plugin/tencent_im_plugin.dart'; import 'constants/header.dart'; import 'utils/app_router.dart'; @@ -30,7 +31,13 @@ List cameras; void main() async { WidgetsFlutterBinding.ensureInitialized(); cameras = await availableCameras(); + + //初始化AMap AmapLocation.instance.init(iosKey: 'e8a8057cfedcdcadcf4e8f2c7f8de982'); + + //初始化腾讯im + TencentImPlugin.init(appid: '1400423961'); + AppConfig.initial(useEncrypt: false /// 网络请求加密功能 diff --git a/lib/pages/live/live_stream/live_stream_view_page.dart b/lib/pages/live/live_stream/live_stream_view_page.dart index ad6bb2e..336f635 100644 --- a/lib/pages/live/live_stream/live_stream_view_page.dart +++ b/lib/pages/live/live_stream/live_stream_view_page.dart @@ -1,9 +1,15 @@ import 'package:flutter/material.dart'; import 'package:many_like/many_like.dart'; +import 'package:recook/constants/api.dart'; import 'package:recook/constants/header.dart'; +import 'package:recook/manager/http_manager.dart'; +import 'package:recook/manager/user_manager.dart'; +import 'package:recook/pages/live/models/tencent_im_user_model.dart'; +import 'package:recook/pages/live/tencent_im/tencent_im_tool.dart'; import 'package:recook/pages/live/widget/live_user_bar.dart'; import 'package:recook/pages/live/widget/more_people.dart'; import 'package:recook/widgets/custom_image_button.dart'; +import 'package:tencent_im_plugin/tencent_im_plugin.dart'; import 'package:tencent_live_fluttify/tencent_live_fluttify.dart'; class LiveStreamViewPage extends StatefulWidget { @@ -24,11 +30,23 @@ class _LiveStreamViewPageState extends State { // _livePlayer?.pausePlay(); // CRoute.transparent(context, LiveBlurPage()); // }); + //腾讯IM登陆 + TencentIMTool.login().then((_) { + DPrint.printLongJson('用户登陆'); + TencentImPlugin.addListener(parseMessage); + }); + } + + parseMessage(ListenerTypeEnum type, dynamic params) { + print(type.toString()); } @override void dispose() { _livePlayer?.stopPlay(); + TencentImPlugin.removeListener(parseMessage); + TencentImPlugin.logout(); + DPrint.printLongJson('用户退出'); super.dispose(); } diff --git a/lib/pages/live/models/tencent_im_user_model.dart b/lib/pages/live/models/tencent_im_user_model.dart new file mode 100644 index 0000000..764df0b --- /dev/null +++ b/lib/pages/live/models/tencent_im_user_model.dart @@ -0,0 +1,22 @@ +class TencentIMUserModel { + String identifier; + String sign; + + TencentIMUserModel({this.identifier, this.sign}); + + TencentIMUserModel.empty() { + identifier = ''; + sign = ''; + } + TencentIMUserModel.fromJson(Map json) { + identifier = json['identifier']; + sign = json['sign']; + } + + Map toJson() { + final Map data = new Map(); + data['identifier'] = this.identifier; + data['sign'] = this.sign; + return data; + } +} diff --git a/lib/pages/live/sub_page/live_stream_page.dart b/lib/pages/live/sub_page/live_stream_page.dart index fefad34..f997104 100644 --- a/lib/pages/live/sub_page/live_stream_page.dart +++ b/lib/pages/live/sub_page/live_stream_page.dart @@ -5,7 +5,6 @@ import 'package:recook/constants/api.dart'; import 'package:recook/constants/header.dart'; import 'package:recook/manager/http_manager.dart'; import 'package:recook/pages/live/live_stream/live_stream_view_page.dart'; -import 'package:recook/pages/live/models/follow_list_model.dart'; import 'package:recook/pages/live/models/live_attention_list_model.dart'; import 'package:recook/pages/live/models/live_list_model.dart'; import 'package:recook/utils/custom_route.dart'; diff --git a/lib/pages/live/tencent_im/tencent_im_tool.dart b/lib/pages/live/tencent_im/tencent_im_tool.dart new file mode 100644 index 0000000..be6ba65 --- /dev/null +++ b/lib/pages/live/tencent_im/tencent_im_tool.dart @@ -0,0 +1,35 @@ +import 'package:recook/constants/api.dart'; +import 'package:recook/constants/header.dart'; +import 'package:recook/manager/http_manager.dart'; +import 'package:recook/manager/user_manager.dart'; +import 'package:recook/pages/live/models/tencent_im_user_model.dart'; +import 'package:tencent_im_plugin/tencent_im_plugin.dart'; + +class TencentIMTool { + static TencentIMUserModel model; + static int loginCount = 0; + static Future login() async { + if (model == null) model = await getTencentImUser(); + await TencentImPlugin.initStorage(identifier: model.identifier); + await TencentImPlugin.login( + identifier: model.identifier, + userSig: model.sign, + ).catchError((e) { + loginCount++; + model = null; + if (loginCount < 20) login(); + }); + } + + static Future getTencentImUser() async { + final bool isLogin = UserManager.instance.haveLogin; + ResultData resultData = await HttpManager.post( + isLogin ? LiveAPI.tencentUser : LiveAPI.tencentUserNotLogin, + {}, + ); + if (resultData?.data['data'] == null) + return TencentIMUserModel.empty(); + else + return TencentIMUserModel.fromJson(resultData?.data['data']); + } +} diff --git a/pubspec.lock b/pubspec.lock index 111eaa4..a2316b3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -989,6 +989,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0-nullsafety.1" + tencent_im_plugin: + dependency: "direct main" + description: + name: tencent_im_plugin + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.44" tencent_live_fluttify: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 40ea8c6..24afdd1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -179,6 +179,8 @@ dependencies: #腾讯直播 tencent_live_fluttify: ^0.2.0+1 + #腾讯IM + tencent_im_plugin: ^0.2.44 #瀑布流 waterfall_flow: 2.0.3 #相机