From 92bcb5d64b56c96643c33a518ba450a315671d73 Mon Sep 17 00:00:00 2001 From: jackning <270580156@qq.com> Date: Fri, 20 Nov 2020 20:43:22 +0800 Subject: [PATCH] update 0.3.0 --- README.md | 3 +- bytedesk_demo/README.md | 5 +- bytedesk_demo/android/app/build.gradle | 2 +- bytedesk_demo/android/build.gradle | 8 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- bytedesk_demo/android/settings_aar.gradle | 1 + bytedesk_demo/assets/audio/bytedesk_alarm.wav | Bin 0 -> 9996 bytes .../assets/audio/bytedesk_dingdong.wav | Bin 0 -> 42932 bytes .../assets/audio/bytedesk_newmsg.wav | Bin 0 -> 14014 bytes .../assets/audio/bytedesk_waiting.wav | Bin 0 -> 11708 bytes .../feedback/mine_feedback_add_image.png | Bin 0 -> 494 bytes .../images/feedback/mine_feedback_ic_del.png | Bin 0 -> 326 bytes bytedesk_demo/ios/Podfile | 4 +- bytedesk_demo/lib/main.dart | 79 +++++++++++------- bytedesk_demo/lib/page/chat_type_page.dart | 17 +++- bytedesk_demo/lib/page/setting_page.dart | 48 +++++------ bytedesk_demo/lib/page/user_info_page.dart | 7 +- bytedesk_demo/pubspec.yaml | 13 ++- 18 files changed, 121 insertions(+), 68 deletions(-) create mode 100644 bytedesk_demo/android/settings_aar.gradle create mode 100644 bytedesk_demo/assets/audio/bytedesk_alarm.wav create mode 100644 bytedesk_demo/assets/audio/bytedesk_dingdong.wav create mode 100644 bytedesk_demo/assets/audio/bytedesk_newmsg.wav create mode 100644 bytedesk_demo/assets/audio/bytedesk_waiting.wav create mode 100755 bytedesk_demo/assets/images/feedback/mine_feedback_add_image.png create mode 100755 bytedesk_demo/assets/images/feedback/mine_feedback_ic_del.png diff --git a/README.md b/README.md index f560bff..bbd15eb 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,11 @@ - 对接APP用户信息(昵称/头像) - 获取当前客服在线状态 - 获取历史会话 -- 消息提示设置 +- 消息提示音/振动设置 - 消息送达/已读 - 消息撤回 - 输入状态(对方正在输入) +- 发送/播放视频 diff --git a/bytedesk_demo/README.md b/bytedesk_demo/README.md index 48a9b2d..5c7e603 100644 --- a/bytedesk_demo/README.md +++ b/bytedesk_demo/README.md @@ -12,10 +12,11 @@ - 对接APP用户信息(昵称/头像) - 获取当前客服在线状态 - 获取历史会话 -- 消息提示设置 +- 消息提示音/振动设置 - 消息送达/已读 - 消息撤回 - 输入状态(对方正在输入) +- 发送/播放视频 @@ -29,7 +30,7 @@ - [注册账号](https://www.bytedesk.com/antv/user/login) - 获取appkey,登录后台->客服管理->渠道管理->添加应用->appkey - 获取subDomain,也即企业号:登录后台->客服管理->客服账号->企业号 -- 获取技能组workGroupWid +- 获取技能组workGroupWid, 登录后台->技能组->wid ### 第二步:匿名登录 diff --git a/bytedesk_demo/android/app/build.gradle b/bytedesk_demo/android/app/build.gradle index e79fff5..27ee615 100644 --- a/bytedesk_demo/android/app/build.gradle +++ b/bytedesk_demo/android/app/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 28 + compileSdkVersion 29 lintOptions { disable 'InvalidPackage' diff --git a/bytedesk_demo/android/build.gradle b/bytedesk_demo/android/build.gradle index e0d7ae2..1209e4c 100644 --- a/bytedesk_demo/android/build.gradle +++ b/bytedesk_demo/android/build.gradle @@ -1,21 +1,27 @@ buildscript { repositories { + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } +// maven { url 'https://maven.aliyun.com/repository/jcenter' } google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:4.1.0' } } allprojects { repositories { +// mavenCentral() + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } +// maven { url 'https://maven.aliyun.com/repository/jcenter' } google() jcenter() } } + rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" diff --git a/bytedesk_demo/android/gradle/wrapper/gradle-wrapper.properties b/bytedesk_demo/android/gradle/wrapper/gradle-wrapper.properties index 296b146..e5e73da 100644 --- a/bytedesk_demo/android/gradle/wrapper/gradle-wrapper.properties +++ b/bytedesk_demo/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip diff --git a/bytedesk_demo/android/settings_aar.gradle b/bytedesk_demo/android/settings_aar.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/bytedesk_demo/android/settings_aar.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/bytedesk_demo/assets/audio/bytedesk_alarm.wav b/bytedesk_demo/assets/audio/bytedesk_alarm.wav new file mode 100644 index 0000000000000000000000000000000000000000..61894f4b775b8b6569dae2e03fc92c7c71059108 GIT binary patch literal 9996 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 Gxc)B*e`TKl literal 0 HcmV?d00001 diff --git a/bytedesk_demo/assets/audio/bytedesk_dingdong.wav b/bytedesk_demo/assets/audio/bytedesk_dingdong.wav new file mode 100644 index 0000000000000000000000000000000000000000..4ca952e1246b0ba118cd3ddea3213af382b7b9d8 GIT binary patch literal 42932 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 nt@GgT3N>m}FAzPb�KuG5yCBXc#kUM9ipOV+O?xC*=PDI4p-h literal 0 HcmV?d00001 diff --git a/bytedesk_demo/assets/audio/bytedesk_waiting.wav b/bytedesk_demo/assets/audio/bytedesk_waiting.wav new file mode 100644 index 0000000000000000000000000000000000000000..3e246749e5840649251aad3a9e0b566aaf6c03d9 GIT binary patch literal 11708 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 TZvFI6nf#CN{+8FIcW?X~gPF|l literal 0 HcmV?d00001 diff --git a/bytedesk_demo/assets/images/feedback/mine_feedback_add_image.png b/bytedesk_demo/assets/images/feedback/mine_feedback_add_image.png new file mode 100755 index 0000000000000000000000000000000000000000..3e7c5d25322e5c3c7e56a3554a222719fe72617a GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y@91r}zYNPTD)8<3I<@Ck8!hYBuTy7c_{^Xu2I zU%7JS(W6J%*H)SXRkD->`2{OoaF!Z*L#;WHu0KNNg`)C}dIp zAn=-HW5x8Y>WJrI7n+?OZfgTe~DWM4f9XGid literal 0 HcmV?d00001 diff --git a/bytedesk_demo/assets/images/feedback/mine_feedback_ic_del.png b/bytedesk_demo/assets/images/feedback/mine_feedback_ic_del.png new file mode 100755 index 0000000000000000000000000000000000000000..3d5e595ec1cbf671c29363485b21773b697581c5 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^rXbA03?#2v1UmsK%K)Dc*O@bCe){xj@#4im1{{3& z@Zsy%uL~9|SiXGuzkmPMtXTt;diU<#$B!R3ZrliD|NsC0aki%_&=8@LAivgU}z z({Qiz4s{lf1v7ly2DP)smi&B5(-1Vv}^>jCfEtqv9e1T?RTVv37 zQIBOpCqot`$g)ma>0&e$%u|}Vs`TEyKi2ktj`(j`T_1W{bN*9S{>NNj^LE_y1G<{Q M)78&qol`;+0ID{WhX4Qo literal 0 HcmV?d00001 diff --git a/bytedesk_demo/ios/Podfile b/bytedesk_demo/ios/Podfile index f7d6a5e..7529df8 100644 --- a/bytedesk_demo/ios/Podfile +++ b/bytedesk_demo/ios/Podfile @@ -1,5 +1,7 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +platform :ios, '10.0' +# added by jackning, 20200929 +use_frameworks! # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/bytedesk_demo/lib/main.dart b/bytedesk_demo/lib/main.dart index e3e51c1..e62c5c3 100644 --- a/bytedesk_demo/lib/main.dart +++ b/bytedesk_demo/lib/main.dart @@ -1,29 +1,25 @@ import 'package:bytedesk_kefu/bytedesk_kefu.dart'; import 'package:bytedesk_kefu/util/bytedesk_constants.dart'; import 'package:bytedesk_kefu/util/bytedesk_events.dart'; +import 'package:bytedesk_kefu/util/bytedesk_utils.dart'; +import 'package:bytedesk_demo/notification/custom_notification.dart'; import 'package:bytedesk_demo/page/chat_type_page.dart'; import 'package:bytedesk_demo/page/history_thread_page.dart'; import 'package:bytedesk_demo/page/online_status_page.dart'; -// import 'package:bytedesk_demo/page/setting_page.dart'; +import 'package:bytedesk_demo/page/setting_page.dart'; import 'package:bytedesk_demo/page/user_info_page.dart'; -import 'package:bytedesk_kefu/util/bytedesk_utils.dart'; import 'package:overlay_support/overlay_support.dart'; import 'package:flutter/material.dart'; - -import 'notification/custom_notification.dart'; +import 'package:vibration/vibration.dart'; +import 'package:audioplayers/audio_cache.dart'; void main() { // runApp(MyApp()); - // runApp(MaterialApp( - // debugShowCheckedModeBanner: false, // 去除右上角debug的标签 - // home: MyApp(), - // )); runApp(OverlaySupport( - child: MaterialApp( - debugShowCheckedModeBanner: false, // 去除右上角debug的标签 - home: MyApp(), - ) - )); + child: MaterialApp( + debugShowCheckedModeBanner: false, // 去除右上角debug的标签 + home: MyApp(), + ))); // 参考文档:https://github.com/Bytedesk/bytedesk-flutter // 管理后台:https://www.bytedesk.com/antv/user/login @@ -45,8 +41,7 @@ class MyApp extends StatefulWidget { class _MyAppState extends State with WidgetsBindingObserver { // String _title = '萝卜丝客服Demo'; - // 第二步:到 客服管理->技能组-有一列 ‘唯一ID(wId)’, 默认设置工作组wid - // String _workGroupWid = "201807171659201"; + AudioCache audioCache = AudioCache(); // @override void initState() { @@ -81,6 +76,7 @@ class _MyAppState extends State with WidgetsBindingObserver { title: Text('用户信息'), // 自定义用户资料,设置 trailing: Icon(Icons.keyboard_arrow_right), onTap: () { + // 需要首先调用anonymousLogin之后,再调用设置用户信息接口 Navigator.of(context) .push(new MaterialPageRoute(builder: (context) { return new UserInfoPage(); @@ -123,16 +119,16 @@ class _MyAppState extends State with WidgetsBindingObserver { // // TODO: 意见反馈 // }, // ), - // ListTile( - // title: Text('消息设置'), - // trailing: Icon(Icons.keyboard_arrow_right), - // onTap: () { - // Navigator.of(context) - // .push(new MaterialPageRoute(builder: (context) { - // return new SettingPage(); - // })); - // }, - // ) + ListTile( + title: Text('消息设置'), + trailing: Icon(Icons.keyboard_arrow_right), + onTap: () { + Navigator.of(context) + .push(new MaterialPageRoute(builder: (context) { + return new SettingPage(); + })); + }, + ) ], ).toList()), ); @@ -157,9 +153,30 @@ class _MyAppState extends State with WidgetsBindingObserver { }); } }); - // 监听消息 + // 监听消息,开发者可在此决定是否振动或播放提示音声音 bytedeskEventBus.on().listen((event) { // print('receive message:' + event.message.content); + // 1. 首先将example/assets/audio文件夹中文件拷贝到自己项目;2.在自己项目pubspec.yaml中添加assets + // 播放发送消息提示音 + if (BytedeskKefu.getPlayAudioOnSendMessage() && event.message.isSend == 1) { + print('play send audio'); + // 修改为自己项目中语音文件路径 + audioCache.play('audio/bytedesk_dingdong.wav'); + } + if (event.message.isSend == 1) { + // 自己发送的消息,直接返回 + return; + } + // 接收消息播放提示音 + if (BytedeskKefu.getPlayAudioOnReceiveMessage() && event.message.isSend == 0) { + print('play receive audio'); + audioCache.play('audio/bytedesk_dingdong.wav'); + } + // 振动 + if (BytedeskKefu.getVibrateOnReceiveMessage() && event.message.isSend == 0) { + print('should vibrate'); + vibrate(); + } if (event.message.type == BytedeskConstants.MESSAGE_TYPE_TEXT) { print('文字消息: ' + event.message.content); // 判断当前是否客服页面,如否,则显示顶部通知栏 @@ -176,9 +193,10 @@ class _MyAppState extends State with WidgetsBindingObserver { ); }, duration: Duration(milliseconds: 4000)); } - } else if (event.message.type == BytedeskConstants.MESSAGE_TYPE_IMAGE) { print('图片消息:' + event.message.imageUrl); + } else if (event.message.type == BytedeskConstants.MESSAGE_TYPE_VIDEO) { + print('视频消息:' + event.message.imageUrl); } else { print('其他类型消息'); } @@ -202,10 +220,15 @@ class _MyAppState extends State with WidgetsBindingObserver { // } // } + void vibrate() async { + if (await Vibration.hasVibrator()) { + Vibration.vibrate(); + } + } + @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } - } diff --git a/bytedesk_demo/lib/page/chat_type_page.dart b/bytedesk_demo/lib/page/chat_type_page.dart index 4df1643..05e09de 100644 --- a/bytedesk_demo/lib/page/chat_type_page.dart +++ b/bytedesk_demo/lib/page/chat_type_page.dart @@ -13,8 +13,10 @@ class ChatTypePage extends StatefulWidget { } class _ChatTypePageState extends State { + // 第二步:到 客服管理->技能组-有一列 ‘唯一ID(wId)’, 默认设置工作组wid // 说明:一个技能组可以分配多个客服,访客会按照一定的规则分配给组内的各个客服账号 - String _workGroupWid = "201807171659201"; + String _workGroupWid = "201807171659201"; // 默认人工 + String _workGroupWidRobot = "201809061716221"; // 默认机器人 // 说明:直接发送给此一个客服账号,一对一会话 String _agentUid = "201808221551193"; // @@ -33,7 +35,14 @@ class _ChatTypePageState extends State { title: Text('技能组客服'), trailing: Icon(Icons.keyboard_arrow_right), onTap: () { - BytedeskKefu.startWorkGroupChat(context, _workGroupWid, "技能组客服"); + BytedeskKefu.startWorkGroupChat(context, _workGroupWid, "技能组客服-默认人工"); + }, + ), + ListTile( + title: Text('技能组客服-机器人'), + trailing: Icon(Icons.keyboard_arrow_right), + onTap: () { + BytedeskKefu.startWorkGroupChat(context, _workGroupWidRobot, "技能组客服-默认机器人"); }, ), ListTile( @@ -52,14 +61,14 @@ class _ChatTypePageState extends State { "categoryCode": "100010003", "client": "flutter" }); - BytedeskKefu.startWorkGroupChatShop(context, _workGroupWid, "技能组客服", custom); + BytedeskKefu.startWorkGroupChatShop(context, _workGroupWid, "技能组客服-电商", custom); }, ), ListTile( title: Text('技能组客服-附言'), trailing: Icon(Icons.keyboard_arrow_right), onTap: () { - BytedeskKefu.startWorkGroupChatPostscript(context, _workGroupWid, "技能组客服", "随便说点什么吧,我会自动发送给客服"); + BytedeskKefu.startWorkGroupChatPostscript(context, _workGroupWid, "技能组客服-附言", "随便说点什么吧,我会自动发送给客服"); }, ), Container( diff --git a/bytedesk_demo/lib/page/setting_page.dart b/bytedesk_demo/lib/page/setting_page.dart index 7d00c32..6eac97c 100644 --- a/bytedesk_demo/lib/page/setting_page.dart +++ b/bytedesk_demo/lib/page/setting_page.dart @@ -11,14 +11,14 @@ class SettingPage extends StatefulWidget { } class _SettingPageState extends State { - // bool _playAudioOnSendMessage = false; - // bool _playAudioOnReceiveMessage = false; + bool _playAudioOnSendMessage = false; + bool _playAudioOnReceiveMessage = false; bool _vibrateOnReceiveMessage = false; // @override void initState() { - // _playAudioOnSendMessage = BytedeskKefu.getPlayAudioOnSendMessage(); - // _playAudioOnReceiveMessage = BytedeskKefu.getPlayAudioOnReceiveMessage(); + _playAudioOnSendMessage = BytedeskKefu.getPlayAudioOnSendMessage(); + _playAudioOnReceiveMessage = BytedeskKefu.getPlayAudioOnReceiveMessage(); _vibrateOnReceiveMessage = BytedeskKefu.getVibrateOnReceiveMessage(); super.initState(); } @@ -34,26 +34,26 @@ class _SettingPageState extends State { children: ListTile.divideTiles( context: context, tiles: [ - // ListTileSwitch( - // value: _playAudioOnSendMessage, - // onChanged: (value) { - // setState(() { - // _playAudioOnSendMessage = value; - // }); - // BytedeskKefu.setPlayAudioOnSendMessage(value); - // }, - // title: Text('TODO: 发送消息时播放声音'), - // ), - // ListTileSwitch( - // value: _playAudioOnReceiveMessage, - // onChanged: (value) { - // setState(() { - // _playAudioOnReceiveMessage = value; - // }); - // BytedeskKefu.setPlayAudioOnReceiveMessage(value); - // }, - // title: Text('TODO: 收到消息时播放声音'), - // ), + ListTileSwitch( + value: _playAudioOnSendMessage, + onChanged: (value) { + setState(() { + _playAudioOnSendMessage = value; + }); + BytedeskKefu.setPlayAudioOnSendMessage(value); + }, + title: Text('发送消息时播放声音'), + ), + ListTileSwitch( + value: _playAudioOnReceiveMessage, + onChanged: (value) { + setState(() { + _playAudioOnReceiveMessage = value; + }); + BytedeskKefu.setPlayAudioOnReceiveMessage(value); + }, + title: Text('收到消息时播放声音'), + ), ListTileSwitch( value: _vibrateOnReceiveMessage, onChanged: (value) { diff --git a/bytedesk_demo/lib/page/user_info_page.dart b/bytedesk_demo/lib/page/user_info_page.dart index b289d1c..d808349 100644 --- a/bytedesk_demo/lib/page/user_info_page.dart +++ b/bytedesk_demo/lib/page/user_info_page.dart @@ -1,7 +1,9 @@ import 'package:bytedesk_kefu/bytedesk_kefu.dart'; +import 'package:bytedesk_kefu/util/bytedesk_constants.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; +// 需要首先调用anonymousLogin之后,再调用此接口 // 自定义用户信息接口-对接APP用户信息 class UserInfoPage extends StatefulWidget { UserInfoPage({Key key}) : super(key: key); @@ -12,8 +14,7 @@ class UserInfoPage extends StatefulWidget { class _UserInfoPageState extends State { String _nickname = ''; - String _avatar = - 'https://chainsnow.oss-cn-shenzhen.aliyuncs.com/avatars/chrome_default_avatar.png'; + String _avatar = BytedeskConstants.DEFAULT_AVATA; @override void initState() { _getProfile(); @@ -41,7 +42,7 @@ class _UserInfoPageState extends State { ), ListTile( leading: Image.network( - _avatar ?? 'https://chainsnow.oss-cn-shenzhen.aliyuncs.com/avatars/chrome_default_avatar.png', + _avatar ?? BytedeskConstants.DEFAULT_AVATA, height: 30, width: 30, ), diff --git a/bytedesk_demo/pubspec.yaml b/bytedesk_demo/pubspec.yaml index f09fc22..94189cd 100644 --- a/bytedesk_demo/pubspec.yaml +++ b/bytedesk_demo/pubspec.yaml @@ -33,13 +33,19 @@ dependencies: list_tile_switch: ^0.0.2 # 应用内-顶部通知栏 https://pub.dev/packages/overlay_support/ overlay_support: ^1.0.5 + # 播放提示音 https://pub.dev/packages/audioplayers + audioplayers: ^0.17.0 + # 振动 https://pub.dev/packages/vibration + # 针对报错fatal error: 'vibration/vibration-Swift.h' file not found #import , ld: library not found for -lvibration + # 请在ios/Podfile中添加:use_frameworks! + vibration: ^1.7.2 # https://pub.dev/packages/bytedesk_kefu - bytedesk_kefu: ^0.2.6 + bytedesk_kefu: ^0.3.0 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.3 + cupertino_icons: ^1.0.0 dev_dependencies: flutter_test: @@ -60,6 +66,9 @@ flutter: # assets: # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg + assets: + - assets/audio/ + - assets/images/feedback/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware.