Compare commits

..

200 Commits

Author SHA1 Message Date
Brett
0dec034a55 Adjust some fields and APIs. 2023-11-17 15:05:27 +08:00
Brett
2b3f062e5c chore: Adjust the default values of some properties. 2023-11-16 18:28:39 +08:00
Brett
a4b52f5895 fix: Fixed some parameter errors. 2023-11-16 16:20:54 +08:00
Brett
bf9cd3ca21 chore: change log. 2023-11-11 09:02:01 +08:00
Brett
0e1473ff0f feat: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.4.0 2023-11-10 22:28:19 +08:00
Brett
7e1969d8ad Update README.md 2023-11-10 09:49:10 +08:00
Brett
e6b479726b Update README.md 2023-11-07 17:18:09 +08:00
Brett
2aec080e2f add 'getConversationIDBySessionType' 2023-11-01 14:18:09 +08:00
Brett
0ef41147fd add 'localEx' 2023-11-01 12:09:33 +08:00
Brett
cd506801cf feat: add 'hideAllConversations', 'updateFcmToken' 2023-11-01 11:41:18 +08:00
Brett
2cafa6bab8 fix: 'unsubscribeUsersStatus' 2023-10-26 10:21:57 +08:00
Brett
ceba9e827f Add some APIs. 2023-10-19 19:08:54 +08:00
Brett
4fef487562 fix: Fixed some issues. 2023-10-17 17:01:56 +08:00
Brett
dc61665f13 Merge branch 'main' of https://github.com/OpenIMSDK/Open-IM-SDK-Flutter 2023-10-17 16:09:29 +08:00
Brett
67251ae7ea fix: Fixed some issues. 2023-10-17 16:09:19 +08:00
Brett
908d7dd7e7 Update README.md 2023-10-13 15:28:35 +08:00
Brett
d07495fff6 Update README.md 2023-10-12 18:08:04 +08:00
Brett
2f8b019d83 Update README.md 2023-10-12 18:06:51 +08:00
Oliver Wong
4a72a37e2b Merge pull request #122 from openimsdk/patch-1
Update README.md
2023-10-12 16:24:06 +08:00
Oliver Wong
b6a71d0b6f Update README.md
Update README.md
2023-10-12 16:23:45 +08:00
std-s
627ee54a67 feat: Optimize comments and field names. 2023-10-12 15:01:38 +08:00
Brett
cc6d164985 Update README.md 2023-10-11 10:33:42 +08:00
std-s
29b66de9bf Update README.zh-cn.md 2023-09-12 17:36:34 +08:00
std-s
d419351170 Update CHANGELOG.md 2023-09-11 09:56:26 +08:00
std-s
8cd7278b50 [Update] Bug fixes and performance enhancements. 2023-09-08 21:38:42 +08:00
std-s
46cc7ff229 [Update] Bug fixes and performance enhancements. 2023-09-08 21:02:23 +08:00
std-s
1356f13fb3 [Fix] Access to input parameters for anyone’s information. 2023-09-04 12:28:43 +08:00
std-s
1c7f1e7c19 [Update] Bug fixes and performance enhancements. 2023-09-03 23:04:24 +08:00
skiffer-git
034f95e96e Update README.md 2023-08-22 18:34:01 +08:00
skiffer-git
946474ad02 Update README.md 2023-08-22 18:32:52 +08:00
skiffer-git
6bd8ec0d2b Update README.md 2023-08-22 18:32:29 +08:00
std-s
de511cf90d Update README.md 2023-08-21 10:24:40 +08:00
std-s
a9f2e267cf [Update] Add user online status change callback. 2023-08-18 20:04:29 +08:00
std-s
642cc61a2e [Update] Bug fixes and performance enhancements. 2023-08-18 19:44:18 +08:00
std-s
de8c192055 fix: The setting is set to the top and cannot be used. 2023-08-16 19:32:08 +08:00
std-s
05cb6c430c Update openim.dart 2023-08-14 17:33:11 +08:00
std-s
b07d104799 [Update] new version pre. 2023-08-11 21:08:53 +08:00
std-s
207e0807e9 [Update] new version. 2023-08-11 20:31:11 +08:00
std-s
373e4ddc82 [Fix] Add deinitialization API. 2023-08-11 16:36:05 +08:00
std-s
b3c0b16092 [Update] Add deinitialization function. 2023-08-11 15:38:33 +08:00
std-s
8c50207f7c [Update] version. 2023-07-31 14:44:29 +08:00
std-s
3bf9570d8d [Update] Fix some problems and enhance performance. 2023-07-31 14:28:44 +08:00
std-s
2a8a6ff7d9 Update README.md 2023-07-25 17:39:46 +08:00
std-s
9c8b9990c9 Update README.md 2023-07-25 17:37:13 +08:00
std-s
705863ba66 [Update] Update the version of aar. 2023-07-24 11:39:01 +08:00
std-s
fd39b328bc [Fix] Adjust the monitoring function parameters for uploading files. 2023-07-24 11:24:24 +08:00
std-s
90b96cb413 [Update] Update dependencies for iOS. 2023-07-19 18:42:10 +08:00
std-s
7894327b2c [Fix] The type of the formal parameters of the callback function related to uploading files. 2023-07-19 18:39:35 +08:00
skiffer-git
96e90d3c0a Replace WeChat image links with COS (Cloud Object Storage). 2023-07-15 12:01:08 +08:00
hrxiang
8cc844a408 release-3.0.0 2023-07-14 12:33:36 +08:00
hrxiang
9856ac8281 release-3.0.0 2023-07-14 12:28:37 +08:00
hrxiang
c9fd5d6dfb 3.0 2023-07-13 17:43:20 +08:00
hrxiang
056581f52e 3.0 2023-07-13 15:46:01 +08:00
hrxiang
af0ca0932f uploadComplete -> uploadProgress 2023-07-12 18:49:55 +08:00
hrxiang
c0618458fa putFile replace to uploadFile 2023-07-12 18:24:12 +08:00
hrxiang
27eb0f78d2 Update error code 2023-07-12 16:41:10 +08:00
hrxiang
169da36d0b Fix getLoginStatus 2023-07-07 19:13:52 +08:00
hrxiang
6bd36c424a 1.Delete Organization
2.Delete WorkMoments
3.Delete Signaling
2023-07-07 13:52:22 +08:00
hrxiang
7995c4af1d Update to 3.0 2023-07-04 11:40:39 +08:00
hrxiang
5bdb9879a7 Login to add login status judgment 2023-07-03 15:04:30 +08:00
hrxiang
79cbae718c open 3.0 2023-06-30 18:26:50 +08:00
hrxiang
61fb9b7dd9 open 3.0 2023-06-30 17:03:31 +08:00
std-s
bd364ea2fd [Update] core. 2023-06-29 20:08:39 +08:00
std-s
d43259d171 Merge branch 'open_3.0' of https://github.com/OpenIMSDK/Open-IM-SDK-Flutter into open_3.0 2023-06-29 19:56:01 +08:00
std-s
ce0c6ff832 [Update] iOS。 2023-06-29 19:55:36 +08:00
hrxiang
1f6312d9d3 open 3.0 2023-06-29 19:39:34 +08:00
hrxiang
63e5ecf896 core-sdk:3.0.0-beta01 2023-06-29 19:36:44 +08:00
hrxiang
70a46ed151 open 3.0 2023-06-29 16:48:59 +08:00
hrxiang
f04d45f6b8 3.0 2023-05-16 18:49:24 +08:00
hrxiang
80c79d0fc6 test-3.0 2023-05-16 15:08:41 +08:00
hrxiang
4d8ba65f9b 2.3.5+4 2023-05-15 18:45:46 +08:00
hrxiang
9df556b837 2.3.5+4 2023-05-08 18:55:09 +08:00
hrxiang
96d6b755cd 2.3.5+3 2023-04-24 11:11:52 +08:00
hrxiang
3af726a6f7 Fix bug 2023-03-17 18:38:43 +08:00
hrxiang
041d6656bc Fix bug 2023-03-13 11:48:38 +08:00
hrxiang
43afb8775a Fix bug 2023-03-10 15:08:33 +08:00
hrxiang
39727feb8a Fix bug 2023-03-08 15:52:16 +08:00
hrxiang
c6d1669bdd 添加aar包本地依赖方式说明 2023-03-06 18:37:39 +08:00
hrxiang
02202051e1 添加aar包本地依赖方式说明 2023-03-06 18:36:38 +08:00
hrxiang
d0a4530314 New add 2023-03-03 15:17:40 +08:00
hrxiang
958c118e84 Fix bug for signaling 2023-03-01 11:44:14 +08:00
hrxiang
cdef7ffda8 Fix bug callback 'onUserTokenExpired' 2023-02-20 16:34:38 +08:00
hrxiang
bac4bd0884 Fix bug 2023-02-20 15:29:57 +08:00
hrxiang
377b07ef05 Fix bug 2023-02-20 09:33:08 +08:00
hrxiang
025487fbf3 Fix bug 2023-02-09 14:31:25 +08:00
hrxiang
ba3767da42 Fix bug 2023-02-08 09:53:39 +08:00
hrxiang
fc6fd3dd93 Fix bug 2023-02-08 09:45:53 +08:00
hrxiang
c6d9815e64 Fix bug 2023-01-18 10:48:52 +08:00
hrxiang
8e0c736d29 Merge pull request #105 from johnzerTang/main
feat:补充conversation_info的遗漏
2023-01-16 09:35:35 +08:00
johnzer
15854a2c27 feat:补充conversation_info的遗漏 2023-01-09 16:27:48 +08:00
hrxiang
3e1ee249c9 Fix bug 2023-01-03 16:25:08 +08:00
hrxiang
29eac1bf91 Fix bug 2022-12-30 18:58:57 +08:00
skiffer-git
bea820ff27 Update README.md 2022-12-14 10:36:02 +08:00
hrxiang
a85062ce79 Fix bug 2022-12-12 10:51:20 +08:00
hrxiang
98b2774dc1 Fix bug 2022-12-09 16:45:25 +08:00
hrxiang
e823df62a8 Fix bug 2022-12-09 15:08:27 +08:00
hrxiang
2c40b626e4 Fix bug 2022-12-09 11:25:44 +08:00
hrxiang
3b5f47c9f0 V2.3.5 2022-12-08 12:05:21 +08:00
hrxiang
4c540fbff5 Update 2022-12-02 10:50:48 +08:00
hrxiang
b8a51374a3 Update 2022-11-25 17:03:50 +08:00
hrxiang
099cb9849a Merge branch 'main' of https://github.com/OpenIMSDK/Open-IM-SDK-Flutter 2022-11-16 16:46:35 +08:00
hrxiang
025334d32f Fix bug 2022-11-16 16:45:12 +08:00
hrxiang
5adc50b963 Merge pull request #102 from yohom/main
fix: 所有的设置Listener方法都调用result.success(null), 否则dart端的Future会一直挂起不返回.
2022-11-16 16:42:41 +08:00
yohom
ebbe5c882f fix: 所有的设置Listener方法都调用result.success(null), 否则dart端的Future会一直挂起不返回. 2022-11-16 16:28:48 +08:00
hrxiang
eb3361c4b3 Fix bug 2022-11-14 14:28:33 +08:00
hrxiang
9c5aa56609 Fix bug 2022-11-11 14:22:17 +08:00
hrxiang
3e03460300 Fix bug 2022-11-08 12:04:09 +08:00
hrxiang
788ab524c2 Fix bug 2022-11-08 11:22:44 +08:00
hrxiang
eed59f468c Fix bug 2022-11-07 10:32:05 +08:00
hrxiang
d758f3fca1 Fix bug 2022-10-31 10:27:54 +08:00
hrxiang
b8ee9276a2 Add some new function 2022-10-25 11:45:30 +08:00
hrxiang
a77c86e87a Fix bug 2022-10-09 13:55:47 +08:00
hrxiang
c99d1e4d67 Fix bug 2022-10-09 13:54:26 +08:00
hrxiang
b53d4dfcfd Fix bug 2022-10-08 18:53:29 +08:00
hrxiang
bb49d6b27a Core sdk upgrade to 2.3.4 2022-09-30 17:29:22 +08:00
hrxiang
2b78f83b20 Core sdk upgrade to 2.3.4 2022-09-30 17:28:30 +08:00
hrxiang
38a899d32c Core sdk upgrade to 2.3.3 2022-09-20 11:04:58 +08:00
hrxiang
0a0635bb71 2.3.2 2022-09-16 09:37:21 +08:00
xianghr
c44575ec0e Merge branch 'main' of https://github.com/OpenIMSDK/Open-IM-SDK-Flutter 2022-09-09 18:46:27 +08:00
std-s
14624c717b [Update] 2022-09-09 18:44:28 +08:00
xianghr
0900df2aa2 3.2.2 2022-09-09 18:31:06 +08:00
xianghr
cd06c3bb5a 3.2.2 2022-09-09 17:17:31 +08:00
hrxiang
a6aea5496a [Super Group]2.3.0 2022-08-24 11:46:15 +08:00
hrxiang
72111053bd [Super Group]2.3.0 2022-08-03 17:30:40 +08:00
hrxiang
18f099c437 [Super Group] 2022-07-22 12:12:55 +08:00
hrxiang
cff0a4cce2 [Super Group] 2022-07-18 10:13:04 +08:00
hrxiang
e415961d64 [Super Group] 2022-07-15 18:35:48 +08:00
hrxiang
b3aebeb318 [Super Group] 2022-07-15 18:34:21 +08:00
hrxiang
c76bfeb07a [Super Group] 2022-07-15 18:19:17 +08:00
hrxiang
a9343bf892 update 2022-07-05 10:25:59 +08:00
hrxiang
bf354c4103 update 2022-07-04 11:56:02 +08:00
hrxiang
644c52ae0e update 2022-07-01 10:30:42 +08:00
hrxiang
80048bcd18 update 2022-06-30 11:31:21 +08:00
hrxiang
cc6c1bdc22 update 2022-06-30 09:56:32 +08:00
hrxiang
7233b2e298 update 2022-06-29 16:40:22 +08:00
hrxiang
cd61ebba7f update 2022-06-28 09:53:54 +08:00
hrxiang
3a294dd856 update 2022-06-28 09:50:04 +08:00
hrxiang
45e0c82ea3 update 2022-06-27 18:25:55 +08:00
hrxiang
2de606d13e update 2022-06-27 18:23:33 +08:00
hrxiang
7a68e13398 update 2022-06-27 18:20:00 +08:00
hrxiang
4132338633 update 2022-06-27 18:01:31 +08:00
hrxiang
485bf58f14 Merge branch 'main' of https://github.com/OpenIMSDK/Open-IM-SDK-Flutter 2022-06-27 17:55:24 +08:00
hrxiang
6ad47216fb update 2022-06-27 17:55:18 +08:00
hrxiang
3c62315cfd Update README.zh-cn.md 2022-06-27 17:54:46 +08:00
hrxiang
7247f6b982 update 2022-06-27 17:40:04 +08:00
hrxiang
6a771f8035 update 2022-06-24 15:28:47 +08:00
hrxiang
4726055b6f update 2022-06-24 15:22:44 +08:00
hrxiang
2a9d4a0587 update 2022-06-24 11:05:29 +08:00
hrxiang
cce41e0991 update 2022-06-21 18:40:28 +08:00
hrxiang
599c25b099 update 2022-06-21 14:27:38 +08:00
hrxiang
6c3311cce1 update 2022-06-20 14:25:15 +08:00
hrxiang
9a359ca9a0 update 2022-06-17 10:00:03 +08:00
hrxiang
cc2211c36d update 2022-06-16 19:31:21 +08:00
hrxiang
ccf4d4fec1 update 2022-06-16 19:30:22 +08:00
hrxiang
0b8762a754 update 2022-06-16 19:28:54 +08:00
std-s
28a911022c Update build.gradle 2022-06-16 18:43:29 +08:00
std-s
996281e49a Update build.gradle 2022-06-16 15:43:06 +08:00
hrxiang
e2b546f400 update 2022-06-16 12:18:15 +08:00
hrxiang
8abc8e4399 1.Fix bug </br>
2.New searchOrganization method</br>
3.New searchFriends method</br>
4.New getDepartmentInfo method</br>
5.New setGroupMemberRoleLevel method</br>
2022-06-14 17:42:15 +08:00
hrxiang
ed20b4915a 1.Fix bug </br>
2.New searchOrganization method</br>
3.New searchFriends method</br>
4.New getDepartmentInfo method</br>
5.New setGroupMemberRoleLevel method</br>
2022-06-14 17:40:26 +08:00
hrxiang
8b1f4dc320 Fix bug 2022-06-06 17:22:23 +08:00
hrxiang
f7416290fb Upgrade 2022-06-06 09:27:53 +08:00
hrxiang
f0b28099bf Upgrade 2022-05-25 17:03:53 +08:00
hrxiang
d5d11af7ce Upgrade 2022-05-25 16:21:43 +08:00
hrxiang
9cd717c67c Upgrade 2022-05-25 15:18:22 +08:00
hrxiang
c7218cb94c Upgrade 2022-05-20 10:27:18 +08:00
hrxiang
e4c78e0106 Upgrade 2022-05-19 16:00:10 +08:00
hrxiang
7457f182f3 Upgrade 2022-05-18 16:47:14 +08:00
hrxiang
952cb82417 Upgrade 2022-05-11 17:30:11 +08:00
std-s
3cb2c6d514 [Fix] object is NSNull. 2022-05-10 15:02:18 +08:00
hrxiang
90be2f74ac Upgrade 2022-05-10 10:37:12 +08:00
hrxiang
53ef6c2173 Upgrade 2022-05-10 10:33:39 +08:00
hrxiang
373171aded Fix bug 2022-05-10 10:13:14 +08:00
hrxiang
58702fcbaf Upgrade 2022-05-10 09:56:59 +08:00
hrxiang
8b8c9d5923 Upgrade 2022-04-29 14:14:08 +08:00
hrxiang
d5e3947878 Upgrade 2022-04-28 16:28:13 +08:00
hrxiang
6edf9b74fa Upgrade 2022-04-24 12:12:26 +08:00
hrxiang
fcc8373560 Upgrade 2022-04-08 16:29:08 +08:00
hrxiang
7e8d72929a Upgrade 2022-04-08 14:36:47 +08:00
hrxiang
03fa70c585 Upgrade 2022-04-08 10:55:15 +08:00
hrxiang
8b4a35e6b7 Upgrade 2022-04-07 12:22:38 +08:00
hrxiang
71897bcb4e Upgrade 2022-04-01 18:25:52 +08:00
hrxiang
57340e52a7 New some function 2022-03-31 11:13:36 +08:00
hrxiang
197f0b482f New some function 2022-03-31 11:08:11 +08:00
hrxiang
e009224256 Fix bug 2022-03-30 09:23:41 +08:00
hrxiang
ad0563aee4 Fix bug 2022-03-25 16:39:19 +08:00
hrxiang
d120312ac9 Fix bug 2022-03-25 16:34:06 +08:00
hrxiang
d64b426c90 Fix bug 2022-03-25 16:14:30 +08:00
hrxiang
3a845dc40b Pre publish 2.0.0+4 2022-03-25 15:15:27 +08:00
hrxiang
700265c685 Fix bug 2022-03-21 18:42:29 +08:00
hrxiang
73b9eb776f New add some fuc 2022-03-21 17:17:41 +08:00
hrxiang
372e573ea0 Fix bug 2022-03-18 19:11:30 +08:00
hrxiang
8ea08f9ce6 New add fuc 2022-03-18 18:39:34 +08:00
hrxiang
40b65f52a5 Add signaling function 2022-03-15 16:40:42 +08:00
hrxiang
6c0676fbe5 Add custom emoji message 2022-03-10 17:53:01 +08:00
hrxiang
80152e2314 Fix some one crash 2022-03-04 17:37:27 +08:00
hrxiang
2381d26729 Fix some one crash 2022-03-04 17:36:16 +08:00
hrxiang
b25f0d8547 Update ios framework 2022-03-03 11:47:59 +08:00
hrxiang
f4e7eaf50e Update README.md 2022-03-03 11:42:38 +08:00
hrxiang
f40d4148a8 Update README.md 2022-02-28 14:05:37 +08:00
121 changed files with 6921 additions and 3798 deletions

View File

@@ -15,6 +15,21 @@
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.dart_tool" /> <excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.pub" /> <excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/build" /> <excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/build" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/build" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/build" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/build" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/build" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/ios/.symlinks/plugins/flutter_openim_sdk/example/build" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />

View File

@@ -1,26 +1,25 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Dart SDK"> <library name="Dart SDK">
<CLASSES> <CLASSES>
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/async" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/async" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/cli" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/cli" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/collection" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/collection" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/convert" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/convert" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/core" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/core" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/developer" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/developer" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/ffi" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/ffi" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/html" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/html" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/indexed_db" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/indexed_db" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/io" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/io" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/isolate" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/isolate" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/js" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/js" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/js_util" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/js_util" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/math" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/math" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/mirrors" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/mirrors" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/svg" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/svg" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/typed_data" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/typed_data" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/web_audio" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/web_audio" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/web_gl" /> <root url="file://$PROJECT_DIR$/../../../framework/flutter/bin/cache/dart-sdk/lib/web_gl" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/web_sql" />
</CLASSES> </CLASSES>
<JAVADOC /> <JAVADOC />
<SOURCES /> <SOURCES />

1
.idea/misc.xml generated
View File

@@ -3,4 +3,5 @@
<component name="FrameworkDetectionExcludesConfiguration"> <component name="FrameworkDetectionExcludesConfiguration">
<type id="android" /> <type id="android" />
</component> </component>
<component name="ProjectRootManager" version="2" project-jdk-name="Android API 25 Platform" project-jdk-type="Android SDK" />
</project> </project>

1
.idea/modules.xml generated
View File

@@ -3,6 +3,7 @@
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" filepath="$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" filepath="$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" />
<module fileurl="file://$PROJECT_DIR$/android/flutter_openim_sdk_android.iml" filepath="$PROJECT_DIR$/android/flutter_openim_sdk_android.iml" />
</modules> </modules>
</component> </component>
</project> </project>

View File

@@ -1,3 +1,244 @@
## 3.4.0+1
- Adjust some fields and APIs.
## 3.4.0
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.4.0)
## 3.3.0
- [Bug fixes and performance enhancements.](https://github.com/OpenIMSDK/openim-sdk-core/releases/tag/v3.3.0)
## 3.0.0
- The super update is not compatible with the previous version
## 2.3.5+4
- Fix bug
## 2.3.5+3
- Fix bug for signaling
- Add networkChanged method
- Add setListenerForService method
## 2.3.5+2
- Add onRecvMessageExtensionsAdded method for OnAdvancedMsgListener
- Add addMessageReactionExtensions method for MessageManager
- Add getMessageListSomeReactionExtensions method for MessageManager
- Add isExternal field for MessageManager
- Add isReact method field MessageManager
- Add params isExternalExtensions for initSDK
## 2.3.5+1
- Add birthTime for UserInfo
- Add setMessageKvInfoListener method for MessageManager
- Add setMessageReactionExtensions method for MessageManager
- Add deleteMessageReactionExtensions method for MessageManager
- Add getMessageListReactionExtensions method for MessageManager
- Add onRecvMessageExtensionsChanged method for OnAdvancedMsgListener
- Add onRecvMessageExtensionsDeleted method for OnAdvancedMsgListener
- Add OnMessageKvInfoListener listener
- Add class KeyValue
- Add class UserExInfo
- Add class SingleTypeKeyInfoSum
- Add class MessageKv
- Add class TypeKeySetResult
- Add class MessageTypeKeyMapping
## 2.3.5
- Add setCustomBusinessListener method for MessageManager
- Add OnCustomBusinessListener listener
- Add message encryption config
- Add message compression config
- Add setGroupMemberInfo for GroupManager
## 2.3.4+6
- Add setAppBackgroundStatus method for IMManager
## 2.3.4+5
- Fix bug
- Add setOneConversationBurnDuration method for ConversationManager
- Add signalingSendCustomSignal method for SignalingManager
- Add onReceiveCustomSignal listener for OnSignalingListener
- Add burnDuration field for ConversationInfo
- Add burnDuration field for AttachedInfoElem
## 2.3.4+4
- Fix bug
- Replace maven repository address
## 2.3.4+3
- Fix bug
## 2.3.4+2
- Add streamChangedEvent listener for OnSignalingListener
- Add signalingJoinMeeting method for SignalingManager
- Add signalingCreateMeeting method for SignalingManager
- Add signalingOperateStream method for SignalingManager
- Add signalingGetMeetings method for SignalingManager
- Add signalingCloseRoom method for SignalingManager
- Add signalingUpdateMeetingInfo method for SignalingManager
- Update findMessageList method
- Add sendMessageNotOss method for MessageManager
- Add createImageMessageByURL method for MessageManager
- Add createSoundMessageByURL method for MessageManager
- Add createVideoMessageByURL method for MessageManager
- Add createFileMessageByURL method for MessageManager
## 2.3.4+1
- Add signalingGetTokenByRoomID method for SignalingManager
## 2.3.4
- Fix bug
- Add signalGetRoomByGroupID method for SignalingManager
- Add class RoomCallingInfo
- Add onRoomParticipantConnected listener for OnSignalingListener
- Add onRoomParticipantDisconnected listener for OnSignalingListener
- Add busyLineUserIDList field for SignalingCertificate
## 2.3.3
- Fix bug
## 2.3.2
- Fix bug
- Add createAdvancedQuoteMessage method for MessageManager
- Add createAdvancedTextMessage method for MessageManager
## 2.3.0+1
- Fix bug
- enum class MessageType new add customMsgNotTriggerConversation
- enum class MessageType new add customMsgOnlineOnly
- class IMManager new add updateFcmToken method
- class MessageManager new add findMessageList method
- initSDK method add encryptionKey param
## 2.3.0
- Fix bug
- Super group
- Add setGroupLookMemberInfo method for GroupManager
- Add setGroupApplyMemberFriend method for GroupManager
- Add getGroupOwnerAndAdmin method for GroupManager
- Add revokeMessageV2 method for MessageManager
- Add lookMemberInfo field for GroupInfo
- Add applyMemberFriend field for GroupInfo
- Add notificationUpdateTime field for GroupInfo
- Add notificationUserID field for GroupInfo
- Add inviterUserID field for GroupMembersInfo
- Add joinSource field for joinGroup method
- Add advanced revoke type
- Add recvMessageRevokedV2 callback for OnAdvancedMsgListener
- Add joinSource field for GroupApplicationInfo
- Add inviterUserID field for GroupApplicationInfo
- Add getAdvancedHistoryMessageList method for MessageManager
- Add searchGroupMembers method for GroupManager
## 2.2.0
1.Fix bug </br>
## 2.1.0+1
1.Add setGroupVerification method </br>
## 2.1.0
1.Fix bug </br>
2.Add getGroupMemberListByJoinTime method </br>
3.Add groupMemberCount field </br>
## 2.0.9+3
1.Fix bug </br>
2.Add setGlobalRecvMessageOpt method </br>
## 2.0.9+2
1.Fix bug </br>
2.Add searchOrganization method </br>
3.Add searchFriends method </br>
4.Add getDepartmentInfo method </br>
5.Add setGroupMemberRoleLevel method </br>
## 2.0.9+1
1.Fix bug </br>
## 2.0.9
1.Fix bug </br>
2.Add organization fuction </br>
3.Add uploadImage method </br>
4.Fix login slow bug </br>
## 2.0.8
1.Fix bug </br>
2.Change the sdk maven address </br>
3.Sync go IM sdk version number </br>
## 2.0.0+6
1.Fix bug </br>
2.Adapter ios emulator </br>
3.Add modify group nickname </br>
4.Update at message </br>
5.ConverstaionInfo new add isNotInGroup field</br>
6.Add at type </br>
7.Add work moments </br>
8.Add global search </br>
9.Add getHistoryMessageListReverse method </br>
10.Add getAtAllTag method </br>
11.Add resetConversationGroupAtType method </br>
12.Add searchGroups method </br>
## 2.0.0+5
1.Add notification parse </br>
2.Add deleteConversationFromLocalAndSvr method </br>
3.Add deleteMessageFromLocalAndSvr method </br>
4.Add deleteAllMsgFromLocal method </br>
5.Add deleteAllMsgFromLocalAndSvr method </br>
6.Add clearC2CHistoryMessageFromLocalAndSvr method </br>
7.Add clearGroupHistoryMessageFromLocalAndSvr method </br>
8.Add markMessageAsReadByConID method </br>
9.Add wakeUp method </br>
10.Add deleteAllConversationFromLocal method </br>
## 2.0.0+4
1.Add dismiss group </br>
2.Add search local message </br>
3.Add private chat </br>
4.Add group mute
## 2.0.0+3
1.Fix bug </br>
## 2.0.0+2
1.Fix some one crash </br>
2.Add signaling function </br>
3.Add group have read receipt
## 2.0.0+1 ## 2.0.0+1
1.Fix multi-terminal synchronization bug fix for retracted messages </br> 1.Fix multi-terminal synchronization bug fix for retracted messages </br>
@@ -23,13 +264,13 @@
## 1.0.8 ## 1.0.8
1.Upgrade sdk to 1.4.4. </br> 1.Upgrade sdk to 1.4.4. </br>
2.New and changed conversation return changed data and no longer return all data. </br> 2.Add changed conversation return changed data and no longer return all data. </br>
3.New conversation paging method. 3.Add conversation paging method.
## 1.0.7 ## 1.0.7
Upgrade sdk to 1.3.4 </br> Upgrade sdk to 1.3.4 </br>
New add method setConversationRecvMessageOpt and getConversationRecvMessageOpt Add method setConversationRecvMessageOpt and getConversationRecvMessageOpt
## 1.0.6 ## 1.0.6
@@ -67,36 +308,45 @@ Fix bug
## 0.0.9+5 ## 0.0.9+5
1. Android upgrade sdk to 0.0.17 </br> 1. Android upgrade sdk to 0.0.17 </br>
2. New add createFileMessageFromFullPath method 2. Add createFileMessageFromFullPath method
## 0.0.9+4 ## 0.0.9+4
Fix ios friendship params error Fix ios friendship params error
## 0.0.9+3 ## 0.0.9+3
Ios native remove method 'removeAdvancedMsgListener' Ios native remove method 'removeAdvancedMsgListener'
## 0.0.9+2 ## 0.0.9+2
1. Fix bug 1. Fix bug
2. Upgrade sdk 2. Upgrade sdk
## 0.0.9+1 ## 0.0.9+1
Fix bug Fix bug
## 0.0.9 ## 0.0.9
Add ios support Add ios support
## 0.0.8 ## 0.0.8
Upgrade sdk to 0.0.14 </br> Upgrade sdk to 0.0.14 </br>
Sending a message adds a retry mechanism Sending a message adds a retry mechanism
## 0.0.7 ## 0.0.7
1. Add a new method to obtain conversation id based on user id or group id </br> 1. Add a new method to obtain conversation id based on user id or group id </br>
2. Modify the type of conversation manager input parameter sessionType to int 2. Modify the type of conversation manager input parameter sessionType to int
## 0.0.6 ## 0.0.6
Fix bug Fix bug
## 0.0.5 ## 0.0.5
Upgrade sdk </br> Upgrade sdk </br>
Fix message error bug Fix message error bug
@@ -105,11 +355,14 @@ Fix message error bug
Replace the input parameters of the createCustomMessage method from Uint8List to Map Replace the input parameters of the createCustomMessage method from Uint8List to Map
## 0.0.3 ## 0.0.3
Upgrade sdk </br> Upgrade sdk </br>
Fix bug </br> Fix bug </br>
## 0.0.2 ## 0.0.2
1. Move the markSingleMessageHasRead, markGroupMessageHasRead and getTotalUnreadMsgCount methods from the MessageManager class to the ConversationManager class. </br>
1. Move the markSingleMessageHasRead, markGroupMessageHasRead and getTotalUnreadMsgCount methods
from the MessageManager class to the ConversationManager class. </br>
2. Modify the parameters of the setFriendInfo method. </br> 2. Modify the parameters of the setFriendInfo method. </br>
3. Modify the parameters of the createGroup and setGroupInfo methods. 3. Modify the parameters of the createGroup and setGroupInfo methods.

164
README.md
View File

@@ -1,23 +1,159 @@
# flutter_openim_sdk # Flutter Client SDK for OpenIM 👨‍💻💬
[![pub package](https://img.shields.io/pub/v/flutter_openim_sdk.svg)](https://pub.flutter-io.cn/packages/flutter_openim_sdk)
[![Generic badge](https://img.shields.io/badge/platform-android%20|%20ios%20-blue.svg)](https://pub.dev/packages/flutter_openim_sdk)
[![GitHub license](https://img.shields.io/github/license/OpenIMSDK/Open-IM-SDK-Flutter)](https://github.com/OpenIMSDK/Open-IM-SDK-Flutter/blob/main/LICENSE)
A flutter im plugin for android and ios. Use this SDK to add instant messaging capabilities to your Flutter app. By connecting to a self-hosted [OpenIM](https://www.openim.online/) server, you can quickly integrate instant messaging capabilities into your app with just a few lines of code.
#### [中文文档](README.zh-cn.md) | [demo(体验app源代码)](https://github.com/OpenIMSDK/Open-IM-Flutter-Demo.git) | [widget(聊天UI库)](https://github.com/hrxiang/flutter_openim_widget.git)
![Android](https://www.pgyer.com/app/qrcode/OpenIM)
The underlying SDK core is implemented in [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core). Using [gomobile](https://github.com/golang/mobile), it can be compiled into an AAR file for Android integration. Android interacts with the [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core) through JSON, and the SDK exposes a re-encapsulated API for easy usage. In terms of data storage, Android utilizes the SQLite layer provided internally by the [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core).
## Getting Started The underlying SDK core is implemented in [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core). Using [gomobile](https://github.com/golang/mobile), it can be compiled into an XCFramework for iOS integration. iOS interacts with the [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core) through JSON, and the SDK exposes a re-encapsulated API for easy usage. In terms of data storage, iOS utilizes the SQLite layer provided internally by the [OpenIM SDK Core](https://github.com/openimsdk/openim-sdk-core).
Based on the above AAR and XCFramework packages, the IM SDK for Flutter is encapsulated through the Flutter plug-in.
## Documentation 📚
Visit [https://docs.openim.io/](https://docs.openim.io/) for detailed documentation and guides.
For the SDK reference, see [https://docs.openim.io/sdks/quickstart/flutter](https://docs.openim.io/sdks/quickstart/flutter).
## Installation 💻
### Adding Dependencies
```dart
flutter_openim_sdk: lastest
```
## Usage 🚀
The following examples demonstrate how to use the SDK.
### Importing the SDK
```dart
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
```
### Initialize
```
final success = await OpenIM.iMManager.initSDK(
platform: 0, // Platform, referring to the IMPlatform class.
apiAddr: "", // SDK's API interface address.
wsAddr: "", // SDK's WebSocket address.
dataDir: "", // Data storage path. For example, you can use getApplicationDocumentsDirectory() to get a path.
objectStorage: 'cos', // Image server (default is 'cos').
logLevel: 6, // Log level (default value is 6).
listener: OnConnectListener(
onConnectSuccess: () {
// Successfully connected to the server.
},
onConnecting: () {
// Connecting to the server, suitable for showing a "Connecting" status on the UI.
},
onConnectFailed: (code, errorMsg) {
// Failed to connect to the server, you can notify the user that the current network connection is not available.
},
onUserSigExpired: () {
// User's login token (UserSig) has expired, prompting the user to log in again with a new token.
},
onKickedOffline: () {
// The current user has been kicked offline, and you can prompt the user to log in again with a message like "You have been logged in on another device. Do you want to log in again?"
},
),
);
```
### Logging In and Listening for Connection Status
> Note1: You need to [deploy](https://github.com/openimsdk/open-im-server#rocket-quick-start) OpenIM Server first, the default port of OpenIM Server is 10001, 10002.
> Note2: You need to set up the listeners first and then log in.
#### 1Add dependency in yaml ```dart
// Set listener
OpenIM.iMManager
//
..userManager.setUserListener(OnUserListener(
))
// Add message listener (remove when not in use)
..messageManager.setAdvancedMsgListener(OnAdvancedMsgListener(
))
flutter_openim_sdk: latest // Set up message sending progress listener
..messageManager.setMsgSendProgressListener(OnMsgSendProgressListener(
))
..messageManager.setCustomBusinessListener(
)
// Set up friend relationship listener
..friendshipManager.setFriendshipListener(OnFriendshipListener(
))
#### 2Import package // Set up conversation listener
..conversationManager.setConversationListener(OnConversationListener(
))
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; // Set up group listener
..groupManager.setGroupListener(OnGroupListener(
));
// Retrieve the profile of the currently logged-in user
final userInfo = await OpenIM.iMManager.login(
userID: "", // userID is obtained from your own business server
token: "", // The token should be acquired by your business server by exchanging with OpenIM server based on a secret key
);
```
To log into the IM server, you need to create an account and obtain a user ID and token. Refer to the [access token documentation](https://doc.rentsoft.cn/restapi/userManagement/userRegister) for details.
### Receiving and Sending Messages 💬
OpenIM makes it easy to send and receive messages. By default, there is no restriction on having a friend relationship to send messages (although you can configure other policies on the server). If you know the user ID of the recipient, you can conveniently send a message to them.
```dart
//Send
OpenIM.iMManager.messageManager.sendMessage(
message: await OpenIM.iMManager.messageManager.createTextMessage(
text: 'hello openim',
),
userID: userID
).catchError((error, _){
// Message sent successfully ✉️
} )
.whenComplete(() {
// Failed to send message ❌
});
//Receive
OpenIM.iMManager.messageManager.setAdvancedMsgListener(OnAdvancedMsgListener(
onRecvNewMessage:(Message msg) {
// Received new message 📨
}
))
```
## Examples 🌟
You can find a demo Flutter app that uses the SDK in the [open-im-flutter-demo](https://github.com/openimsdk/open-im-flutter-demo) repository.
## Community :busts_in_silhouette:
- 📚 [OpenIM Community](https://github.com/OpenIMSDK/community)
- 💕 [OpenIM Interest Group](https://github.com/Openim-sigs)
- 🚀 [Join our Slack community](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q)
- :eyes: [Join our wechat (微信群)](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg)
## Community Meetings :calendar:
We want anyone to get involved in our community and contributing code, we offer gifts and rewards, and we welcome you to join us every Thursday night.
Our conference is in the [OpenIM Slack](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q) 🎯, then you can search the Open-IM-Server pipeline to join
We take notes of each [biweekly meeting](https://github.com/orgs/OpenIMSDK/discussions/categories/meeting) in [GitHub discussions](https://github.com/openimsdk/open-im-server/discussions/categories/meeting), Our historical meeting notes, as well as replays of the meetings are available at [Google Docs :bookmark_tabs:](https://docs.google.com/document/d/1nx8MDpuG74NASx081JcCpxPgDITNTpIIos0DS6Vr9GU/edit?usp=sharing).
## Who are using OpenIM :eyes:
Check out our [user case studies](https://github.com/OpenIMSDK/community/blob/main/ADOPTERS.md) page for a list of the project users. Don't hesitate to leave a [📝comment](https://github.com/openimsdk/open-im-server/issues/379) and share your use case.
## License :page_facing_up:
OpenIM is licensed under the Apache 2.0 license. See [LICENSE](https://github.com/openimsdk/open-im-server/tree/main/LICENSE) for the full license text.

View File

@@ -1,984 +1,18 @@
## SDK使用步骤 # flutter_openim_sdk
<img src="https://github.com/OpenIMSDK/OpenIM-Docs/blob/main/docs/images/WechatIMG20.jpeg" alt="image" style="width: 350px; " />
##### 1初始化 [![pub package](https://img.shields.io/pub/v/flutter_openim_sdk.svg)](https://pub.flutter-io.cn/packages/flutter_openim_sdk)
[![Generic badge](https://img.shields.io/badge/platform-android%20|%20ios%20-blue.svg)](https://pub.dev/packages/flutter_openim_sdk)
[![GitHub license](https://img.shields.io/github/license/OpenIMSDK/Open-IM-SDK-Flutter)](https://github.com/OpenIMSDK/Open-IM-SDK-Flutter/blob/main/LICENSE)
``` A flutter im plugin for android and ios.
OpenIM.iMManager.initSDK(
platform: 0, // 平台参照IMPlatform类,
apiAddr: "", // SDK的API接口地址。如http:xxx:10000
wsAddr: "", // SDK的web socket地址。如 ws:xxx:17778
dataDir: "", // 数据存储路径。如var apath =(await getApplicationDocumentsDirectory()).path
listener: OnConnectListener(
onConnectSuccess: () {
// 已经成功连接到服务器
},
onConnecting: () {
// 正在连接到服务器,适合在 UI 上展示“正在连接”状态。
},
onConnectFailed: (code, errorMsg) {
// 连接服务器失败,可以提示用户当前网络连接不可用
},
onUserSigExpired: () {
// 登录票据已经过期,请使用新签发的 UserSig 进行登录。
},
onKickedOffline: () {
// 当前用户被踢下线,此时可以 UI 提示用户“您已经在其他端登录了当前账号,是否重新登录?”
},
),
).then((value){
if(value == true){
// 初始化成功
}
});
```
##### 2设置监听器 #### [demo open source code](https://github.com/OpenIMSDK/Open-IM-Flutter-Demo.git) | [UI library source code](https://github.com/hrxiang/flutter_openim_widget.git)
``` Scan the QR code below to experience the SDK call example Demo
OpenIM.iMManager
..userManager.setUserListener(OnUserListener(
onSelfInfoUpdated: (userInfo) {
// 当前登录用户资料变更回调
},
))
..messageManager.setAdvancedMsgListener(OnAdvancedMsgListener(
onRecvNewMessage: (message) {
// 收到新消息,界面添加新消息
},
onRecvMessageRevoked: (messageID) {
// 消息成功撤回,从界面移除消息
},
onRecvC2CReadReceipt: (list) {
// 消息被阅读回执,将消息标记为已读
},
))
..messageManager.setMsgSendProgressListener(OnMsgSendProgressListener(
onProgress: (messageID, progress) {
// 消息发送进度回调
},
))
..friendshipManager.setFriendshipListener(OnFriendshipListener(
onFriendApplicationRejected: (applicationInfo) {
// 发出或收到的好友申请被拒绝
},
onFriendApplicationDeleted: (applicationInfo) {
// 发出或收到的好友申请被删除
},
onFriendApplicationAdded: (applicationInfo) {
// 发出或收到的好友申请被添加
},
onFriendApplicationAccepted: (applicationInfo) {
// 发出或收到的好友申请已同意
},
onFriendAdded: (frinedInfo) {
// 好友被添加
},
onFriendDeleted: (frinedInfo) {
// 好友被删除
},
onFriendInfoChanged: (frinedInfo) {
// 朋友的资料发生变化
},
onBlacklistDeleted: (blackInfo) {
// 从黑名单删除
},
onBlacklistAdded: (blackInfo) {
// 拉入黑名单
},
))
..conversationManager.setConversationListener(OnConversationListener(
onNewConversation: (list) {
// 新增会话
},
onConversationChanged: (list) {
// 已添加的会话发送改变
},
onTotalUnreadMessageCountChanged: (count) {
// 未读消息数发送变化
},
))
..groupManager.setGroupListener(OnGroupListener(
onGroupMemberInfoChanged: (memberInfo) {
// 组成员信息发生变化
},
onGroupMemberDeleted: (memberInfo) {
// 组成员退出
},
onGroupMemberAdded: (memberInfo) {
// 组成员进入
},
onGroupApplicationRejected: (applicationInfo) {
// 发出或收到的组申请被拒绝
},
onGroupApplicationDeleted: (applicationInfo) {
// 发出或收到的组申请被删除
},
onGroupApplicationAdded: (applicationInfo) {
// 发出或收到的组申请有新增
},
onGroupApplicationAccepted: (applicationInfo) {
// 发出或收到的组申请被接受
},
onJoinedGroupDeleted: (groupInfo) {
// 退出群:退出者收到;踢出群:被踢者收到
},
onJoinedGroupAdded: (groupInfo) {
// 创建群: 初始成员收到;邀请进群:被邀请者收到
},
onGroupInfoChanged: (groupInfo) {
// 组资料变更
},
));
```
##### 3登录 ![Android](https://www.pgyer.com/app/qrcode/OpenIM-Flutter)
``` # [SDK Documents](https://doc.rentsoft.cn/sdks/quickstart/flutter)
OpenIM.iMManager.login(
uid: "", // uid来自于自身业务服务器
token: "", // token需要业务服务器根据secret向OpenIM服务端交换获取
).then((userInfo) {
// 返回当前登录用户的资料
});
```
## 方法名、参数、返回值说明
- ##### logout 登出)
```
OpenIM.iMManager.logout().then((_){
// 退出成功
});
```
- ##### getLoginUserInfo获取当前登录用户的资料
```
OpenIM.iMManager.getLoginUserInfo().then((userInfo){
// 当前登录用户的信息
});
```
- ##### getLoginUserID获取当前登录用户的ID
```
OpenIM.iMManager.getLoginUserID().then((userID){
// 当前登录用户的ID
});
```
- ##### getUsersInfo根据用户ID批量获取用户信息
```
OpenIM.iMManager.userManager.getUsersInfo(
uidList: [], // 用户ID集合
).then((userInfoList) {
// 用户信息列表
});
```
- ##### getSelfUserInfo获取当前登录用户的资料
```
OpenIM.iMManager.userManager.getSelfUserInfo().then((userInfo){
// 返回当前登录用户的资料
});
```
- ##### setSelfInfo修改当前用登录户资料
会触发当用户的onSelfInfoUpdated回调以及好友的onFriendInfoChanged、onConversationChanged回调。
```
OpenIM.iMManager.userManager.setSelfInfo(
nickname: '', // 昵称
faceURL: '', // 头像
gender: 0, // 性别: 男1女0
phoneNumber: '', // 手机号
email: '', //邮箱
birth: 0, //生日
ex: '', // 其他信息
);
```
- ##### getAllConversationList获取所有会话
```
OpenIM.iMManager.conversationManager.getAllConversationList().then((list) {
// List<ConversationInfo> 会话列表
});
```
- ##### getConversationListSplit分页获取会话
```
OpenIM.iMManager.conversationManager.getConversationListSplit(
offset: 0, // 偏移量第1页offet0count20第2页offset20
count: 0, // 每页数量
).then((list) {
// List<ConversationInfo> 会话列表
});
```
- ##### getOneConversation获取一个会话如果不存在会自动创建
```
OpenIM.iMManager.conversationManager.getOneConversation(
sourceID: "", // 如果是单聊值传userID如果是群聊groupID
sessionType: 1, // 如果是单聊值传1如果是群聊值传2
).then((info) {
// 会话信息
});
```
- ##### getMultipleConversation根据会话id查询会话
```
OpenIM.iMManager.conversationManager.getMultipleConversation(
conversationIDList: [], // 会话ID集合
).then((list) {
// 返回与id匹配的会话列表
});
```
- ##### deleteConversation根据会话id删除指定会话)
会触onTotalUnreadMessageCountChanged回调
```
OpenIM.iMManager.conversationManager.deleteConversation(
conversationID: "", // 会话id
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### setConversationDraft设置会话草稿
会触onConversationChanged回调
```
OpenIM.iMManager.conversationManager.setConversationDraft(
conversationID: "", // 会话id
draftText: "", // 草稿
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### pinConversation置顶会话
会触onConversationChanged回调
```
OpenIM.iMManager.conversationManager.pinConversation(
conversationID: "", // 会话id
isPinned: true, // true置顶false取消置顶
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### markGroupMessageHasRead标记群会话已读清除未读数
会触onConversationChanged、onTotalUnreadMessageCountChanged回调
```
OpenIM.iMManager.conversationManager.markGroupMessageHasRead(
groupID: "", // 组id
);
```
- ##### getTotalUnreadMsgCount获取未读消息总数
```
OpenIM.iMManager.conversationManager.getTotalUnreadMsgCount().then((count){
// 总数
});
```
- ##### getConversationIDBySessionType查询会话id
```
OpenIM.iMManager.conversationManager.getConversationIDBySessionType(
sourceID: "", // 如果是单聊值传userID如果是群聊groupID
sessionType: 1, // 如果是单聊值传1如果是群聊值传2
).then((conversationID){
// 会话ID
});
```
- ##### setConversationRecvMessageOpt设置免打扰模式
```
OpenIM.iMManager.conversationManager.setConversationRecvMessageOpt(
conversationIDList: [], // 会话id列表
status: 1, // 1不接受消息2接受在线消息不接受离线消息0正常
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### getConversationRecvMessageOpt查询免打扰状态
```
OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
conversationIDList: [], // 会话id列表
).then((list) {
// 返回列表 [{"conversationId":"single_13922222222","result":0}]
// result: 1不接受消息2接受在线消息不接受离线消息0正常
});
```
- ##### simpleSort自定义会话排序规则
```
var list = OpenIM.iMManager.conversationManager.simpleSort([]);// 返回排序好的列表
```
- ##### getFriendsInfo根据userID查询好友资料
```
OpenIM.iMManager.friendshipManager.getFriendsInfo(
uidList: [], // userId列表
).then((list) {
// List<UserInfo>
});
```
- ##### addFriend发起好友申请
主动申请者收到OnFriendApplicationAdded
被添加者收到OnFriendApplicationAdded
```
OpenIM.iMManager.friendshipManager.addFriend(
uid: "", // 用户id
reason: '', // 发起好友申请的描述信息
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### checkFriend检查是否是好友
```
OpenIM.iMManager.friendshipManager.checkFriend(
uidList: [], // userID 列表
).then((list) {
// List<FriendshipInfo>
});
```
- ##### deleteFriend删除好友
操作者收到OnFriendDeleted
```
OpenIM.iMManager.friendshipManager.deleteFriend(
uid: '', // userID
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### setFriendRemark好友备注设置
操作者收到OnFriendInfoChanged
```
OpenIM.iMManager.friendshipManager.setFriendRemark(
uid: '', // 好友userID
remark: '', // 备注名
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### getFriendList好友列表
返回的数据里包含已拉入黑名单的好友可以根据isBlacklist字段筛选。
```
OpenIM.iMManager.friendshipManager.getFriendList().then((list){
// List<UserInfo> 好友信息列表
});
```
- ##### getRecvFriendApplicationList收到的好友申请
```
OpenIM.iMManager.friendshipManager.getRecvFriendApplicationList().then((list) {
// List<FriendApplicationInfo> 申请列表
});
```
- ##### getSendFriendApplicationList发出的好友申请
```
OpenIM.iMManager.friendshipManager.getSendFriendApplicationList().then((list){
// List<FriendApplicationInfo> 申请列表
});
```
- ##### addBlacklist拉黑好友
操作者收到OnBlackAdded
```
OpenIM.iMManager.friendshipManager.addBlacklist(
uid: "", // 好友userID
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### getBlacklist黑名单
```
OpenIM.iMManager.friendshipManager.getBlacklist().then((list){
// List<UserInfo>
});
```
- ##### removeBlacklist移除黑名单
操作者收到OnBlackDeleted
```
OpenIM.iMManager.friendshipManager.removeBlacklist(
uid: "", // userID
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### acceptFriendApplication接受好友申请
操作者收到OnFriendApplicationAccepted、OnFriendAdded
申请者收到OnFriendApplicationAccepted、OnFriendAdded
```
OpenIM.iMManager.friendshipManager.acceptFriendApplication(
uid: "", // userID
handleMsg: '', // 备注信息
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### refuseFriendApplication拒绝好友申请
操作者收到OnFriendApplicationRejected
申请者收到OnFriendApplicationRejected
```
OpenIM.iMManager.friendshipManager.refuseFriendApplication(
uid: "", // userID
handleMsg: '', // 备注信息
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### inviteUserToGroup邀请进组
直接进组无需同意。
被邀请者收到OnJoinedGroupAdded
群成员不包括被邀请者收到OnGroupMemberAdded
```
OpenIM.iMManager.groupManager.inviteUserToGroup(
groupId: '', // 组ID
uidList: [], // 成员 userID 列表
reason: '', // 备注信息
).then((list){
// List<GroupInviteResult>
});
}
```
- ##### kickGroupMember移除组成员
被踢者收到OnJoinedGroupDeleted
群成员收到OnGroupMemberDeleted
```
OpenIM.iMManager.groupManager.kickGroupMember(
groupId: '', // 组ID
uidList: [], // 成员 userID 列表
reason: '', // 备注信息
).then((list){
// List<GroupInviteResult>
});
```
- ##### getGroupMembersInfo查询组成员信息
```
OpenIM.iMManager.groupManager.getGroupMembersInfo(
groupId: '', // 组ID
uidList: [], // 成员 userID 列表
).then((list){
// List<GroupMembersInfo>
});
```
- ##### getGroupMemberList组成员列表
```
OpenIM.iMManager.groupManager.getGroupMemberList(
groupId: '', // 组ID
filter: 0, // 1普通成员, 2群主3管理员
offset: 0, // 偏移量每次开始的index值
count: 0, // 每次拉取的数量
).then((list){
// List<GroupMembersInfo>
});
```
- ##### getJoinedGroupList获取已加入的群组
```
OpenIM.iMManager.groupManager.getJoinedGroupList().then((list){
// List<GroupInfo>
});
```
- ##### isJoinedGroup检查是否已入群
```
OpenIM.iMManager.groupManager.isJoinedGroup(
gid: '', // 组ID
).then((joned) {
// true已加入false未加入
});
```
- ##### createGroup创建组
初始成员收到OnJoinedGroupAdded
```
OpenIM.iMManager.groupManager.createGroup(
groupName: '', // 组名
faceUrl: '', // 头像
notification: '', // 群公告
introduction: '', // 群简介
groupType: 0, // 类型
ex: '', // 扩展信息
list: [], // 成员角色集合 List<GroupMemberRole>
).then((groupInfo){
// 返回组信息 GroupInfo
});
```
- ##### setGroupInfo修改组信息
群成员收到OnGroupInfoChanged
```
OpenIM.iMManager.groupManager.setGroupInfo(
groupID: '',
groupName: '', // 组名
faceUrl: '', // 头像
notification: '', // 群公告
introduction: '', // 群简介
ex: '', // 扩展信息
);
```
- ##### getGroupsInfo根据id查询组信息
```
OpenIM.iMManager.groupManager.getGroupsInfo(
gidList: [], // 组id集合
).then((list){
// List<GroupInfo>
});
```
- ##### joinGroup申请入群组
需要通过管理员同意。
申请者收到OnGroupApplicationAdded
群主+管理员收到OnGroupApplicationAdded
```
OpenIM.iMManager.groupManager.joinGroup(
gid: '', // 组id
reason: '', // 入群备注信息
);
```
- ##### quitGroup退出组
退出者收到OnJoinedGroupDeleted
群成员收到OnGroupMemberDeleted
```
OpenIM.iMManager.groupManager.quitGroup(
gid: '', // 组id
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### transferGroupOwner群转让
```
OpenIM.iMManager.groupManager.transferGroupOwner(
gid: '', // 组ID
uid: '', // 新 owner userID
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### getRecvGroupApplicationList收到的入群申请
作为群主或者管理员,获取收到的群成员申请进群列表。
```
OpenIM.iMManager.groupManager.getRecvGroupApplicationList().then((list){
// List<GroupApplicationInfo>
});
```
- ##### getSendGroupApplicationList发出的入群申请
```
OpenIM.iMManager.groupManager.getSendGroupApplicationList().then((list){
// List<GroupApplicationInfo>
});
```
- ##### acceptGroupApplication接受入群申请
申请者收到OnJoinedGroupAdded OnGroupApplicationAccepted
群成员不包括申请者收到OnGroupMemberAdded
审批者群主或者管理员收到OnGroupMemberAdded OnGroupApplicationAccepted
```
OpenIM.iMManager.groupManager.acceptGroupApplication(
gid: '', // 组ID
uid: '', // 申请人userID
handleMsg: '', // 备注信息
);
```
- ##### refuseGroupApplication拒绝入群申请
申请者收到OnGroupApplicationRejected
审批者群主或者管理员收到OnGroupApplicationRejected
```
OpenIM.iMManager.groupManager.refuseGroupApplication(
gid: '', // 组ID
uid: '', // 申请人userID
handleMsg: '', // 备注信息
);
```
- ##### sendMessage发送消息
```
OpenIM.iMManager.messageManager.sendMessage(
message: Message(), // 消息体
userID: '', // 接受消息的userID
groupID: '', // 接受消息的群ID
offlinePushInfo: OfflinePushInfo(), // 离线推送的消息备注
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### getHistoryMessageList获取聊天记录
```
OpenIM.iMManager.messageManager.getHistoryMessageList(
userID: '', // 单聊对象的userID
groupID: '', // 群聊的组id
startMsg: null, // 消息体
count: 0, // 每次拉取的数量
).then((list){
// List<Message>
});
```
消息列表listindex == list.length -1 是最新的一条消息。 index == 0 是从最新的这条记录后的第19条。所以startMsg首次传null
下次就是list.firstindex == 0以此类推。
- ##### revokeMessage撤回消息
撤回成功需要当前用户从列表里移除Message然后更新ui而另外一方通过撤回监听onRecvMessageRevoked移除。
```
OpenIM.iMManager.messageManager.revokeMessage(
message: Message(), // 消息体
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### deleteMessageFromLocalStorage删除单条消息
```
OpenIM.iMManager.messageManager.deleteMessageFromLocalStorage(
message: Message(),
).then((_) {
// 成功从列表里移除Message然后更新ui
}).catchError((_){
// 失败
});
```
- ##### insertSingleMessageToLocalStorage向本地插入一条消息
```
OpenIM.iMManager.messageManager.insertSingleMessageToLocalStorage(
receiverID: '', // 接收者userID
senderID: '', // 发送者userID
message: Message(), // 消息体
);
```
- ##### markC2CMessageAsRead标记c2c消息已读
当调用此方法后已读的消息会通过已读回执onRecvC2CReadReceipt告诉对方。
```
OpenIM.iMManager.messageManager.markC2CMessageAsRead(
userID: '', // 接收者 userID
messageIDList: [], // 已读的消息id列表
);
```
- ##### typingStatusUpdate正在输入提示
会通过onRecvNewMessage回调
```
OpenIM.iMManager.messageManager.typingStatusUpdate(
userID: '', // 接收者 userID
msgTip: '', // 自定义提示内容
);
```
- ##### clearC2CHistoryMessage清空c2c聊天记录
```
OpenIM.iMManager.messageManager.clearC2CHistoryMessage(
uid: "", // userID
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### clearGroupHistoryMessage清空群聊天记录
```
OpenIM.iMManager.messageManager.clearGroupHistoryMessage(
gid: '', // 群ID
).then((_) {
// 成功
}).catchError((_){
// 失败
});
```
- ##### createTextMessage文本消息
```
var message = await OpenIM.iMManager.messageManager.createTextMessage(
text: '', // 发送的内容
);
```
- ##### createTextAtMessage@消息
```
var message = await OpenIM.iMManager.messageManager.createTextAtMessage(
text: '', // 发送的内容
atUidList: [], // 被@到的userID集合
);
```
- ##### createImageMessage图片消息相对路径
```
var message = await OpenIM.iMManager.messageManager.createImageMessage(
imagePath: '', // 相对路径
);
```
initSDK时传入了数据缓存dataDir路径如路径A这时需要你将图片复制到A路径下后如 A/pic/a.png路径imagePath的值“/pic/a.png”。同以下其他消息的相对路径。
- ##### createImageMessageFromFullPath图片消息全路径
```
var message = await OpenIM.iMManager.messageManager.createImageMessageFromFullPath(
imagePath: '', // 绝对路径
);
```
- ##### createSoundMessage语音消息相对路径
```
var message = await OpenIM.iMManager.messageManager.createSoundMessage(
soundPath: '', // 相对路径
duration: 0, // 时长s
);
```
- ##### createSoundMessageFromFullPath语音消息全路径
```
var message = await OpenIM.iMManager.messageManager.createSoundMessageFromFullPath(
soundPath: '', // 绝对路径
duration: 0, // 时长s
);
```
- ##### createVideoMessage视频消息相对路径
```
var message = await OpenIM.iMManager.messageManager.createVideoMessage(
videoPath: '', // 相对路径
videoType: '', // minetype
duration: 0, // 时长s
snapshotPath: '', // 站位缩略图
);
```
- ##### createVideoMessageFromFullPath视频消息全路径
```
var message = await OpenIM.iMManager.messageManager.createVideoMessageFromFullPath(
videoPath: '', // 绝对路径
videoType: '', // minetype
duration: 0, // 时长s
snapshotPath: '', // 站位缩略图
);
```
- ##### createFileMessage文件消息相对路径
```
var message = await OpenIM.iMManager.messageManager.createFileMessage(
filePath: '', // 相对路径
fileName: '', // 文件名
);
```
- ##### createFileMessageFromFullPath文件消息全路径
```
var message = await OpenIM.iMManager.messageManager.createFileMessageFromFullPath(
filePath: '', // 绝对路径
fileName: '', // 文件名
);
```
- ##### createForwardMessage转发消息
```
var message = await OpenIM.iMManager.messageManager.createForwardMessage(
message: Message(), // 被转发的消息体
);
```
- ##### createMergerMessage合并消息
```
var message = await OpenIM.iMManager.messageManager.createMergerMessage(
messageList: [], // 被转发的消息列表
title: '', // 标题
summaryList: [], // 每一条消息摘要
);
```
- ##### createLocationMessage位置消息
```
var message = await OpenIM.iMManager.messageManager.createLocationMessage(
latitude: 0,// 纬度
longitude: 0, // 经度
description: '', // 位置描述信息
);
```
- ##### createCustomMessage自定义消息
```
var message = await OpenIM.iMManager.messageManager.createCustomMessage(
data: '', // 自定义内容
extension: '', // 扩展信息
description: '', // 描述消息
);
```
- ##### createQuoteMessage引用消息/消息回复)
```
var message = await OpenIM.iMManager.messageManager.createQuoteMessage(
text: '', // 回复内容
quoteMsg: Message(), // 被回复的消息体
);
```
- ##### createCardMessage名片消息
```
OpenIM.iMManager.messageManager.createCardMessage(
data: {}, // 自定义内容
);
```

View File

@@ -1,12 +1,21 @@
group 'io.openim.flutter_openim_sdk' group 'io.openim.flutter_openim_sdk'
version '1.0' version '1.0'
def dir = getCurrentProjectDir()
// 将aar放到libs本地仓库替换远程仓库
def getCurrentProjectDir() {
String result = ""
rootProject.allprojects { project ->
if (project.properties.get("name").toString() == "flutter_openim_sdk") {
result = project.properties.get("projectDir").toString()
}
}
return result
}
buildscript { buildscript {
repositories { repositories {
maven {
allowInsecureProtocol = true
url 'http://121.37.25.71:8081/repository/maven-releases/'
}
google() google()
mavenCentral() mavenCentral()
} }
@@ -18,10 +27,9 @@ buildscript {
rootProject.allprojects { rootProject.allprojects {
repositories { repositories {
maven { // 将aar放到libs本地仓库替换远程仓库
allowInsecureProtocol = true // maven { url "$dir/libs" }
url 'http://121.37.25.71:8081/repository/maven-releases/' maven { url 'https://open-im-online.rentsoft.cn:51000/repository/maven2/' }
}
google() google()
mavenCentral() mavenCentral()
} }
@@ -40,6 +48,9 @@ android {
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
} }
dependencies { dependencies {
implementation 'io.openim:client-sdk:2.0.4@aar' // 本地依赖现将aar复制到libs/io/openim/core-sdk/0.0.1/ 下命名core-sdk-0.0.1.aar
// implementation 'io.openim:core-sdk:0.0.1@aar'
implementation 'io.openim:core-sdk:3.4.0@aar'
} }

View File

@@ -0,0 +1,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.openim</groupId>
<artifactId>core-sdk</artifactId>
<version>0.0.1</version>
</project>

View File

@@ -1,3 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="io.openim.flutter_openim_sdk"> package="io.openim.flutter_openim_sdk">
</manifest>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

View File

@@ -1,5 +1,6 @@
package io.openim.flutter_openim_sdk; package io.openim.flutter_openim_sdk;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -9,10 +10,14 @@ import java.lang.reflect.Method;
import io.flutter.Log; import io.flutter.Log;
import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.MethodChannel.Result;
import io.openim.flutter_openim_sdk.connectivity.ConnectivityListener;
import io.openim.flutter_openim_sdk.connectivity.VisibilityListener;
import io.openim.flutter_openim_sdk.manager.ConversationManager; import io.openim.flutter_openim_sdk.manager.ConversationManager;
import io.openim.flutter_openim_sdk.manager.FriendshipManager; import io.openim.flutter_openim_sdk.manager.FriendshipManager;
import io.openim.flutter_openim_sdk.manager.GroupManager; import io.openim.flutter_openim_sdk.manager.GroupManager;
@@ -24,12 +29,12 @@ import io.openim.flutter_openim_sdk.manager.UserManager;
/** /**
* FlutterOpenimSdkPlugin * FlutterOpenimSdkPlugin
*/ */
public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler { public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler, ActivityAware {
/// The MethodChannel that will the communication between Flutter and native Android /// The MethodChannel that will the communication between Flutter and native Android
/// ///
/// This local reference serves to register the plugin with the Flutter Engine and unregister it /// This local reference serves to register the plugin with the Flutter Engine and unregister it
/// when the Flutter Engine is detached from the Activity /// when the Flutter Engine is detached from the Activity
private static final String CHANNEL_NAME = "flutter_openim_sdk";
public static MethodChannel channel; public static MethodChannel channel;
private static IMManager imManager; private static IMManager imManager;
private static UserManager userManager; private static UserManager userManager;
@@ -37,11 +42,13 @@ public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler
private static MessageManager messageManager; private static MessageManager messageManager;
private static ConversationManager conversationManager; private static ConversationManager conversationManager;
private static GroupManager groupManager; private static GroupManager groupManager;
private static Activity activity;
private static Context context;
private ConnectivityListener connectivityListener;
private VisibilityListener visibilityListener;
public static boolean isInitialized;
public FlutterOpenimSdkPlugin() { public FlutterOpenimSdkPlugin() {
}
private FlutterOpenimSdkPlugin(Context context) {
FlutterOpenimSdkPlugin.imManager = new IMManager(); FlutterOpenimSdkPlugin.imManager = new IMManager();
FlutterOpenimSdkPlugin.userManager = new UserManager(); FlutterOpenimSdkPlugin.userManager = new UserManager();
FlutterOpenimSdkPlugin.friendshipManager = new FriendshipManager(); FlutterOpenimSdkPlugin.friendshipManager = new FriendshipManager();
@@ -50,11 +57,15 @@ public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler
FlutterOpenimSdkPlugin.groupManager = new GroupManager(); FlutterOpenimSdkPlugin.groupManager = new GroupManager();
} }
@Override @Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
FlutterOpenimSdkPlugin.channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "flutter_openim_sdk"); channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), CHANNEL_NAME);
FlutterOpenimSdkPlugin.channel.setMethodCallHandler(new FlutterOpenimSdkPlugin(flutterPluginBinding.getApplicationContext())); context = flutterPluginBinding.getApplicationContext();
// channel.setMethodCallHandler(this); channel.setMethodCallHandler(this);
connectivityListener = new ConnectivityListener(context);
visibilityListener = new VisibilityListener();
connectivityListener.register();
} }
@Override @Override
@@ -65,6 +76,30 @@ public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler
@Override @Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
FlutterOpenimSdkPlugin.channel.setMethodCallHandler(null); FlutterOpenimSdkPlugin.channel.setMethodCallHandler(null);
connectivityListener.unregisterReceiver();
}
@Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
visibilityListener.register(activity = binding.getActivity());
}
@Override
public void onDetachedFromActivityForConfigChanges() {
visibilityListener.unregisterReceiver(activity);
activity = null;
}
@Override
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
visibilityListener.register(activity = binding.getActivity());
}
@Override
public void onDetachedFromActivity() {
visibilityListener.unregisterReceiver(activity);
activity = null;
} }
void parse(@NonNull MethodCall call, @NonNull Result result) { void parse(@NonNull MethodCall call, @NonNull Result result) {

View File

@@ -0,0 +1,78 @@
package io.openim.flutter_openim_sdk.connectivity;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Build;
public class Connectivity {
static final String CONNECTIVITY_NONE = "none";
static final String CONNECTIVITY_WIFI = "wifi";
static final String CONNECTIVITY_MOBILE = "mobile";
static final String CONNECTIVITY_ETHERNET = "ethernet";
static final String CONNECTIVITY_BLUETOOTH = "bluetooth";
static final String CONNECTIVITY_VPN = "vpn";
private final ConnectivityManager connectivityManager;
public Connectivity(ConnectivityManager connectivityManager) {
this.connectivityManager = connectivityManager;
}
String getNetworkType() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Network network = connectivityManager.getActiveNetwork();
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
if (capabilities == null) {
return CONNECTIVITY_NONE;
}
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
return CONNECTIVITY_WIFI;
}
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
return CONNECTIVITY_ETHERNET;
}
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
return CONNECTIVITY_VPN;
}
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
return CONNECTIVITY_MOBILE;
}
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {
return CONNECTIVITY_BLUETOOTH;
}
}
return getNetworkTypeLegacy();
}
@SuppressWarnings("deprecation")
private String getNetworkTypeLegacy() {
// handle type for Android versions less than Android 6
android.net.NetworkInfo info = connectivityManager.getActiveNetworkInfo();
if (info == null || !info.isConnected()) {
return CONNECTIVITY_NONE;
}
int type = info.getType();
switch (type) {
case ConnectivityManager.TYPE_BLUETOOTH:
return CONNECTIVITY_BLUETOOTH;
case ConnectivityManager.TYPE_ETHERNET:
return CONNECTIVITY_ETHERNET;
case ConnectivityManager.TYPE_WIFI:
case ConnectivityManager.TYPE_WIMAX:
return CONNECTIVITY_WIFI;
case ConnectivityManager.TYPE_VPN:
return CONNECTIVITY_VPN;
case ConnectivityManager.TYPE_MOBILE:
case ConnectivityManager.TYPE_MOBILE_DUN:
case ConnectivityManager.TYPE_MOBILE_HIPRI:
return CONNECTIVITY_MOBILE;
default:
return CONNECTIVITY_NONE;
}
}
public ConnectivityManager getConnectivityManager() {
return connectivityManager;
}
}

View File

@@ -0,0 +1,101 @@
package io.openim.flutter_openim_sdk.connectivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.Network;
import android.os.Build;
import io.flutter.Log;
import io.openim.flutter_openim_sdk.FlutterOpenimSdkPlugin;
import open_im_sdk.Open_im_sdk;
public class ConnectivityListener implements open_im_sdk_callback.Base {
public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
private Context context;
private ConnectivityManager connectivityManager;
private Connectivity connectivity;
private ConnectivityBroadcastReceiver receiver;
private ConnectivityManager.NetworkCallback networkCallback;
public ConnectivityListener(Context context) {
this.context = context;
this.connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
this.connectivity = new Connectivity(connectivityManager);
this.receiver = new ConnectivityBroadcastReceiver(this);
}
private void onChangedNetworkStatus() {
String status = connectivity.getNetworkType();
if (Connectivity.CONNECTIVITY_MOBILE.equals(status) || Connectivity.CONNECTIVITY_WIFI.equals(status)) {
Log.i("ConnectivityListener", "networkStatusChanged: " + status);
if (FlutterOpenimSdkPlugin.isInitialized) {
Open_im_sdk.networkStatusChanged(this, String.valueOf(System.currentTimeMillis()));
}
}
}
public void register() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
onChangedNetworkStatus();
}
@Override
public void onLost(Network network) {
}
};
connectivity.getConnectivityManager().registerDefaultNetworkCallback(networkCallback);
} else {
context.registerReceiver(receiver, new IntentFilter(CONNECTIVITY_ACTION));
}
}
public void unregisterReceiver() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (networkCallback != null) {
connectivity.getConnectivityManager().unregisterNetworkCallback(networkCallback);
networkCallback = null;
}
} else {
try {
context.unregisterReceiver(receiver);
receiver = null;
} catch (Exception e) {
//listen never called, ignore the error
}
}
}
@Override
public void onError(int i, String s) {
}
@Override
public void onSuccess(String s) {
}
public static class ConnectivityBroadcastReceiver extends BroadcastReceiver {
ConnectivityListener listener;
public ConnectivityBroadcastReceiver(ConnectivityListener listener) {
this.listener = listener;
}
@Override
public void onReceive(Context context, Intent intent) {
if (null != listener && CONNECTIVITY_ACTION.equals(intent.getAction())) {
listener.onChangedNetworkStatus();
}
}
}
}

View File

@@ -0,0 +1,78 @@
package io.openim.flutter_openim_sdk.connectivity;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.Log;
import io.openim.flutter_openim_sdk.FlutterOpenimSdkPlugin;
import open_im_sdk.Open_im_sdk;
public class VisibilityListener implements Application.ActivityLifecycleCallbacks, open_im_sdk_callback.Base {
public void register(Activity activity) {
if (null != activity) {
activity.getApplication().registerActivityLifecycleCallbacks(this);
}
}
public void unregisterReceiver(Activity activity) {
if (null != activity) {
activity.getApplication().unregisterActivityLifecycleCallbacks(this);
}
}
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
Log.i("VisibilityListener", "onActivityCreated");
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
Log.i("VisibilityListener", "onActivityStarted");
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
Log.i("VisibilityListener", "onActivityResumed");
if (FlutterOpenimSdkPlugin.isInitialized) {
Open_im_sdk.setAppBackgroundStatus(this, String.valueOf(System.currentTimeMillis()), false);
}
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
Log.i("VisibilityListener", "onActivityPaused");
if (FlutterOpenimSdkPlugin.isInitialized) {
Open_im_sdk.setAppBackgroundStatus(this, String.valueOf(System.currentTimeMillis()), true);
}
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
Log.i("VisibilityListener", "onActivityStopped");
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
Log.i("VisibilityListener", "onActivitySaveInstanceState");
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
Log.i("VisibilityListener", "onActivityDestroyed");
}
@Override
public void onError(int i, String s) {
}
@Override
public void onSuccess(String s) {
}
}

View File

@@ -13,27 +13,79 @@ public class OnAdvancedMsgListener implements open_im_sdk_callback.OnAdvancedMsg
this.id = listenerId; this.id = listenerId;
} }
@Override
public void onMsgDeleted(String s) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("message", s);
CommonUtil.emitEvent("advancedMsgListener", "onMsgDeleted", values);
}
@Override
public void onNewRecvMessageRevoked(String s) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("messageRevoked", s);
CommonUtil.emitEvent("advancedMsgListener", "onNewRecvMessageRevoked", values);
}
@Override @Override
public void onRecvC2CReadReceipt(String s) { public void onRecvC2CReadReceipt(String s) {
final Map<String, String> values = new ArrayMap<>(); final Map<String, String> values = new ArrayMap<>();
values.put("id", id); values.put("id", id);
values.put("haveReadMessage", s); values.put("msgReceiptList", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvC2CReadReceipt", values); CommonUtil.emitEvent("advancedMsgListener", "onRecvC2CReadReceipt", values);
} }
@Override @Override
public void onRecvMessageRevoked(String s) { public void onRecvGroupReadReceipt(String s) {
final Map<String, String> values = new ArrayMap<>(); final Map<String, String> values = new ArrayMap<>();
values.put("id", id); values.put("id", id);
values.put("revokedMessage", s); values.put("groupMsgReceiptList", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvMessageRevoked", values); CommonUtil.emitEvent("advancedMsgListener", "onRecvGroupReadReceipt", values);
}
@Override
public void onRecvMessageExtensionsAdded(String s, String s1) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("msgID", s);
values.put("reactionExtensionList", s1);
CommonUtil.emitEvent("advancedMsgListener", "onRecvMessageExtensionsAdded", values);
}
@Override
public void onRecvMessageExtensionsChanged(String s, String s1) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("msgID", s);
values.put("reactionExtensionList", s1);
CommonUtil.emitEvent("advancedMsgListener", "onRecvMessageExtensionsChanged", values);
}
@Override
public void onRecvMessageExtensionsDeleted(String s, String s1) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("msgID", s);
values.put("reactionExtensionKeyList", s1);
CommonUtil.emitEvent("advancedMsgListener", "onRecvMessageExtensionsDeleted", values);
} }
@Override @Override
public void onRecvNewMessage(String s) { public void onRecvNewMessage(String s) {
final Map<String, String> values = new ArrayMap<>(); final Map<String, String> values = new ArrayMap<>();
values.put("id", id); values.put("id", id);
values.put("newMessage", s); values.put("message", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvNewMessage", values); CommonUtil.emitEvent("advancedMsgListener", "onRecvNewMessage", values);
} }
@Override
public void onRecvOfflineNewMessage(String s) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("message", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvOfflineNewMessage", values);
}
} }

View File

@@ -1,6 +1,8 @@
package io.openim.flutter_openim_sdk.listener; package io.openim.flutter_openim_sdk.listener;
import io.flutter.Log;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel;
import io.openim.flutter_openim_sdk.util.CommonUtil; import io.openim.flutter_openim_sdk.util.CommonUtil;
import open_im_sdk_callback.Base; import open_im_sdk_callback.Base;
@@ -8,18 +10,22 @@ import open_im_sdk_callback.Base;
public class OnBaseListener implements Base { public class OnBaseListener implements Base {
MethodChannel.Result result; MethodChannel.Result result;
MethodCall call;
public OnBaseListener(MethodChannel.Result result) { public OnBaseListener(MethodChannel.Result result, MethodCall call) {
this.result = result; this.result = result;
this.call = call;
} }
@Override @Override
public void onError(int l, String s) { public void onError(int l, String s) {
Log.i("F-OpenIMSDK(native call flutter)", "method: 【 " + call.method + " 】, onError: { code:" + l + ", message:" + s + "}");
CommonUtil.runMainThreadReturnError(result, l, s, null); CommonUtil.runMainThreadReturnError(result, l, s, null);
} }
@Override @Override
public void onSuccess(String s) { public void onSuccess(String s) {
Log.i("F-OpenIMSDK(native call flutter)", "method: 【 " + call.method + " 】, onSuccess: " + s);
CommonUtil.runMainThreadReturn(result, s); CommonUtil.runMainThreadReturn(result, s);
} }
} }

View File

@@ -0,0 +1,10 @@
package io.openim.flutter_openim_sdk.listener;
import io.openim.flutter_openim_sdk.util.CommonUtil;
public class OnCustomBusinessListener implements open_im_sdk_callback.OnCustomBusinessListener {
@Override
public void onRecvCustomBusinessMessage(String s) {
CommonUtil.emitEvent("customBusinessListener", "onRecvCustomBusinessMessage", s);
}
}

View File

@@ -6,12 +6,12 @@ public class OnFriendshipListener implements open_im_sdk_callback.OnFriendshipLi
@Override @Override
public void onBlackAdded(String s) { public void onBlackAdded(String s) {
CommonUtil.emitEvent("friendListener", "onBlacklistAdded", s); CommonUtil.emitEvent("friendListener", "onBlackAdded", s);
} }
@Override @Override
public void onBlackDeleted(String s) { public void onBlackDeleted(String s) {
CommonUtil.emitEvent("friendListener", "onBlacklistDeleted", s); CommonUtil.emitEvent("friendListener", "onBlackDeleted", s);
} }
@Override @Override

View File

@@ -24,6 +24,11 @@ public class OnGroupListener implements open_im_sdk_callback.OnGroupListener {
CommonUtil.emitEvent("groupListener", "onGroupApplicationRejected", s); CommonUtil.emitEvent("groupListener", "onGroupApplicationRejected", s);
} }
@Override
public void onGroupDismissed(String s) {
CommonUtil.emitEvent("groupListener", "onGroupDismissed", s);
}
@Override @Override
public void onGroupInfoChanged(String s) { public void onGroupInfoChanged(String s) {
CommonUtil.emitEvent("groupListener", "onGroupInfoChanged", s); CommonUtil.emitEvent("groupListener", "onGroupInfoChanged", s);

View File

@@ -0,0 +1,30 @@
package io.openim.flutter_openim_sdk.listener;
import io.openim.flutter_openim_sdk.util.CommonUtil;
public class OnListenerForService implements open_im_sdk_callback.OnListenerForService {
@Override
public void onFriendApplicationAccepted(String s) {
CommonUtil.emitEvent("listenerForService", "onFriendApplicationAccepted", s);
}
@Override
public void onFriendApplicationAdded(String s) {
CommonUtil.emitEvent("listenerForService", "onFriendApplicationAdded", s);
}
@Override
public void onGroupApplicationAccepted(String s) {
CommonUtil.emitEvent("listenerForService", "onGroupApplicationAccepted", s);
}
@Override
public void onGroupApplicationAdded(String s) {
CommonUtil.emitEvent("listenerForService", "onGroupApplicationAdded", s);
}
@Override
public void onRecvNewMessage(String s) {
CommonUtil.emitEvent("listenerForService", "onRecvNewMessage", s);
}
}

View File

@@ -0,0 +1,110 @@
package io.openim.flutter_openim_sdk.listener;
import android.util.ArrayMap;
import java.util.Map;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.openim.flutter_openim_sdk.util.CommonUtil;
import open_im_sdk_callback.UploadFileCallback;
public class OnUploadFileListener implements UploadFileCallback {
final private MethodChannel.Result result;
final private Object id;
public OnUploadFileListener(MethodChannel.Result result, MethodCall call) {
this.result = result;
this.id = call.argument("id");
}
@Override
public void complete(long size, String url, long type) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("size", size);
values.put("url", url);
values.put("type", type);
CommonUtil.emitEvent("uploadFileListener", "complete", values);
}
}
@Override
public void hashPartComplete(String partHash, String fileHash) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("partHash", partHash);
values.put("fileHash", fileHash);
CommonUtil.emitEvent("uploadFileListener", "hashPartComplete", values);
}
}
@Override
public void hashPartProgress(long index, long size, String partHash) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("index", index);
values.put("size", size);
values.put("partHash", partHash);
CommonUtil.emitEvent("uploadFileListener", "hashPartProgress", values);
}
}
@Override
public void open(long size) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("size", size);
CommonUtil.emitEvent("uploadFileListener", "open", values);
}
}
@Override
public void partSize(long partSize, long num) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("partSize", partSize);
values.put("num", num);
CommonUtil.emitEvent("uploadFileListener", "partSize", values);
}
}
@Override
public void uploadComplete(long fileSize, long streamSize, long storageSize) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("fileSize", fileSize);
values.put("streamSize", streamSize);
values.put("storageSize", storageSize);
CommonUtil.emitEvent("uploadFileListener", "uploadProgress", values);
}
}
@Override
public void uploadID(String uploadID) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("uploadID", uploadID);
CommonUtil.emitEvent("uploadFileListener", "uploadID", values);
}
}
@Override
public void uploadPartComplete(long index, long partSize, String partHash) {
if (null != id) {
final Map<String, Object> values = new ArrayMap<>();
values.put("id", id);
values.put("index", index);
values.put("partSize", partSize);
values.put("partHash", partHash);
CommonUtil.emitEvent("uploadFileListener", "uploadPartComplete", values);
}
}
}

View File

@@ -8,4 +8,9 @@ public class OnUserListener implements open_im_sdk_callback.OnUserListener {
public void onSelfInfoUpdated(String s) { public void onSelfInfoUpdated(String s) {
CommonUtil.emitEvent("userListener", "onSelfInfoUpdated", s); CommonUtil.emitEvent("userListener", "onSelfInfoUpdated", s);
} }
@Override
public void onUserStatusChanged(String s) {
CommonUtil.emitEvent("userListener", "onUserStatusChanged", s);
}
} }

View File

@@ -18,7 +18,10 @@ class BaseManager {
} }
static Long int2long(MethodCall methodCall, String key) { static Long int2long(MethodCall methodCall, String key) {
Integer i = value(methodCall, key); Object i = value(methodCall, key);
return Long.valueOf(i); if (i instanceof Long) {
return (Long) i;
}
return Long.valueOf((Integer) i);
} }
} }

View File

@@ -11,19 +11,21 @@ public class ConversationManager extends BaseManager {
public void setConversationListener(MethodCall methodCall, MethodChannel.Result result) { public void setConversationListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationListener(new OnConversationListener()); Open_im_sdk.setConversationListener(new OnConversationListener());
result.success(null);
} }
public void getAllConversationList(MethodCall methodCall, MethodChannel.Result result) { public void getAllConversationList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getAllConversationList( Open_im_sdk.getAllConversationList(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void getConversationListSplit(MethodCall methodCall, MethodChannel.Result result) { public void getConversationListSplit(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getConversationListSplit( Open_im_sdk.getConversationListSplit(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
int2long(methodCall, "offset"), int2long(methodCall, "offset"),
int2long(methodCall, "count") int2long(methodCall, "count")
@@ -32,32 +34,25 @@ public class ConversationManager extends BaseManager {
public void getOneConversation(MethodCall methodCall, MethodChannel.Result result) { public void getOneConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getOneConversation( Open_im_sdk.getOneConversation(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
int2long(methodCall, "sessionType"), value(methodCall, "sessionType"),
value(methodCall, "sourceID") value(methodCall, "sourceID")
); );
} }
public void getMultipleConversation(MethodCall methodCall, MethodChannel.Result result) { public void getMultipleConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getMultipleConversation( Open_im_sdk.getMultipleConversation(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "conversationIDList") jsonValue(methodCall, "conversationIDList")
); );
} }
public void deleteConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteConversation(
new OnBaseListener(result),
value(methodCall, "operationID"),
value(methodCall, "conversationID")
);
}
public void setConversationDraft(MethodCall methodCall, MethodChannel.Result result) { public void setConversationDraft(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationDraft( Open_im_sdk.setConversationDraft(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "conversationID"), value(methodCall, "conversationID"),
value(methodCall, "draftText") value(methodCall, "draftText")
@@ -66,56 +61,139 @@ public class ConversationManager extends BaseManager {
public void pinConversation(MethodCall methodCall, MethodChannel.Result result) { public void pinConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.pinConversation( Open_im_sdk.pinConversation(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "conversationID"), value(methodCall, "conversationID"),
value(methodCall, "isPinned") value(methodCall, "isPinned")
); );
} }
// public void markSingleMessageHasRead(MethodCall methodCall, MethodChannel.Result result) { public void hideConversation(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.markSingleMessageHasRead( Open_im_sdk.hideConversation(
// new OnBaseListener(result), new OnBaseListener(result, methodCall),
// value(methodCall, "operationID"),
// value(methodCall, "userID")
// );
// }
public void markGroupMessageHasRead(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.markGroupMessageHasRead(
new OnBaseListener(result),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "groupID") value(methodCall, "conversationID")
);
}
public void markConversationMessageAsRead(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.markConversationMessageAsRead(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID")
); );
} }
public void getTotalUnreadMsgCount(MethodCall methodCall, MethodChannel.Result result) { public void getTotalUnreadMsgCount(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getTotalUnreadMsgCount( Open_im_sdk.getTotalUnreadMsgCount(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void getConversationIDBySessionType(MethodCall methodCall, MethodChannel.Result result) { public void getConversationIDBySessionType(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result, Open_im_sdk.getConversationIDBySessionType( CommonUtil.runMainThreadReturn(result, Open_im_sdk.getConversationIDBySessionType(
value(methodCall, "operationID"),
value(methodCall, "sourceID"), value(methodCall, "sourceID"),
int2long(methodCall, "sessionType"))); int2long(methodCall, "sessionType")));
} }
public void setConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) { public void setConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationRecvMessageOpt( Open_im_sdk.setConversationRecvMessageOpt(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "conversationIDList"), value(methodCall, "conversationID"),
int2long(methodCall, "status") int2long(methodCall, "status")
); );
} }
public void getConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) { public void getConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getConversationRecvMessageOpt( Open_im_sdk.getConversationRecvMessageOpt(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "conversationIDList") jsonValue(methodCall, "conversationIDList")
); );
} }
public void setConversationPrivateChat(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationPrivateChat(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "isPrivate")
);
}
public void clearConversationAndDeleteAllMsg(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearConversationAndDeleteAllMsg(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID")
);
}
public void deleteConversationAndDeleteAllMsg(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteConversationAndDeleteAllMsg(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID")
);
}
public void deleteAllConversationFromLocal(MethodCall methodCall, MethodChannel.Result result) {
}
public void resetConversationGroupAtType(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.resetConversationGroupAtType(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID")
);
}
public void getAtAllTag(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result, Open_im_sdk.getAtAllTag(value(methodCall, "operationID")));
}
public void setGlobalRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGlobalRecvMessageOpt(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
int2long(methodCall, "status")
);
}
public void setConversationBurnDuration(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationBurnDuration(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "burnDuration")
);
}
public void setConversationIsMsgDestruct(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationIsMsgDestruct(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "isMsgDestruct")
);
}
public void setConversationMsgDestructTime(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationMsgDestructTime(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
int2long(methodCall, "duration")
);
}
public void hideAllConversations(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.hideAllConversations(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
} }

View File

@@ -11,48 +11,50 @@ public class FriendshipManager extends BaseManager {
public void setFriendListener(MethodCall methodCall, MethodChannel.Result result) { public void setFriendListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setFriendListener(new OnFriendshipListener()); Open_im_sdk.setFriendListener(new OnFriendshipListener());
result.success(null);
} }
public void getFriendsInfo(MethodCall methodCall, MethodChannel.Result result) { public void getFriendsInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getDesignatedFriendsInfo( Open_im_sdk.getSpecifiedFriendsInfo(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList")
); );
} }
public void addFriend(MethodCall methodCall, MethodChannel.Result result) { public void addFriend(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.addFriend( Open_im_sdk.addFriend(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) jsonValue(methodCall)
); );
} }
public void getRecvFriendApplicationList(MethodCall methodCall, MethodChannel.Result result) { public void getFriendApplicationListAsRecipient(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getRecvFriendApplicationList( Open_im_sdk.getFriendApplicationListAsRecipient(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void getSendFriendApplicationList(MethodCall methodCall, MethodChannel.Result result) { public void getFriendApplicationListAsApplicant(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getSendFriendApplicationList( Open_im_sdk.getFriendApplicationListAsApplicant(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void getFriendList(MethodCall methodCall, MethodChannel.Result result) { public void getFriendList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getFriendList( Open_im_sdk.getFriendList(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void setFriendRemark(MethodCall methodCall, MethodChannel.Result result) { public void setFriendRemark(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setFriendRemark( Open_im_sdk.setFriendRemark(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) jsonValue(methodCall)
); );
@@ -60,46 +62,46 @@ public class FriendshipManager extends BaseManager {
public void addBlacklist(MethodCall methodCall, MethodChannel.Result result) { public void addBlacklist(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.addBlack( Open_im_sdk.addBlack(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid") value(methodCall, "userID")
); );
} }
public void getBlacklist(MethodCall methodCall, MethodChannel.Result result) { public void getBlacklist(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getBlackList( Open_im_sdk.getBlackList(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void removeBlacklist(MethodCall methodCall, MethodChannel.Result result) { public void removeBlacklist(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.removeBlack( Open_im_sdk.removeBlack(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid") value(methodCall, "userID")
); );
} }
public void checkFriend(MethodCall methodCall, MethodChannel.Result result) { public void checkFriend(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.checkFriend( Open_im_sdk.checkFriend(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList")
); );
} }
public void deleteFriend(MethodCall methodCall, MethodChannel.Result result) { public void deleteFriend(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteFriend( Open_im_sdk.deleteFriend(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid") value(methodCall, "userID")
); );
} }
public void acceptFriendApplication(MethodCall methodCall, MethodChannel.Result result) { public void acceptFriendApplication(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.acceptFriendApplication( Open_im_sdk.acceptFriendApplication(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) jsonValue(methodCall)
); );
@@ -107,21 +109,17 @@ public class FriendshipManager extends BaseManager {
public void refuseFriendApplication(MethodCall methodCall, MethodChannel.Result result) { public void refuseFriendApplication(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.refuseFriendApplication( Open_im_sdk.refuseFriendApplication(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) jsonValue(methodCall)
); );
} }
// public void forceSyncFriendApplication(MethodCall methodCall, MethodChannel.Result result) { public void searchFriends(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.forceSyncFriendApplication(); Open_im_sdk.searchFriends(
// } new OnBaseListener(result, methodCall),
// value(methodCall, "operationID"),
// public void forceSyncFriend(MethodCall methodCall, MethodChannel.Result result) { jsonValue(methodCall, "searchParam")
// Open_im_sdk.forceSyncFriend(); );
// } }
//
// public void forceSyncBlackList(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.forceSyncBlackList();
// }
} }

View File

@@ -10,42 +10,44 @@ public class GroupManager extends BaseManager {
public void setGroupListener(MethodCall methodCall, MethodChannel.Result result) { public void setGroupListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupListener(new OnGroupListener()); Open_im_sdk.setGroupListener(new OnGroupListener());
result.success(null);
} }
public void inviteUserToGroup(MethodCall methodCall, MethodChannel.Result result) { public void inviteUserToGroup(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.inviteUserToGroup( Open_im_sdk.inviteUserToGroup(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "reason"), value(methodCall, "reason"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList")
); );
} }
public void kickGroupMember(MethodCall methodCall, MethodChannel.Result result) { public void kickGroupMember(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.kickGroupMember( Open_im_sdk.kickGroupMember(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "reason"), value(methodCall, "reason"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList")
); );
} }
public void getGroupMembersInfo(MethodCall methodCall, MethodChannel.Result result) { public void getGroupMembersInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getGroupMembersInfo( Open_im_sdk.getSpecifiedGroupMembersInfo(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList")
); );
} }
public void getGroupMemberList(MethodCall methodCall, MethodChannel.Result result) { public void getGroupMemberList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getGroupMemberList( Open_im_sdk.getGroupMemberList(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "filter"), value(methodCall, "filter"),
value(methodCall, "offset"), value(methodCall, "offset"),
value(methodCall, "count") value(methodCall, "count")
@@ -55,83 +57,82 @@ public class GroupManager extends BaseManager {
public void getJoinedGroupList(MethodCall methodCall, MethodChannel.Result result) { public void getJoinedGroupList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getJoinedGroupList( Open_im_sdk.getJoinedGroupList(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void createGroup(MethodCall methodCall, MethodChannel.Result result) { public void createGroup(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.createGroup( Open_im_sdk.createGroup(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "gInfo"), jsonValue(methodCall)
jsonValue(methodCall, "memberList")
); );
} }
public void setGroupInfo(MethodCall methodCall, MethodChannel.Result result) { public void setGroupInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupInfo( Open_im_sdk.setGroupInfo(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), jsonValue(methodCall, "groupInfo")
jsonValue(methodCall, "gInfo")
); );
} }
public void getGroupsInfo(MethodCall methodCall, MethodChannel.Result result) { public void getGroupsInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getGroupsInfo( Open_im_sdk.getSpecifiedGroupsInfo(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "gidList") jsonValue(methodCall, "groupIDList")
); );
} }
public void joinGroup(MethodCall methodCall, MethodChannel.Result result) { public void joinGroup(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.joinGroup( Open_im_sdk.joinGroup(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "reason") value(methodCall, "reason"),
value(methodCall, "joinSource")
); );
} }
public void quitGroup(MethodCall methodCall, MethodChannel.Result result) { public void quitGroup(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.quitGroup( Open_im_sdk.quitGroup(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid") value(methodCall, "groupID")
); );
} }
public void transferGroupOwner(MethodCall methodCall, MethodChannel.Result result) { public void transferGroupOwner(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.transferGroupOwner( Open_im_sdk.transferGroupOwner(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "uid") value(methodCall, "userID")
); );
} }
public void getRecvGroupApplicationList(MethodCall methodCall, MethodChannel.Result result) { public void getGroupApplicationListAsRecipient(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getRecvGroupApplicationList( Open_im_sdk.getGroupApplicationListAsRecipient(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void getSendGroupApplicationList(MethodCall methodCall, MethodChannel.Result result) { public void getGroupApplicationListAsApplicant(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getSendGroupApplicationList( Open_im_sdk.getGroupApplicationListAsApplicant(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void acceptGroupApplication(MethodCall methodCall, MethodChannel.Result result) { public void acceptGroupApplication(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.acceptGroupApplication( Open_im_sdk.acceptGroupApplication(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "uid"), value(methodCall, "userID"),
value(methodCall, "handleMsg") value(methodCall, "handleMsg")
); );
@@ -139,28 +140,128 @@ public class GroupManager extends BaseManager {
public void refuseGroupApplication(MethodCall methodCall, MethodChannel.Result result) { public void refuseGroupApplication(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.refuseGroupApplication( Open_im_sdk.refuseGroupApplication(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "uid"), value(methodCall, "userID"),
value(methodCall, "handleMsg") value(methodCall, "handleMsg")
); );
} }
// public void forceSyncApplyGroupRequest(MethodCall methodCall, MethodChannel.Result result) { public void dismissGroup(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.forceSyncApplyGroupRequest(); Open_im_sdk.dismissGroup(
// } new OnBaseListener(result, methodCall),
// value(methodCall, "operationID"),
// public void forceSyncGroupRequest(MethodCall methodCall, MethodChannel.Result result) { value(methodCall, "groupID")
// Open_im_sdk.forceSyncGroupRequest(); );
// } }
//
// public void forceSyncJoinedGroup(MethodCall methodCall, MethodChannel.Result result) { public void changeGroupMute(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.forceSyncJoinedGroup(); Open_im_sdk.changeGroupMute(
// } new OnBaseListener(result, methodCall),
// value(methodCall, "operationID"),
// public void forceSyncJoinedGroupMember(MethodCall methodCall, MethodChannel.Result result) { value(methodCall, "groupID"),
// Open_im_sdk.forceSyncJoinedGroupMember(); value(methodCall, "mute")
// } );
}
public void changeGroupMemberMute(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.changeGroupMemberMute(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
value(methodCall, "userID"),
int2long(methodCall, "seconds")
);
}
public void setGroupMemberNickname(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupMemberNickname(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
value(methodCall, "userID"),
value(methodCall, "groupNickname")
);
}
public void searchGroups(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchGroups(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "searchParam")
);
}
public void setGroupMemberRoleLevel(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupMemberRoleLevel(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
value(methodCall, "userID"),
int2long(methodCall, "roleLevel")
);
}
public void getGroupMemberListByJoinTimeFilter(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getGroupMemberListByJoinTimeFilter(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
value(methodCall, "offset"),
value(methodCall, "count"),
int2long(methodCall, "joinTimeBegin"),
int2long(methodCall, "joinTimeEnd"),
jsonValue(methodCall, "excludeUserIDList")
);
}
public void setGroupVerification(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupVerification(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
value(methodCall, "needVerification")
);
}
public void setGroupLookMemberInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupLookMemberInfo(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
value(methodCall, "status")
);
}
public void setGroupApplyMemberFriend(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupApplyMemberFriend(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
value(methodCall, "status")
);
}
public void getGroupMemberOwnerAndAdmin(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getGroupMemberOwnerAndAdmin(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID")
);
}
public void searchGroupMembers(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchGroupMembers(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "searchParam")
);
}
public void setGroupMemberInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupMemberInfo(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "info")
);
}
public void isJoinGroup(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.isJoinGroup(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID")
);
}
} }

View File

@@ -2,64 +2,87 @@ package io.openim.flutter_openim_sdk.manager;
import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel;
import io.openim.flutter_openim_sdk.FlutterOpenimSdkPlugin;
import io.openim.flutter_openim_sdk.listener.OnBaseListener; import io.openim.flutter_openim_sdk.listener.OnBaseListener;
import io.openim.flutter_openim_sdk.listener.OnConnListener; import io.openim.flutter_openim_sdk.listener.OnConnListener;
import io.openim.flutter_openim_sdk.listener.OnUploadFileListener;
import io.openim.flutter_openim_sdk.util.CommonUtil; import io.openim.flutter_openim_sdk.util.CommonUtil;
import open_im_sdk.Open_im_sdk; import open_im_sdk.Open_im_sdk;
public class IMManager extends BaseManager { public class IMManager extends BaseManager {
public void initSDK(MethodCall methodCall, MethodChannel.Result result) { public void initSDK(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result, Open_im_sdk.initSDK( boolean initialized = Open_im_sdk.initSDK(
new OnConnListener(), new OnConnListener(),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall)) jsonValue(methodCall));
); FlutterOpenimSdkPlugin.isInitialized = initialized;
CommonUtil.runMainThreadReturn(result, initialized);
}
public void unInitSDK(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.unInitSDK(value(methodCall, "operationID"));
} }
public void login(MethodCall methodCall, MethodChannel.Result result) { public void login(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.login( Open_im_sdk.login(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid"), value(methodCall, "userID"),
value(methodCall, "token") value(methodCall, "token")
); );
} }
public void logout(MethodCall methodCall, MethodChannel.Result result) { public void logout(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.logout( Open_im_sdk.logout(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void getLoginStatus(MethodCall methodCall, MethodChannel.Result result) { public void getLoginStatus(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result, Open_im_sdk.getLoginStatus()); CommonUtil.runMainThreadReturn(result, Open_im_sdk.getLoginStatus(value(methodCall, "operationID")));
} }
// public void getLoginUid(MethodCall methodCall, MethodChannel.Result result) { public void uploadFile(MethodCall methodCall, MethodChannel.Result result) {
// CommonUtil.runMainThreadReturn(result, Open_im_sdk.getLoginUid()); Open_im_sdk.uploadFile(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall),
new OnUploadFileListener(result, methodCall)
);
}
public void updateFcmToken(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.updateFcmToken(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "fcmToken"),
int2long(methodCall, "expireTime")
);
}
public void setAppBackgroundStatus(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setAppBackgroundStatus(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "isBackground")
);
}
public void networkStatusChanged(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.networkStatusChanged(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
// public void setListenerForService(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.setListenerForService(new OnListenerForService());
//
// result.success(null);
// } // }
// public void getUsersInfo(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.getUsersInfo(
// jsonValue(methodCall, "uidList"), new BaseListener(result));
// }
// public void setSelfInfo(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.setSelfInfo(
// jsonValue(methodCall), new BaseListener(result));
// }
// public void forceSyncLoginUerInfo(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.forceSyncLoginUerInfo();
// }
// public void forceReConn(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.forceReConn();
// }
// public void setSdkLog(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.setSdkLog(value(methodCall, "sdkLog"));
// }
} }

View File

@@ -4,6 +4,7 @@ import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel;
import io.openim.flutter_openim_sdk.listener.OnAdvancedMsgListener; import io.openim.flutter_openim_sdk.listener.OnAdvancedMsgListener;
import io.openim.flutter_openim_sdk.listener.OnBaseListener; import io.openim.flutter_openim_sdk.listener.OnBaseListener;
import io.openim.flutter_openim_sdk.listener.OnCustomBusinessListener;
import io.openim.flutter_openim_sdk.listener.OnMsgSendListener; import io.openim.flutter_openim_sdk.listener.OnMsgSendListener;
import io.openim.flutter_openim_sdk.util.CommonUtil; import io.openim.flutter_openim_sdk.util.CommonUtil;
import open_im_sdk.Open_im_sdk; import open_im_sdk.Open_im_sdk;
@@ -11,77 +12,12 @@ import open_im_sdk.Open_im_sdk;
public class MessageManager extends BaseManager { public class MessageManager extends BaseManager {
private final static String KEY_ID = "id"; private final static String KEY_ID = "id";
// private final static Map<String, OnAdvancedMsgListener> listeners = new HashMap<>();
/* private static boolean initializedListener = false;
private final static Map<String, AdvancedMsgListener> listeners = new ConcurrentHashMap<>();
protected void clearListeners() {
initializedListener = false;
listeners.clear();
}
private final static OnAdvancedMsgListener sdkMsgListener = new OnAdvancedMsgListener() {
@Override
public void onRecvC2CReadReceipt(String s) {
for (AdvancedMsgListener l : listeners.values()) {
l.onRecvC2CReadReceipt(s);
}
}
@Override
public void onRecvMessageRevoked(String s) {
for (AdvancedMsgListener l : listeners.values()) {
l.onRecvMessageRevoked(s);
}
}
@Override
public void onRecvNewMessage(String s) {
for (AdvancedMsgListener l : listeners.values()) {
l.onRecvNewMessage(s);
}
}
};
public void addAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) {
String key = methodCall.argument(KEY_ID);
Open_im_sdk.addAdvancedMsgListener(new AdvancedMsgListener(key));
listeners.put(key, new AdvancedMsgListener(key));
if (!initializedListener) {
initializedListener = true;
Open_im_sdk.addAdvancedMsgListener(sdkMsgListener);
}
}
public void removeAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) {
String key = methodCall.argument(KEY_ID);
listeners.remove(key);
if (listeners.isEmpty()) {
initializedListener = false;
Open_im_sdk.removeAdvancedMsgListener(sdkMsgListener);
}
}*/
/*
public void addAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) {
String key = methodCall.argument(KEY_ID);
if (!listeners.containsKey(key)) {
AdvancedMsgListener listener = new AdvancedMsgListener(key);
listeners.put(methodCall.argument(KEY_ID), listener);
Open_im_sdk.addAdvancedMsgListener(listener);
}
}
public void removeAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) {
String key = methodCall.argument(KEY_ID);
OnAdvancedMsgListener listener = listeners.remove(key);
Open_im_sdk.removeAdvancedMsgListener(listener);
}
*/
public void setAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) { public void setAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) {
String key = methodCall.argument(KEY_ID); String key = methodCall.argument(KEY_ID);
Open_im_sdk.setAdvancedMsgListener(new OnAdvancedMsgListener(key)); Open_im_sdk.setAdvancedMsgListener(new OnAdvancedMsgListener(key));
result.success(null);
} }
public void sendMessage(MethodCall methodCall, MethodChannel.Result result) { public void sendMessage(MethodCall methodCall, MethodChannel.Result result) {
@@ -95,37 +31,50 @@ public class MessageManager extends BaseManager {
); );
} }
public void getHistoryMessageList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getHistoryMessageList(
new OnBaseListener(result),
value(methodCall, "operationID"),
jsonValue(methodCall)
);
}
public void revokeMessage(MethodCall methodCall, MethodChannel.Result result) { public void revokeMessage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.revokeMessage( Open_im_sdk.revokeMessage(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) value(methodCall, "conversationID"),
value(methodCall, "clientMsgID")
); );
} }
public void deleteMessageFromLocalStorage(MethodCall methodCall, MethodChannel.Result result) { public void deleteMessageFromLocalStorage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteMessageFromLocalStorage( Open_im_sdk.deleteMessageFromLocalStorage(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) value(methodCall, "conversationID"),
value(methodCall, "clientMsgID")
); );
} }
// public void deleteMessages(MethodCall methodCall, MethodChannel.Result result) { public void deleteMessageFromLocalAndSvr(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.deleteMessages(new OnBaseListener(result), CommonUtil.getSDKJsonParam(methodCall)); Open_im_sdk.deleteMessage(
// } new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "clientMsgID")
);
}
public void deleteAllMsgFromLocal(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteAllMsgFromLocal(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
public void deleteAllMsgFromLocalAndSvr(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteAllMsgFromLocalAndSvr(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
public void insertSingleMessageToLocalStorage(MethodCall methodCall, MethodChannel.Result result) { public void insertSingleMessageToLocalStorage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.insertSingleMessageToLocalStorage( Open_im_sdk.insertSingleMessageToLocalStorage(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "message"), jsonValue(methodCall, "message"),
value(methodCall, "receiverID"), value(methodCall, "receiverID"),
@@ -133,22 +82,28 @@ public class MessageManager extends BaseManager {
); );
} }
// public void findMessages(MethodCall methodCall, MethodChannel.Result result) { public void insertGroupMessageToLocalStorage(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.findMessages(new OnBaseListener(result), jsonValue(methodCall, "messageIDList")); Open_im_sdk.insertGroupMessageToLocalStorage(
// } new OnBaseListener(result, methodCall),
public void markC2CMessageAsRead(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.markC2CMessageAsRead(
new OnBaseListener(result),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "userID"), jsonValue(methodCall, "message"),
value(methodCall, "groupID"),
value(methodCall, "senderID")
);
}
public void markMessagesAsReadByMsgID(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.markMessagesAsReadByMsgID(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
jsonValue(methodCall, "messageIDList") jsonValue(methodCall, "messageIDList")
); );
} }
public void typingStatusUpdate(MethodCall methodCall, MethodChannel.Result result) { public void typingStatusUpdate(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.typingStatusUpdate( Open_im_sdk.typingStatusUpdate(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "userID"), value(methodCall, "userID"),
value(methodCall, "msgTip") value(methodCall, "msgTip")
@@ -167,7 +122,10 @@ public class MessageManager extends BaseManager {
Open_im_sdk.createTextAtMessage( Open_im_sdk.createTextAtMessage(
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "text"), value(methodCall, "text"),
jsonValue(methodCall, "atUserList"))); jsonValue(methodCall, "atUserIDList"),
jsonValue(methodCall, "atUserInfoList"),
jsonValue(methodCall, "quoteMessage")
));
} }
public void createImageMessage(MethodCall methodCall, MethodChannel.Result result) { public void createImageMessage(MethodCall methodCall, MethodChannel.Result result) {
@@ -183,6 +141,7 @@ public class MessageManager extends BaseManager {
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "imagePath"))); value(methodCall, "imagePath")));
} }
public void createSoundMessage(MethodCall methodCall, MethodChannel.Result result) { public void createSoundMessage(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result, CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createSoundMessage( Open_im_sdk.createSoundMessage(
@@ -285,23 +244,138 @@ public class MessageManager extends BaseManager {
)); ));
} }
// public void forceSyncMsg(MethodCall methodCall, MethodChannel.Result result) { public void createFaceMessage(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.forceSyncMsg(); CommonUtil.runMainThreadReturn(result, Open_im_sdk.createFaceMessage(
// }
public void clearC2CHistoryMessage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearC2CHistoryMessage(
new OnBaseListener(result),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "userID") int2long(methodCall, "index"),
value(methodCall, "data")
));
}
public void createAdvancedTextMessage(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createAdvancedTextMessage(
value(methodCall, "operationID"),
value(methodCall, "text"),
jsonValue(methodCall, "richMessageInfoList")
));
}
public void createAdvancedQuoteMessage(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createAdvancedQuoteMessage(
value(methodCall, "operationID"),
value(methodCall, "quoteText"),
jsonValue(methodCall, "quoteMessage"),
jsonValue(methodCall, "richMessageInfoList")
));
}
public void searchLocalMessages(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchLocalMessages(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "filter")
); );
} }
public void clearGroupHistoryMessage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearGroupHistoryMessage( public void clearConversationAndDeleteAllMsg(MethodCall methodCall, MethodChannel.Result result) {
new OnBaseListener(result), Open_im_sdk.clearConversationAndDeleteAllMsg(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "groupID") value(methodCall, "conversationID")
); );
} }
public void getAdvancedHistoryMessageList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getAdvancedHistoryMessageList(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall)
);
}
public void getAdvancedHistoryMessageListReverse(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getAdvancedHistoryMessageListReverse(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall)
);
}
public void findMessageList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.findMessageList(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "searchParams")
);
}
public void setMessageLocalEx(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setMessageLocalEx(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "clientMsgID"),
value(methodCall, "localEx")
);
}
public void setAppBadge(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setAppBadge(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "count")
);
}
public void sendMessageNotOss(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.sendMessageNotOss(
new OnMsgSendListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "message"),
value(methodCall, "userID"),
value(methodCall, "groupID"),
jsonValue(methodCall, "offlinePushInfo")
);
}
public void createImageMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createImageMessageByURL(
value(methodCall, "operationID"),
value(methodCall, "sourcePath"),
jsonValue(methodCall, "sourcePicture"),
jsonValue(methodCall, "bigPicture"),
jsonValue(methodCall, "snapshotPicture")));
}
public void createSoundMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createSoundMessageByURL(
value(methodCall, "operationID"),
jsonValue(methodCall, "soundElem")));
}
public void createVideoMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createVideoMessageByURL(
value(methodCall, "operationID"),
jsonValue(methodCall, "videoElem")));
}
public void createFileMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createFileMessageByURL(
value(methodCall, "operationID"),
jsonValue(methodCall, "fileElem")));
}
public void setCustomBusinessListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setCustomBusinessListener(new OnCustomBusinessListener());
result.success(null);
}
} }

View File

@@ -10,26 +10,63 @@ public class UserManager extends BaseManager {
public void setUserListener(MethodCall methodCall, MethodChannel.Result result) { public void setUserListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setUserListener(new OnUserListener()); Open_im_sdk.setUserListener(new OnUserListener());
result.success(null);
} }
public void getUsersInfo(MethodCall methodCall, MethodChannel.Result result) { public void getUsersInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getUsersInfo( Open_im_sdk.getUsersInfo(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "uidList")); jsonValue(methodCall, "userIDList"));
} }
public void setSelfInfo(MethodCall methodCall, MethodChannel.Result result) { public void setSelfInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setSelfInfo( Open_im_sdk.setSelfInfo(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall)); jsonValue(methodCall));
} }
public void getSelfUserInfo(MethodCall methodCall, MethodChannel.Result result) { public void getSelfUserInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getSelfUserInfo( Open_im_sdk.getSelfUserInfo(
new OnBaseListener(result), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void subscribeUsersStatus(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.subscribeUsersStatus(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "userIDs"));
}
public void unsubscribeUsersStatus(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.unsubscribeUsersStatus(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "userIDs"));
}
public void getSubscribeUsersStatus(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getSubscribeUsersStatus(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
public void getUserStatus(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getUserStatus(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "userIDs"));
}
public void getUsersInfoWithCache(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getUsersInfoWithCache(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "userIDs"),
value(methodCall, "groupID"));
}
} }

View File

@@ -4,8 +4,9 @@ import org.json.JSONObject;
public class JsonUtil { public class JsonUtil {
public static String toString(Object o) { public static String toString(Object o) {
if (o == null) return null;
if (o instanceof String) { if (o instanceof String) {
StringBuffer buffer = new StringBuffer(); StringBuilder buffer = new StringBuilder();
buffer.append("\""); buffer.append("\"");
buffer.append(o); buffer.append(o);
buffer.append("\""); buffer.append("\"");

View File

@@ -21,6 +21,6 @@
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.0</string> <string>1.0</string>
<key>MinimumOSVersion</key> <key>MinimumOSVersion</key>
<string>9.0</string> <string>11.0</string>
</dict> </dict>
</plist> </plist>

View File

@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project # Uncomment this line to define a global platform for your project
# platform :ios, '9.0' platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency. # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true' ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@@ -3,14 +3,14 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 51; objectVersion = 54;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
6F7F8B794B6D663E7A65A104 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1971A63CCEC4B744C25980F8 /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
79CF11091A38454F94DA1EB4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F48A41A58786A29BEEBCFE3 /* Pods_Runner.framework */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@@ -30,16 +30,16 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
076751BE520B721535096B75 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
1971A63CCEC4B744C25980F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2F48A41A58786A29BEEBCFE3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3A6AB9CCD90A2F5C2CE719D0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
3F8F3496860058CED33C418C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
564E6205C72C7CB32AC49601 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7CF14C3CACE83F04F858C9EC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; }; 85A1617DD2AFC45DFFDD8B11 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -54,17 +54,17 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
6F7F8B794B6D663E7A65A104 /* Pods_Runner.framework in Frameworks */, 79CF11091A38454F94DA1EB4 /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
4B877210D623EE0FDE18A08F /* Frameworks */ = { 0EDFEBEB76AE7FAFA44EF2AF /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
1971A63CCEC4B744C25980F8 /* Pods_Runner.framework */, 2F48A41A58786A29BEEBCFE3 /* Pods_Runner.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -87,7 +87,7 @@
97C146F01CF9000F007C117D /* Runner */, 97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */, 97C146EF1CF9000F007C117D /* Products */,
E653626F5A38799455FF26C4 /* Pods */, E653626F5A38799455FF26C4 /* Pods */,
4B877210D623EE0FDE18A08F /* Frameworks */, 0EDFEBEB76AE7FAFA44EF2AF /* Frameworks */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@@ -117,9 +117,9 @@
E653626F5A38799455FF26C4 /* Pods */ = { E653626F5A38799455FF26C4 /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
7CF14C3CACE83F04F858C9EC /* Pods-Runner.debug.xcconfig */, 85A1617DD2AFC45DFFDD8B11 /* Pods-Runner.debug.xcconfig */,
3A6AB9CCD90A2F5C2CE719D0 /* Pods-Runner.release.xcconfig */, 3F8F3496860058CED33C418C /* Pods-Runner.release.xcconfig */,
076751BE520B721535096B75 /* Pods-Runner.profile.xcconfig */, 564E6205C72C7CB32AC49601 /* Pods-Runner.profile.xcconfig */,
); );
path = Pods; path = Pods;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -131,14 +131,13 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
FA9CAD2EF743D14467F7D993 /* [CP] Check Pods Manifest.lock */, DFE84742E2B41158E8703A14 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */, 9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */, 97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */, 97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */, 97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */, 9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
215A1CA82008A326A8ECBF65 /* [CP] Embed Pods Frameworks */,
); );
buildRules = ( buildRules = (
); );
@@ -197,25 +196,9 @@
/* End PBXResourcesBuildPhase section */ /* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */
215A1CA82008A326A8ECBF65 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
@@ -230,6 +213,7 @@
}; };
9740EEB61CF901F6004384FC /* Run Script */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
@@ -242,7 +226,7 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
}; };
FA9CAD2EF743D14467F7D993 /* [CP] Check Pods Manifest.lock */ = { DFE84742E2B41158E8703A14 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@@ -302,6 +286,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = arm64;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -339,7 +324,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0; IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;
@@ -363,7 +348,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.openim.flutterOpenimSdkExample; PRODUCT_BUNDLE_IDENTIFIER = cn.rentsoft.uni;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@@ -375,6 +360,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = arm64;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -418,7 +404,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0; IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES; MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos; SDKROOT = iphoneos;
@@ -430,6 +416,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = arm64;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -467,7 +454,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0; IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;
@@ -493,7 +480,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.openim.flutterOpenimSdkExample; PRODUCT_BUNDLE_IDENTIFIER = cn.rentsoft.uni;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -517,7 +504,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.openim.flutterOpenimSdkExample; PRODUCT_BUNDLE_IDENTIFIER = cn.rentsoft.uni;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;

View File

@@ -1,122 +1,103 @@
{ {
"images" : [ "images" : [
{ {
"size" : "20x20",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "20x20"
}, },
{ {
"size" : "20x20",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png", "scale" : "3x",
"scale" : "3x" "size" : "20x20"
}, },
{ {
"size" : "29x29",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png", "scale" : "1x",
"scale" : "1x" "size" : "29x29"
}, },
{ {
"size" : "29x29",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "29x29"
}, },
{ {
"size" : "29x29",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png", "scale" : "3x",
"scale" : "3x" "size" : "29x29"
}, },
{ {
"size" : "40x40",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "40x40"
}, },
{ {
"size" : "40x40",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png", "scale" : "3x",
"scale" : "3x" "size" : "40x40"
}, },
{ {
"size" : "60x60",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "60x60"
}, },
{ {
"size" : "60x60",
"idiom" : "iphone", "idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png", "scale" : "3x",
"scale" : "3x" "size" : "60x60"
}, },
{ {
"size" : "20x20",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png", "scale" : "1x",
"scale" : "1x" "size" : "20x20"
}, },
{ {
"size" : "20x20",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "20x20"
}, },
{ {
"size" : "29x29",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png", "scale" : "1x",
"scale" : "1x" "size" : "29x29"
}, },
{ {
"size" : "29x29",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "29x29"
}, },
{ {
"size" : "40x40",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png", "scale" : "1x",
"scale" : "1x" "size" : "40x40"
}, },
{ {
"size" : "40x40",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "40x40"
}, },
{ {
"size" : "76x76",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png", "scale" : "1x",
"scale" : "1x" "size" : "76x76"
}, },
{ {
"size" : "76x76",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "76x76"
}, },
{ {
"size" : "83.5x83.5",
"idiom" : "ipad", "idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x",
"scale" : "2x" "size" : "83.5x83.5"
}, },
{ {
"size" : "1024x1024",
"idiom" : "ios-marketing", "idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png", "scale" : "1x",
"scale" : "1x" "size" : "1024x1024"
} }
], ],
"info" : { "info" : {
"version" : 1, "author" : "xcode",
"author" : "xcode" "version" : 1
} }
} }

View File

@@ -2,22 +2,19 @@
"images" : [ "images" : [
{ {
"idiom" : "universal", "idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x" "scale" : "1x"
}, },
{ {
"idiom" : "universal", "idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"idiom" : "universal", "idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x" "scale" : "3x"
} }
], ],
"info" : { "info" : {
"version" : 1, "author" : "xcode",
"author" : "xcode" "version" : 1
} }
} }

View File

@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
@@ -22,6 +24,8 @@
<string>$(FLUTTER_BUILD_NUMBER)</string> <string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
<string>LaunchScreen</string> <string>LaunchScreen</string>
<key>UIMainStoryboardFile</key> <key>UIMainStoryboardFile</key>

View File

@@ -1,4 +1,3 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
@@ -15,6 +14,13 @@ class _MyAppState extends State<MyApp> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
OpenIM.iMManager.initSDK(
platformID: 1,
apiAddr: '',
wsAddr: '',
dataDir: '/',
objectStorage: 'minio',
listener: OnConnectListener());
} }
@override @override
@@ -32,520 +38,4 @@ class _MyAppState extends State<MyApp> {
), ),
); );
} }
void initSDK() {
OpenIM.iMManager
.initSDK(
// "当前平台参照IMPlatform类",
platform: 0,
// SDK的API接口地址。如http:xxx:10000
apiAddr: "",
// SDK的web socket地址。如 ws:xxx:17778
wsAddr: "",
// 数据存储路径。如var apath =(await getApplicationDocumentsDirectory()).path
dataDir: "",
listener: OnConnectListener(
onConnectSuccess: () {
// 已经成功连接到服务器
},
onConnecting: () {
// 正在连接到服务器,适合在 UI 上展示“正在连接”状态。
},
onConnectFailed: (code, errorMsg) {
// 连接服务器失败,可以提示用户当前网络连接不可用
},
onUserSigExpired: () {
// 登录票据已经过期,请使用新签发的 UserSig 进行登录。
},
onKickedOffline: () {
// 当前用户被踢下线,此时可以 UI 提示用户“您已经在其他端登录了当前账号,是否重新登录?”
},
),
)
.then((value) {
if (value == true) {
// 初始化成功
}
});
}
void setLisenter() {
OpenIM.iMManager
..userManager.setUserListener(OnUserListener(
onSelfInfoUpdated: (userInfo) {
// 当前登录用户资料变更回调
},
))
..messageManager.setAdvancedMsgListener(OnAdvancedMsgListener(
onRecvNewMessage: (message) {
// 收到新消息,界面添加新消息
},
onRecvMessageRevoked: (messageID) {
// 消息成功撤回,从界面移除消息
},
onRecvC2CReadReceipt: (list) {
// 消息被阅读回执,将消息标记为已读
},
))
..messageManager.setMsgSendProgressListener(OnMsgSendProgressListener(
onProgress: (messageID, progress) {
// 消息发送进度回调
},
))
..friendshipManager.setFriendshipListener(OnFriendshipListener(
onFriendApplicationRejected: (applicationInfo) {
// 发出或收到的好友申请被拒绝
},
onFriendApplicationDeleted: (applicationInfo) {
// 发出或收到的好友申请被删除
},
onFriendApplicationAdded: (applicationInfo) {
// 发出或收到的好友申请被添加
},
onFriendApplicationAccepted: (applicationInfo) {
// 发出或收到的好友申请已同意
},
onFriendAdded: (frinedInfo) {
// 好友被添加
},
onFriendDeleted: (frinedInfo) {
// 好友被删除
},
onFriendInfoChanged: (frinedInfo) {
// 朋友的资料发生变化
},
onBlacklistDeleted: (blackInfo) {
// 从黑名单删除
},
onBlacklistAdded: (blackInfo) {
// 拉入黑名单
},
))
..conversationManager.setConversationListener(OnConversationListener(
onNewConversation: (list) {
// 新增会话
},
onConversationChanged: (list) {
// 已添加的会话发送改变
},
onTotalUnreadMessageCountChanged: (count) {
// 未读消息数发送变化
},
))
..groupManager.setGroupListener(OnGroupListener(
onGroupMemberInfoChanged: (memberInfo) {
// 组成员信息发生变化
},
onGroupMemberDeleted: (memberInfo) {
// 组成员退出
},
onGroupMemberAdded: (memberInfo) {
// 组成员进入
},
onGroupApplicationRejected: (applicationInfo) {
// 发出或收到的组申请被拒绝
},
onGroupApplicationDeleted: (applicationInfo) {
// 发出或收到的组申请被删除
},
onGroupApplicationAdded: (applicationInfo) {
// 发出或收到的组申请有新增
},
onGroupApplicationAccepted: (applicationInfo) {
// 发出或收到的组申请被接受
},
onJoinedGroupDeleted: (groupInfo) {
// 退出群:退出者收到;踢出群:被踢者收到
},
onJoinedGroupAdded: (groupInfo) {
// 创建群: 初始成员收到;邀请进群:被邀请者收到
},
onGroupInfoChanged: (groupInfo) {
// 组资料变更
},
));
}
void login() {
OpenIM.iMManager
.login(
uid: "", // uid来自于自身业务服务器
token: "", // token需要业务服务器根据secret向OpenIM服务端交换获取
)
.then((value) {
// 返回当前登录用户的资料
});
}
void imMager() {
OpenIM.iMManager.logout().then((_) {
// 退出成功
});
OpenIM.iMManager.getLoginUserInfo().then((userInfo) {
// 当前登录用户的信息
});
OpenIM.iMManager.getLoginUserID().then((userID) {
// 当前登录用户的ID
});
}
void userManager() {
OpenIM.iMManager.userManager.getUsersInfo(
uidList: [], // 用户ID集合
).then((userInfoList) {
// 用户信息列表
});
OpenIM.iMManager.userManager.getSelfUserInfo().then((userInfo) {
// 返回当前登录用户的资料
});
OpenIM.iMManager.userManager
.setSelfInfo(
nickname: '',
// 昵称
faceURL: '',
// 头像
gender: 0,
// 性别: 男1女0
phoneNumber: '',
// 手机号
email: '',
//邮箱
birth: 0,
//生日
ex: '', // 其他信息
)
.then((_) {});
}
void conversationManager() {
OpenIM.iMManager.conversationManager.getAllConversationList().then((list) {
// List<ConversationInfo> 会话列表
});
OpenIM.iMManager.conversationManager.getConversationListSplit(
offset: 0, // 偏移量第1页offet0count20第2页offset20
count: 0, // 每页数量
);
OpenIM.iMManager.conversationManager.getOneConversation(
sourceID: "", // 如果是单聊值传userID如果是群聊groupID
sessionType: 1, // 如果是单聊值传1如果是群聊值传2
);
OpenIM.iMManager.conversationManager.getMultipleConversation(
conversationIDList: [], // 会话ID集合
).then((list) {
// 返回与id匹配的会话列表
});
OpenIM.iMManager.conversationManager
.deleteConversation(
conversationID: "", // 会话id
)
.then((_) => null)
.catchError((_) {});
OpenIM.iMManager.conversationManager.setConversationDraft(
conversationID: "", // 会话id
draftText: "", // 草稿
);
OpenIM.iMManager.conversationManager.pinConversation(
conversationID: "", // 会话id
isPinned: true, // true置顶false取消置顶
);
OpenIM.iMManager.conversationManager.markGroupMessageHasRead(
groupID: "", // 组id
);
OpenIM.iMManager.conversationManager.getTotalUnreadMsgCount();
OpenIM.iMManager.conversationManager.getConversationIDBySessionType(
sourceID: "", // 如果是单聊值传userID如果是群聊groupID
sessionType: 1, // 如果是单聊值传1如果是群聊值传2
);
OpenIM.iMManager.conversationManager.setConversationRecvMessageOpt(
conversationIDList: [], // 会话id列表
status: 1, // 1不接受消息2接受在线消息不接受离线消息0正常
);
OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
conversationIDList: [], // 会话id列表
);
OpenIM.iMManager.conversationManager.simpleSort([]);
}
void friendManager() {
OpenIM.iMManager.friendshipManager.getFriendsInfo(
uidList: [], // userId列表
).then((list) {
// List<UserInfo>
});
OpenIM.iMManager.friendshipManager.addFriend(
uid: "", // 用户id
reason: '', // 发起好友申请的描述信息
);
OpenIM.iMManager.friendshipManager
.getRecvFriendApplicationList()
.then((value) {
// List<FriendApplicationInfo> 申请列表
});
OpenIM.iMManager.friendshipManager
.getSendFriendApplicationList()
.then((list) {
// List<FriendApplicationInfo> 申请列表
});
OpenIM.iMManager.friendshipManager.getFriendList().then((list) {
// List<UserInfo> 好友信息列表
});
OpenIM.iMManager.friendshipManager.setFriendRemark(
uid: '', // 好友userID
remark: '', // 备注名
);
OpenIM.iMManager.friendshipManager.addBlacklist(
uid: "", // 好友userID
);
OpenIM.iMManager.friendshipManager.getBlacklist().then((list) {
// List<UserInfo>
});
OpenIM.iMManager.friendshipManager.removeBlacklist(
uid: "", // userID
);
OpenIM.iMManager.friendshipManager.checkFriend(
uidList: [], // userID 列表
).then((value) {
// List<FriendshipInfo>
});
OpenIM.iMManager.friendshipManager.deleteFriend(
uid: '', // userID
);
OpenIM.iMManager.friendshipManager.acceptFriendApplication(
uid: "", // userID
handleMsg: '', // 备注信息
);
OpenIM.iMManager.friendshipManager.refuseFriendApplication(
uid: "", // userID
handleMsg: '', // 备注信息
);
}
void groupManager() {
OpenIM.iMManager.groupManager
.inviteUserToGroup(
groupId: '', // 组ID
uidList: [], // 成员 userID 列表
reason: '', // 备注信息
)
.then((list) {
// List<GroupInviteResult>
});
OpenIM.iMManager.groupManager.kickGroupMember(
groupId: '', // 组ID
uidList: [], // userID 列表
reason: '', // 备注信息
);
OpenIM.iMManager.groupManager.getGroupMembersInfo(
groupId: '', // 组ID
uidList: [], // 成员 userID 列表
).then((list) {
// List<GroupMembersInfo>
});
OpenIM.iMManager.groupManager
.getGroupMemberList(
groupId: '', // 组ID
filter: 0, // 1普通成员, 2群主3管理员
offset: 0, // 偏移量每次开始的index值
count: 0, // 每次拉取的数量
)
.then((list) {
// List<GroupMembersInfo>
});
OpenIM.iMManager.groupManager.getJoinedGroupList().then((list) {
// List<GroupInfo>
});
OpenIM.iMManager.groupManager
.isJoinedGroup(
gid: '', // 组ID
)
.then((joned) {
// true已加入false未加入
});
OpenIM.iMManager.groupManager.createGroup(
groupName: '',
// 组名
faceUrl: '',
// 头像
notification: '',
// 群公告
introduction: '',
// 群简介
groupType: 0,
// 类型
ex: '',
// 扩展信息
list: [], // 成员角色集合 List<GroupMemberRole>
).then((groupInfo) {
// 返回组信息 GroupInfo
});
OpenIM.iMManager.groupManager.setGroupInfo(
groupID: '',
groupName: '',
// 组名
faceUrl: '',
// 头像
notification: '',
// 群公告
introduction: '',
// 群简介
ex: '', // 扩展信息
);
OpenIM.iMManager.groupManager.getGroupsInfo(
gidList: [], // 组id集合
).then((list) {
// List<GroupInfo>
});
OpenIM.iMManager.groupManager.joinGroup(
gid: '', // 组id
reason: '', // 入群备注信息
);
OpenIM.iMManager.groupManager.quitGroup(
gid: '', // 组id
);
OpenIM.iMManager.groupManager.transferGroupOwner(
gid: '', // 组ID
uid: '', // 新 owner userID
);
OpenIM.iMManager.groupManager.getRecvGroupApplicationList().then((list) {
// List<GroupApplicationInfo>
});
OpenIM.iMManager.groupManager.getSendGroupApplicationList().then((list) {
// List<GroupApplicationInfo>
});
OpenIM.iMManager.groupManager.acceptGroupApplication(
gid: '', // 组ID
uid: '', // 申请人userID
handleMsg: '', // 备注信息
);
OpenIM.iMManager.groupManager.refuseGroupApplication(
gid: '', // 组ID
uid: '', // 申请人userID
handleMsg: '', // 备注信息
);
}
void messageManager() {
OpenIM.iMManager.messageManager.sendMessage(
message: Message(), // 消息体
userID: '', // 接受消息的userID
groupID: '', // 接受消息的群ID
offlinePushInfo: OfflinePushInfo(), // 离线推送消息备注
);
OpenIM.iMManager.messageManager
.getHistoryMessageList(
userID: '', // 单聊对象的userID
groupID: '', // 群聊的组id
startMsg: null, // 消息体
count: 0, // 每次拉取的数量
)
.then((list) {
// List<Message>
});
OpenIM.iMManager.messageManager.revokeMessage(
message: Message(), // 消息体
);
OpenIM.iMManager.messageManager.deleteMessageFromLocalStorage(
message: Message(), // 消息体
);
OpenIM.iMManager.messageManager.insertSingleMessageToLocalStorage(
receiverID: '', // 接收者userID
senderID: '', // 发送者userID
message: Message(), // 消息体
);
OpenIM.iMManager.messageManager.markC2CMessageAsRead(
userID: '', // 接收者 userID
messageIDList: [], // 已读的消息id列表
);
OpenIM.iMManager.messageManager.typingStatusUpdate(
userID: '', // 接收者 userID
msgTip: '', // 自定义提示内容
);
OpenIM.iMManager.messageManager.createTextMessage(
text: '',
);
OpenIM.iMManager.messageManager.createTextAtMessage(
text: '', // 发送的内容
atUidList: [], // 被@到的userID集合
);
OpenIM.iMManager.messageManager.createImageMessage(
imagePath: '', // 图片相对路径
);
OpenIM.iMManager.messageManager.createImageMessageFromFullPath(
imagePath: '', // 图片的绝对路径
);
OpenIM.iMManager.messageManager.createSoundMessage(
soundPath: '', // 相对路径
duration: 0, // 时长
);
OpenIM.iMManager.messageManager.createSoundMessageFromFullPath(
soundPath: '', // 绝对路径
duration: 0, // 时长
);
OpenIM.iMManager.messageManager.createVideoMessage(
videoPath: '', // 相对路径
videoType: '', // minetype
duration: 0, // 时长s
snapshotPath: '', // 站位缩略图
);
OpenIM.iMManager.messageManager.createVideoMessageFromFullPath(
videoPath: '', // 相对路径
videoType: '', // minetype
duration: 0, // 时长s
snapshotPath: '', // 站位缩略图
);
OpenIM.iMManager.messageManager.createFileMessage(
filePath: '', // 相对路径
fileName: '', // 文件名
);
OpenIM.iMManager.messageManager.createFileMessageFromFullPath(
filePath: '', // 相对路径
fileName: '', // 文件名
);
OpenIM.iMManager.messageManager.createForwardMessage(
message: Message(), // 转发消息体
);
OpenIM.iMManager.messageManager.createMergerMessage(
messageList: [], // 被转发的消息列表
title: '', // 标题
summaryList: [], // 每一条消息摘要
);
OpenIM.iMManager.messageManager.createLocationMessage(
latitude: 0, // 纬度
longitude: 0, // 经度
description: '', // 位置描述信息
);
OpenIM.iMManager.messageManager.createCustomMessage(
data: '', // 自定义内容
extension: '', // 扩展信息
description: '', // 描述消息
);
OpenIM.iMManager.messageManager.createQuoteMessage(
text: '', // 回复内容
quoteMsg: Message(), // 被回复的消息体
);
OpenIM.iMManager.messageManager.createCardMessage(
data: {}, // 自定义内容
);
OpenIM.iMManager.messageManager.clearC2CHistoryMessage(
uid: "", // 清空聊天记录
);
OpenIM.iMManager.messageManager.clearGroupHistoryMessage(
gid: '', // 群ID
);
}
} }

View File

@@ -5,58 +5,58 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: async name: async
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.8.2" version: "2.10.0"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.0" version: "2.1.1"
characters: characters:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.2.0" version: "1.2.1"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.1"
clock: clock:
dependency: transitive dependency: transitive
description: description:
name: clock name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.0" version: "1.1.1"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.15.0" version: "1.17.0"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
name: cupertino_icons name: cupertino_icons
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.3" version: "1.0.5"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
name: fake_async name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.2.0" version: "1.3.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -68,40 +68,52 @@ packages:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "1.1.1" version: "3.4.0"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
js:
dependency: transitive
description:
name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.5"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.12.11" version: "0.12.13"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.3" version: "0.2.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.7.0" version: "1.8.0"
path: path:
dependency: transitive dependency: transitive
description: description:
name: path name: path
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.8.0" version: "1.8.2"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -111,58 +123,58 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.8.1" version: "1.9.1"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.10.0" version: "1.11.0"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.0" version: "2.1.1"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.0" version: "1.2.0"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
name: term_glyph name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.2.0" version: "1.2.1"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.4.8" version: "0.4.16"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
name: vector_math name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.1.1" version: "2.1.4"
sdks: sdks:
dart: ">=2.14.0 <3.0.0" dart: ">=2.18.0 <3.0.0"
flutter: ">=1.20.0" flutter: ">=1.20.0"

View File

@@ -3,9 +3,15 @@ import Foundation
public class JsonUtil { public class JsonUtil {
public static func toString(object: AnyObject?)->String { public static func toString(object: AnyObject?)->String {
if object is NSNull {
return ""
}
if object == nil { if object == nil {
return "" return ""
} }
if object is String{ if object is String{
let s = object as! String let s = object as! String
let b = s.replacingOccurrences(of: "\"", with: "\\\"") let b = s.replacingOccurrences(of: "\"", with: "\\\"")

View File

@@ -10,15 +10,23 @@ public class ConversationManager: BaseServiceManager {
self["getConversationListSplit"] = getConversationListSplit self["getConversationListSplit"] = getConversationListSplit
self["getOneConversation"] = getOneConversation self["getOneConversation"] = getOneConversation
self["getMultipleConversation"] = getMultipleConversation self["getMultipleConversation"] = getMultipleConversation
self["deleteConversation"] = deleteConversation
self["setConversationDraft"] = setConversationDraft self["setConversationDraft"] = setConversationDraft
self["pinConversation"] = pinConversation self["pinConversation"] = pinConversation
// self["markSingleMessageHasRead"] = markSingleMessageHasRead self["hideConversation"] = hideConversation
self["markGroupMessageHasRead"] = markGroupMessageHasRead self["markConversationMessageAsRead"] = markConversationMessageAsRead
self["getTotalUnreadMsgCount"] = getTotalUnreadMsgCount self["getTotalUnreadMsgCount"] = getTotalUnreadMsgCount
self["getConversationIDBySessionType"] = getConversationIDBySessionType self["getConversationIDBySessionType"] = getConversationIDBySessionType
self["setConversationRecvMessageOpt"] = setConversationRecvMessageOpt self["setConversationRecvMessageOpt"] = setConversationRecvMessageOpt
self["getConversationRecvMessageOpt"] = getConversationRecvMessageOpt self["getConversationRecvMessageOpt"] = getConversationRecvMessageOpt
self["setConversationPrivateChat"] = setConversationPrivateChat
self["clearConversationAndDeleteAllMsg"] = clearConversationAndDeleteAllMsg
self["deleteConversationAndDeleteAllMsg"] = deleteConversationAndDeleteAllMsg
self["deleteAllConversationFromLocal"] = deleteAllConversationFromLocal
self["resetConversationGroupAtType"] = resetConversationGroupAtType
self["getAtAllTag"] = getAtAllTag
self["setGlobalRecvMessageOpt"] = setGlobalRecvMessageOpt
self["setConversationBurnDuration"] = setConversationBurnDuration
self["hideAllConversations"] = hideAllConversations
} }
func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -35,17 +43,13 @@ public class ConversationManager: BaseServiceManager {
} }
func getOneConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getOneConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetOneConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "sessionType"], methodCall[string: "sourceID"]) Open_im_sdkGetOneConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int32: "sessionType"], methodCall[string: "sourceID"])
} }
func getMultipleConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getMultipleConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetMultipleConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"]) Open_im_sdkGetMultipleConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"])
} }
func deleteConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
}
func setConversationDraft(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setConversationDraft(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetConversationDraft(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[string: "draftText"]) Open_im_sdkSetConversationDraft(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[string: "draftText"])
} }
@@ -54,12 +58,12 @@ public class ConversationManager: BaseServiceManager {
Open_im_sdkPinConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[bool: "isPinned"]) Open_im_sdkPinConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[bool: "isPinned"])
} }
// func markSingleMessageHasRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func hideConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkMarkSingleMessageHasRead(BaseCallback(result: result), methodCall[string: "userID"]) Open_im_sdkHideConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
// } }
func markGroupMessageHasRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func markConversationMessageAsRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkMarkGroupMessageHasRead(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"]) Open_im_sdkMarkConversationMessageAsRead(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
} }
func getTotalUnreadMsgCount(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getTotalUnreadMsgCount(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -67,17 +71,52 @@ public class ConversationManager: BaseServiceManager {
} }
func getConversationIDBySessionType(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getConversationIDBySessionType(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
let conversationID = Open_im_sdkGetConversationIDBySessionType(methodCall[string: "sourceID"], methodCall[int: "sessionType"]) let conversationID = Open_im_sdkGetConversationIDBySessionType( methodCall[string: "operationID"],methodCall[string: "sourceID"], methodCall[int: "sessionType"])
callBack(result, conversationID) callBack(result, conversationID)
} }
func setConversationRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setConversationRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetConversationRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"], methodCall[int: "status"]) Open_im_sdkSetConversationRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[int: "status"])
} }
func getConversationRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getConversationRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetConversationRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"]) Open_im_sdkGetConversationRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"])
} }
func setConversationPrivateChat(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetConversationPrivateChat(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[bool: "isPrivate"])
}
func clearConversationAndDeleteAllMsg(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearConversationAndDeleteAllMsg(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
}
func deleteConversationAndDeleteAllMsg(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteConversationAndDeleteAllMsg(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
}
func deleteAllConversationFromLocal(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
}
func resetConversationGroupAtType(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkResetConversationGroupAtType(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
}
func getAtAllTag(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkGetAtAllTag(methodCall[string: "operationID"]))
}
func setGlobalRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGlobalRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "status"])
}
func setConversationBurnDuration(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetConversationBurnDuration(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[int32: "burnDuration"])
}
func hideAllConversations(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkHideAllConversations(BaseCallback(result: result), methodCall[string: "operationID"])
}
} }

View File

@@ -8,8 +8,8 @@ public class FriendshipManager: BaseServiceManager {
self["setFriendListener"] = setFriendListener self["setFriendListener"] = setFriendListener
self["getFriendsInfo"] = getFriendsInfo self["getFriendsInfo"] = getFriendsInfo
self["addFriend"] = addFriend self["addFriend"] = addFriend
self["getRecvFriendApplicationList"] = getRecvFriendApplicationList self["getFriendApplicationListAsRecipient"] = getFriendApplicationListAsRecipient
self["getSendFriendApplicationList"] = getSendFriendApplicationList self["getFriendApplicationListAsApplicant"] = getFriendApplicationListAsApplicant
self["getFriendList"] = getFriendList self["getFriendList"] = getFriendList
self["setFriendRemark"] = setFriendRemark self["setFriendRemark"] = setFriendRemark
self["addBlacklist"] = addBlacklist self["addBlacklist"] = addBlacklist
@@ -19,9 +19,7 @@ public class FriendshipManager: BaseServiceManager {
self["deleteFriend"] = deleteFriend self["deleteFriend"] = deleteFriend
self["acceptFriendApplication"] = acceptFriendApplication self["acceptFriendApplication"] = acceptFriendApplication
self["refuseFriendApplication"] = refuseFriendApplication self["refuseFriendApplication"] = refuseFriendApplication
// self["forceSyncFriendApplication"] = forceSyncFriendApplication self["searchFriends"] = searchFriends
// self["forceSyncFriend"] = forceSyncFriend
// self["forceSyncBlackList"] = forceSyncBlackList
} }
func setFriendListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setFriendListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -30,19 +28,19 @@ public class FriendshipManager: BaseServiceManager {
} }
func getFriendsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getFriendsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetDesignatedFriendsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "uidList"]) Open_im_sdkGetSpecifiedFriendsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDList"])
} }
func addFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func addFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAddFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString()) Open_im_sdkAddFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
} }
func getRecvFriendApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getFriendApplicationListAsRecipient(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetRecvFriendApplicationList(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkGetFriendApplicationListAsRecipient(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func getSendFriendApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getFriendApplicationListAsApplicant(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetSendFriendApplicationList(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkGetFriendApplicationListAsApplicant(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func getFriendList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getFriendList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -54,7 +52,7 @@ public class FriendshipManager: BaseServiceManager {
} }
func addBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func addBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAddBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "uid"]) Open_im_sdkAddBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"])
} }
func getBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -62,15 +60,15 @@ public class FriendshipManager: BaseServiceManager {
} }
func removeBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func removeBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkRemoveBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "uid"]) Open_im_sdkRemoveBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"])
} }
func checkFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func checkFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkCheckFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "uidList"]) Open_im_sdkCheckFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDList"])
} }
func deleteFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func deleteFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "uid"]) Open_im_sdkDeleteFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"])
} }
func acceptFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func acceptFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -81,20 +79,9 @@ public class FriendshipManager: BaseServiceManager {
Open_im_sdkRefuseFriendApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString()) Open_im_sdkRefuseFriendApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
} }
// func forceSyncFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func searchFriends(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkForceSyncFriendApplication() Open_im_sdkSearchFriends(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
// callBack(result) }
// }
//
// func forceSyncFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkForceSyncFriend()
// callBack(result)
// }
//
// func forceSyncBlackList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkForceSyncBlackList()
// callBack(result)
// }
} }
public class FriendshipListener: NSObject, Open_im_sdk_callbackOnFriendshipListenerProtocol { public class FriendshipListener: NSObject, Open_im_sdk_callbackOnFriendshipListenerProtocol {
@@ -105,11 +92,15 @@ public class FriendshipListener: NSObject, Open_im_sdk_callbackOnFriendshipListe
} }
public func onBlackAdded(_ blackInfo: String?) { public func onBlackAdded(_ blackInfo: String?) {
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onBlacklistAdded", errCode: nil, errMsg: nil, data: blackInfo) CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onBlackAdded", errCode: nil, errMsg: nil, data: blackInfo)
} }
public func onBlackDeleted(_ blackInfo: String?) { public func onBlackDeleted(_ blackInfo: String?) {
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onBlacklistDeleted", errCode: nil, errMsg: nil, data: blackInfo) CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onBlackDeleted", errCode: nil, errMsg: nil, data: blackInfo)
}
public func onFriendAdded(_ friendInfo: String?) {
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendAdded", errCode: nil, errMsg: nil, data: friendInfo)
} }
public func onFriendApplicationAccepted(_ friendApplication: String?) { public func onFriendApplicationAccepted(_ friendApplication: String?) {
@@ -128,16 +119,12 @@ public class FriendshipListener: NSObject, Open_im_sdk_callbackOnFriendshipListe
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendApplicationRejected", errCode: nil, errMsg: nil, data: friendApplication) CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendApplicationRejected", errCode: nil, errMsg: nil, data: friendApplication)
} }
public func onFriendInfoChanged(_ friendInfo: String?) {
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendInfoChanged", errCode: nil, errMsg: nil, data: friendInfo)
}
public func onFriendAdded(_ friendInfo: String?) {
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendAdded", errCode: nil, errMsg: nil, data: friendInfo)
}
public func onFriendDeleted(_ friendInfo: String?) { public func onFriendDeleted(_ friendInfo: String?) {
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendDeleted", errCode: nil, errMsg: nil, data: friendInfo) CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendDeleted", errCode: nil, errMsg: nil, data: friendInfo)
} }
public func onFriendInfoChanged(_ friendInfo: String?) {
CommonUtil.emitEvent(channel: channel, method: "friendListener", type: "onFriendInfoChanged", errCode: nil, errMsg: nil, data: friendInfo)
}
} }

View File

@@ -17,14 +17,24 @@ public class GroupManager: BaseServiceManager {
self["joinGroup"] = joinGroup self["joinGroup"] = joinGroup
self["quitGroup"] = quitGroup self["quitGroup"] = quitGroup
self["transferGroupOwner"] = transferGroupOwner self["transferGroupOwner"] = transferGroupOwner
self["getRecvGroupApplicationList"] = getRecvGroupApplicationList self["getGroupApplicationListAsRecipient"] = getGroupApplicationListAsRecipient
self["getSendGroupApplicationList"] = getSendGroupApplicationList self["getGroupApplicationListAsApplicant"] = getGroupApplicationListAsApplicant
self["acceptGroupApplication"] = acceptGroupApplication self["acceptGroupApplication"] = acceptGroupApplication
self["refuseGroupApplication"] = refuseGroupApplication self["refuseGroupApplication"] = refuseGroupApplication
// self["forceSyncApplyGroupRequest"] = forceSyncApplyGroupRequest self["dismissGroup"] = dismissGroup
// self["forceSyncGroupRequest"] = forceSyncGroupRequest self["changeGroupMute"] = changeGroupMute
// self["forceSyncJoinedGroup"] = forceSyncJoinedGroup self["changeGroupMemberMute"] = changeGroupMemberMute
// self["forceSyncJoinedGroupMember"] = forceSyncJoinedGroupMember self["setGroupMemberNickname"] = setGroupMemberNickname
self["searchGroups"] = searchGroups
self["setGroupMemberRoleLevel"] = setGroupMemberRoleLevel
self["getGroupMemberListByJoinTimeFilter"] = getGroupMemberListByJoinTimeFilter
self["setGroupVerification"] = setGroupVerification
self["setGroupLookMemberInfo"] = setGroupLookMemberInfo
self["setGroupApplyMemberFriend"] = setGroupApplyMemberFriend
self["getGroupMemberOwnerAndAdmin"] = getGroupMemberOwnerAndAdmin
self["searchGroupMembers"] = searchGroupMembers
self["setGroupMemberInfo"] = setGroupMemberInfo
self["isJoinGroup"] = isJoinGroup
} }
func setGroupListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setGroupListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -33,21 +43,21 @@ public class GroupManager: BaseServiceManager {
} }
func inviteUserToGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func inviteUserToGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkInviteUserToGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "reason"], Open_im_sdkInviteUserToGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "reason"],
methodCall[jsonString: "uidList"]) methodCall[jsonString: "userIDList"])
} }
func kickGroupMember(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func kickGroupMember(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkKickGroupMember(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "reason"], Open_im_sdkKickGroupMember(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "reason"],
methodCall[jsonString: "uidList"]) methodCall[jsonString: "userIDList"])
} }
func getGroupMembersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getGroupMembersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupMembersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[jsonString: "uidList"]) Open_im_sdkGetSpecifiedGroupMembersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[jsonString: "userIDList"])
} }
func getGroupMemberList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getGroupMemberList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupMemberList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[int32: "filter"], Open_im_sdkGetGroupMemberList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[int32: "filter"],
methodCall[int32: "offset"], methodCall[int32: "count"]) methodCall[int32: "offset"], methodCall[int32: "count"])
} }
@@ -56,74 +66,110 @@ public class GroupManager: BaseServiceManager {
} }
func createGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkCreateGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "gInfo"], methodCall[jsonString: "memberList"]) Open_im_sdkCreateGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
} }
func setGroupInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setGroupInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[jsonString: "gInfo"]) Open_im_sdkSetGroupInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "groupInfo"])
} }
func getGroupsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getGroupsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "gidList"]) Open_im_sdkGetSpecifiedGroupsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "groupIDList"])
} }
func joinGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func joinGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkJoinGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "reason"]) Open_im_sdkJoinGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "reason"], methodCall[int32: "joinSource"])
} }
func quitGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func quitGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkQuitGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"]) Open_im_sdkQuitGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
} }
func transferGroupOwner(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func transferGroupOwner(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkTransferGroupOwner(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "uid"]) Open_im_sdkTransferGroupOwner(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "userID"])
} }
func getRecvGroupApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getGroupApplicationListAsRecipient(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetRecvGroupApplicationList(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkGetGroupApplicationListAsRecipient(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func getSendGroupApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getGroupApplicationListAsApplicant(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetSendGroupApplicationList(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkGetGroupApplicationListAsApplicant(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func acceptGroupApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func acceptGroupApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAcceptGroupApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "uid"], methodCall[string: "handleMsg"]) Open_im_sdkAcceptGroupApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "userID"], methodCall[string: "handleMsg"])
} }
func refuseGroupApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func refuseGroupApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkRefuseGroupApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "uid"], methodCall[string: "handleMsg"]) Open_im_sdkRefuseGroupApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "userID"], methodCall[string: "handleMsg"])
} }
// func forceSyncApplyGroupRequest(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func dismissGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkForceSyncApplyGroupRequest() Open_im_sdkDismissGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
// callBack(result) }
// }
//
// func forceSyncGroupRequest(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkForceSyncGroupRequest()
// callBack(result)
// }
//
// func forceSyncJoinedGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkForceSyncJoinedGroup()
// callBack(result)
// }
//
// func forceSyncJoinedGroupMember(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkForceSyncJoinedGroupMember()
// callBack(result)
// }
}
public class GroupListener: NSObject, Open_im_sdk_callbackOnGroupListenerProtocol {
func changeGroupMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkChangeGroupMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[bool: "mute"])
}
func changeGroupMemberMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkChangeGroupMemberMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string:"userID"],methodCall[int:"seconds"])
}
func setGroupMemberNickname(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupMemberNickname(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string:"userID"],methodCall[string:"groupNickname"])
}
func searchGroups(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSearchGroups(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
}
func setGroupMemberRoleLevel(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupMemberRoleLevel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string:"userID"],methodCall[int:"roleLevel"])
}
func getGroupMemberListByJoinTimeFilter(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupMemberListByJoinTimeFilter(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[int32: "offset"], methodCall[int32: "count"], methodCall[int64: "joinTimeBegin"], methodCall[int64: "joinTimeEnd"], methodCall[jsonString: "excludeUserIDList"])
}
func setGroupVerification(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupVerification(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[int32:"needVerification"])
}
func setGroupLookMemberInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupLookMemberInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[int32:"status"])
}
func setGroupApplyMemberFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupApplyMemberFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[int32:"status"])
}
func getGroupMemberOwnerAndAdmin(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupMemberOwnerAndAdmin(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
}
func searchGroupMembers(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSearchGroupMembers(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
}
func setGroupMemberInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupMemberInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "info"])
}
func isJoinGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkIsJoinGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
}
}
public class GroupListener: NSObject, Open_im_sdk_callbackOnGroupListenerProtocol {
private let channel:FlutterMethodChannel private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) { init(channel:FlutterMethodChannel) {
self.channel = channel self.channel = channel
} }
public func onGroupApplicationAccepted(_ s: String?) { public func onGroupApplicationAccepted(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationAccepted", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationAccepted", errCode: nil, errMsg: nil, data: s)
} }
@@ -140,6 +186,10 @@ public class GroupListener: NSObject, Open_im_sdk_callbackOnGroupListenerProtoco
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationRejected", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationRejected", errCode: nil, errMsg: nil, data: s)
} }
public func onGroupDismissed(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupDismissed", errCode: nil, errMsg: nil, data: s)
}
public func onGroupInfoChanged(_ s: String?) { public func onGroupInfoChanged(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupInfoChanged", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupInfoChanged", errCode: nil, errMsg: nil, data: s)
} }

View File

@@ -3,27 +3,73 @@ import OpenIMCore
public class IMMananger: BaseServiceManager { public class IMMananger: BaseServiceManager {
let reachability = try? Reachability()
public override func registerHandlers() { public override func registerHandlers() {
super.registerHandlers() super.registerHandlers()
self["initSDK"] = initSDK self["initSDK"] = initSDK
self["unInitSDK"] = unInitSDK
self["login"] = login self["login"] = login
self["logout"] = logout self["logout"] = logout
self["getLoginStatus"] = getLoginStatus self["getLoginStatus"] = getLoginStatus
// self["getLoginUid"] = getLoginUid self["uploadFile"] = uploadFile
// self["getUsersInfo"] = getUsersInfo self["updateFcmToken"] = updateFcmToken
// self["setSelfInfo"] = setSelfInfo self["setAppBackgroundStatus"] = setAppBackgroundStatus
// self["forceSyncLoginUerInfo"] = forceSyncLoginUerInfo self["networkStatusChanged"] = networkStatusChanged
// self["forceReConn"] = forceReConn }
// self["setSdkLog"] = setSdkLog
fileprivate func addObservers() {
NotificationCenter.default.addObserver(self,
selector: #selector(applicationWillEnterForeground),
name: UIApplication.willEnterForegroundNotification,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(applicationDidEnterBackground),
name: UIApplication.didEnterBackgroundNotification,
object: nil)
if let reachability {
do {
try reachability.startNotifier()
} catch (let e) {
print("reachability: \(e)")
}
reachability.whenReachable = { _ in
Open_im_sdkNetworkStatusChanged(BaseCallback(result: { _ in
}), UUID().uuidString)
}
reachability.whenUnreachable = { _ in
Open_im_sdkNetworkStatusChanged(BaseCallback(result: { _ in
}), UUID().uuidString)
}
}
}
@objc
fileprivate func applicationDidEnterBackground() {
Open_im_sdkSetAppBackgroundStatus(BaseCallback(result: { _ in
}), UUID().uuidString, true)
}
@objc
fileprivate func applicationWillEnterForeground() {
Open_im_sdkSetAppBackgroundStatus(BaseCallback(result: { _ in
}), UUID().uuidString, false)
} }
func initSDK(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func initSDK(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkInitSDK(ConnListener(channel: self.channel), methodCall[string: "operationID"], methodCall.toJsonString()) callBack(result, Open_im_sdkInitSDK(ConnListener(channel: self.channel), methodCall[string: "operationID"], methodCall.toJsonString()))
callBack(result) addObservers()
}
func unInitSDK(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkUnInitSDK(methodCall[string: "operationID"])
} }
func login(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func login(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkLogin(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "uid"], methodCall[string: "token"]) Open_im_sdkLogin(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"], methodCall[string: "token"])
} }
func logout(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func logout(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
@@ -31,33 +77,25 @@ public class IMMananger: BaseServiceManager {
} }
func getLoginStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func getLoginStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
callBack(result, Open_im_sdkGetLoginStatus()) callBack(result, Open_im_sdkGetLoginStatus(methodCall[string: "operationID"]))
} }
// func getLoginUid(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func uploadFile(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// callBack(result, Open_im_sdkGetLoginUser()) Open_im_sdkUploadFile(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString(), UploadFileListener(channel: self.channel,id: methodCall[string: "id"]))
// } }
// func getUsersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func updateFcmToken(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkGetUsersInfo(methodCall[jsonString: "uidList"], BaseCallback(result: result)) Open_im_sdkUpdateFcmToken(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "fcmToken"], methodCall[int64:
// } "expireTime"])
}
// func setSelfInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func setAppBackgroundStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkSetSelfInfo(methodCall.toJsonString(), BaseCallback(result: result)) Open_im_sdkSetAppBackgroundStatus(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[bool: "isBackground"])
// } }
// func forceSyncLoginUerInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func networkStatusChanged(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkForceSyncLoginUerInfo() Open_im_sdkNetworkStatusChanged(BaseCallback(result: result), methodCall[string: "operationID"])
// callBack(result) }
// }
// func setSdkLog(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkSetSdkLog(methodCall[int32: "sdkLog"])
// }
// func forceReConn(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
// Open_im_sdkForceReConn()
// callBack(result)
// }
} }
public class ConnListener: NSObject, Open_im_sdk_callbackOnConnListenerProtocol { public class ConnListener: NSObject, Open_im_sdk_callbackOnConnListenerProtocol {
@@ -70,7 +108,7 @@ public class ConnListener: NSObject, Open_im_sdk_callbackOnConnListenerProtocol
public func onConnectFailed(_ errCode: Int32, errMsg: String?) { public func onConnectFailed(_ errCode: Int32, errMsg: String?) {
CommonUtil.emitEvent(channel: self.channel, method: "connectListener", type: "onConnectFailed", errCode: errCode, errMsg: errMsg, data: nil) CommonUtil.emitEvent(channel: self.channel, method: "connectListener", type: "onConnectFailed", errCode: errCode, errMsg: errMsg, data: nil)
} }
public func onConnectSuccess() { public func onConnectSuccess() {
CommonUtil.emitEvent(channel: self.channel, method: "connectListener", type: "onConnectSuccess", errCode: nil, errMsg: nil, data: nil) CommonUtil.emitEvent(channel: self.channel, method: "connectListener", type: "onConnectSuccess", errCode: nil, errMsg: nil, data: nil)
} }
@@ -87,3 +125,79 @@ public class ConnListener: NSObject, Open_im_sdk_callbackOnConnListenerProtocol
CommonUtil.emitEvent(channel: self.channel, method: "connectListener", type: "onUserTokenExpired", errCode: nil, errMsg: nil, data: nil) CommonUtil.emitEvent(channel: self.channel, method: "connectListener", type: "onUserTokenExpired", errCode: nil, errMsg: nil, data: nil)
} }
} }
public class UploadFileListener: NSObject, Open_im_sdk_callbackUploadFileCallbackProtocol {
private let channel:FlutterMethodChannel
private let id: String
init(channel:FlutterMethodChannel, id: String) {
self.channel = channel
self.id = id
}
public func complete(_ size: Int64, url: String?, typ: Int) {
var values: [String: Any] = [:]
values["id"] = id
values["size"] = size
values["url"] = url
values["type"] = typ
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "complete", errCode: nil, errMsg: nil, data: values)
}
public func hashPartComplete(_ partsHash: String?, fileHash: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["partHash"] = partsHash
values["fileHash"] = fileHash
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "hashPartComplete", errCode: nil, errMsg: nil, data: values)
}
public func hashPartProgress(_ index: Int, size: Int64, partHash: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["index"] = index
values["size"] = size
values["partHash"] = partHash
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "hashPartProgress", errCode: nil, errMsg: nil, data: values)
}
public func open(_ size: Int64) {
var values: [String: Any] = [:]
values["id"] = id
values["size"] = size
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "open", errCode: nil, errMsg: nil, data: values)
}
public func partSize(_ partSize: Int64, num: Int) {
var values: [String: Any] = [:]
values["id"] = id
values["partSize"] = partSize
values["num"] = num
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "partSize", errCode: nil, errMsg: nil, data: values)
}
public func uploadComplete(_ fileSize: Int64, streamSize: Int64, storageSize: Int64) {
var values: [String: Any] = [:]
values["id"] = id
values["fileSize"] = fileSize
values["streamSize"] = streamSize
values["storageSize"] = storageSize
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "uploadProgress", errCode: nil, errMsg: nil, data: values)
}
public func uploadID(_ uploadID: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["uploadID"] = uploadID
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "uploadID", errCode: nil, errMsg: nil, data: values)
}
public func uploadPartComplete(_ index: Int, partSize: Int64, partHash: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["index"] = index
values["partSize"] = partSize
values["partHash"] = partHash
CommonUtil.emitEvent(channel: channel, method: "uploadFileListener", type: "uploadPartComplete", errCode: nil, errMsg: nil, data: values)
}
}

View File

@@ -3,19 +3,19 @@ import OpenIMCore
public class MessageManager: BaseServiceManager { public class MessageManager: BaseServiceManager {
private let KEY_ID: String = "id" private let KEY_ID: String = "id"
// private var listeners: [String: AdvancedMsgListener] = [:]
public override func registerHandlers() { public override func registerHandlers() {
super.registerHandlers() super.registerHandlers()
self["setAdvancedMsgListener"] = setAdvancedMsgListener self["setAdvancedMsgListener"] = setAdvancedMsgListener
self["sendMessage"] = sendMessage self["sendMessage"] = sendMessage
self["getHistoryMessageList"] = getHistoryMessageList
self["revokeMessage"] = revokeMessage self["revokeMessage"] = revokeMessage
self["deleteMessageFromLocalStorage"] = deleteMessageFromLocalStorage self["deleteMessageFromLocalStorage"] = deleteMessageFromLocalStorage
self["deleteMessages"] = deleteMessages self["deleteMessageFromLocalAndSvr"] = deleteMessageFromLocalAndSvr
self["deleteAllMsgFromLocal"] = deleteAllMsgFromLocal
self["deleteAllMsgFromLocalAndSvr"] = deleteAllMsgFromLocalAndSvr
self["insertSingleMessageToLocalStorage"] = insertSingleMessageToLocalStorage self["insertSingleMessageToLocalStorage"] = insertSingleMessageToLocalStorage
// self["findMessages"] = findMessages self["insertGroupMessageToLocalStorage"] = insertGroupMessageToLocalStorage
self["markC2CMessageAsRead"] = markC2CMessageAsRead self["markMessagesAsReadByMsgID"] = markMessagesAsReadByMsgID
self["typingStatusUpdate"] = typingStatusUpdate self["typingStatusUpdate"] = typingStatusUpdate
self["createTextMessage"] = createTextMessage self["createTextMessage"] = createTextMessage
self["createTextAtMessage"] = createTextAtMessage self["createTextAtMessage"] = createTextAtMessage
@@ -33,9 +33,26 @@ public class MessageManager: BaseServiceManager {
self["createCustomMessage"] = createCustomMessage self["createCustomMessage"] = createCustomMessage
self["createQuoteMessage"] = createQuoteMessage self["createQuoteMessage"] = createQuoteMessage
self["createCardMessage"] = createCardMessage self["createCardMessage"] = createCardMessage
// self["forceSyncMsg"] = forceSyncMsg self["createFaceMessage"] = createFaceMessage
self["clearC2CHistoryMessage"] = clearC2CHistoryMessage self["createAdvancedTextMessage"] = createAdvancedTextMessage
self["clearGroupHistoryMessage"] = clearGroupHistoryMessage self["createAdvancedQuoteMessage"] = createAdvancedQuoteMessage
self["searchLocalMessages"] = searchLocalMessages
self["clearConversationAndDeleteAllMsg"] = clearConversationAndDeleteAllMsg
self["getAdvancedHistoryMessageList"] = getAdvancedHistoryMessageList
self["getAdvancedHistoryMessageListReverse"] = getAdvancedHistoryMessageListReverse
self["findMessageList"] = findMessageList
self["setMessageLocalEx"] = setMessageLocalEx
self["setAppBadge"] = setAppBadge
self["sendMessageNotOss"] = sendMessageNotOss
self["createImageMessageByURL"] = createImageMessageByURL
self["createSoundMessageByURL"] = createSoundMessageByURL
self["createVideoMessageByURL"] = createVideoMessageByURL
self["createFileMessageByURL"] = createFileMessageByURL
self["setCustomBusinessListener"] = setCustomBusinessListener
} }
func setAdvancedMsgListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setAdvancedMsgListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -51,20 +68,24 @@ public class MessageManager: BaseServiceManager {
methodCall[string: "groupID"], methodCall[jsonString: "offlinePushInfo"]) methodCall[string: "groupID"], methodCall[jsonString: "offlinePushInfo"])
} }
func getHistoryMessageList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetHistoryMessageList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func revokeMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func revokeMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkRevokeMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString()) Open_im_sdkRevokeMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[string: "clientMsgID"])
} }
func deleteMessageFromLocalStorage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func deleteMessageFromLocalStorage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteMessageFromLocalStorage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString()) Open_im_sdkDeleteMessageFromLocalStorage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[string: "clientMsgID"])
} }
// deprecated func deleteMessageFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
func deleteMessages(methodCall: FlutterMethodCall, result: FlutterResult){ Open_im_sdkDeleteMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[string: "clientMsgID"])
}
func deleteAllMsgFromLocal(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteAllMsgFromLocal(BaseCallback(result: result), methodCall[string: "operationID"])
}
func deleteAllMsgFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteAllMsgFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func insertSingleMessageToLocalStorage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func insertSingleMessageToLocalStorage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -72,24 +93,26 @@ public class MessageManager: BaseServiceManager {
methodCall[string: "receiverID"], methodCall[string: "senderID"]) methodCall[string: "receiverID"], methodCall[string: "senderID"])
} }
// func findMessages(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func insertGroupMessageToLocalStorage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkFindMessages(BaseCallback(result: result), methodCall[jsonString: "messageIDList"]) Open_im_sdkInsertGroupMessageToLocalStorage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "message"],
// } methodCall[string: "groupID"], methodCall[string: "senderID"])
}
func markC2CMessageAsRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkMarkC2CMessageAsRead(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"], methodCall[jsonString: "messageIDList"]) func markMessagesAsReadByMsgID(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkMarkMessagesAsReadByMsgID(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[jsonString: "messageIDList"])
} }
func typingStatusUpdate(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func typingStatusUpdate(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkTypingStatusUpdate(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"], methodCall[string: "msgTip"]) Open_im_sdkTypingStatusUpdate(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"], methodCall[string: "msgTip"])
} }
func createTextMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createTextMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateTextMessage(methodCall[string: "operationID"], methodCall[string: "text"])) callBack(result, Open_im_sdkCreateTextMessage(methodCall[string: "operationID"], methodCall[string: "text"]))
} }
func createTextAtMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createTextAtMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateTextAtMessage(methodCall[string: "operationID"], methodCall[string: "text"], methodCall[jsonString: "atUserList"])) callBack(result, Open_im_sdkCreateTextAtMessage(methodCall[string: "operationID"], methodCall[string: "text"],
methodCall[jsonString: "atUserIDList"], methodCall[jsonString: "atUserInfoList"], methodCall[jsonString: "quoteMessage"]))
} }
func createImageMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createImageMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -116,18 +139,18 @@ public class MessageManager: BaseServiceManager {
func createVideoMessageFromFullPath(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createVideoMessageFromFullPath(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
let prama = Open_im_sdkCreateVideoMessageFromFullPath(methodCall[string: "operationID"], methodCall[string: "videoPath"], methodCall[string: "videoType"], let prama = Open_im_sdkCreateVideoMessageFromFullPath(methodCall[string: "operationID"], methodCall[string: "videoPath"], methodCall[string: "videoType"],
methodCall[int64: "duration"], methodCall[string: "snapshotPath"]) methodCall[int64: "duration"], methodCall[string: "snapshotPath"])
callBack(result, prama) callBack(result, prama)
} }
func createFileMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createFileMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateFileMessage(methodCall[string: "operationID"], methodCall[string: "filePath"], methodCall[string: "fileName"])) callBack(result, Open_im_sdkCreateFileMessage(methodCall[string: "operationID"], methodCall[string: "filePath"], methodCall[string: "fileName"]))
} }
func createFileMessageFromFullPath(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createFileMessageFromFullPath(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateFileMessageFromFullPath(methodCall[string: "operationID"], methodCall[string: "filePath"], methodCall[string: "fileName"])) callBack(result, Open_im_sdkCreateFileMessageFromFullPath(methodCall[string: "operationID"], methodCall[string: "filePath"], methodCall[string: "fileName"]))
} }
func createMergerMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createMergerMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
let prama = Open_im_sdkCreateMergerMessage(methodCall[string: "operationID"], methodCall[jsonString: "messageList"], methodCall[string: "title"], let prama = Open_im_sdkCreateMergerMessage(methodCall[string: "operationID"], methodCall[jsonString: "messageList"], methodCall[string: "title"],
methodCall[jsonString: "summaryList"]) methodCall[jsonString: "summaryList"])
@@ -158,77 +181,194 @@ public class MessageManager: BaseServiceManager {
func createCardMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createCardMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateCardMessage(methodCall[string: "operationID"], methodCall[jsonString: "cardMessage"])) callBack(result, Open_im_sdkCreateCardMessage(methodCall[string: "operationID"], methodCall[jsonString: "cardMessage"]))
} }
// func forceSyncMsg(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createFaceMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkForceSyncMsg() callBack(result, Open_im_sdkCreateFaceMessage(methodCall[string: "operationID"], methodCall[int: "index"], methodCall[string: "data"]))
// callBack(result)
// }
func clearC2CHistoryMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearC2CHistoryMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"])
} }
func clearGroupHistoryMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createAdvancedTextMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearGroupHistoryMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"]) let prama = Open_im_sdkCreateAdvancedTextMessage(methodCall[string: "operationID"], methodCall[string: "text"], methodCall[jsonString: "richMessageInfoList"])
callBack(result, prama)
}
func createAdvancedQuoteMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
let prama = Open_im_sdkCreateAdvancedQuoteMessage(methodCall[string: "operationID"], methodCall[string: "quoteText"], methodCall[jsonString: "quoteMessage"], methodCall[jsonString: "richMessageInfoList"])
callBack(result, prama)
}
func searchLocalMessages(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSearchLocalMessages(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "filter"])
}
func clearConversationAndDeleteAllMsg(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearConversationAndDeleteAllMsg(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
}
func getAdvancedHistoryMessageList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetAdvancedHistoryMessageList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func getAdvancedHistoryMessageListReverse(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetAdvancedHistoryMessageListReverse(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func findMessageList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkFindMessageList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParams"])
} }
public class SendMsgProgressListener: NSObject, Open_im_sdk_callbackSendMsgCallBackProtocol { func setMessageLocalEx(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
private let channel: FlutterMethodChannel Open_im_sdkSetMessageLocalEx(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[string: "clientMsgID"], methodCall[string: "localEx"])
private let result: FlutterResult
private let call: FlutterMethodCall
init(channel: FlutterMethodChannel, result: @escaping FlutterResult, methodCall: FlutterMethodCall) {
self.channel = channel
self.result = result
self.call = methodCall
}
public func onError(_ errCode: Int32, errMsg: String?) {
DispatchQueue.main.async { self.result(FlutterError(code: "\(errCode)", message: errMsg, details: nil)) }
}
public func onProgress(_ progress: Int) {
var values: [String: Any] = [:]
let message = call[dict: "message"]
values["clientMsgID"] = message["clientMsgID"]
values["progress"] = progress
CommonUtil.emitEvent(channel: channel, method: "msgSendProgressListener", type: "onProgress", errCode: nil, errMsg: nil, data: values)
}
public func onSuccess(_ data: String?) {
DispatchQueue.main.async { self.result(data) }
}
} }
public class AdvancedMsgListener: NSObject, Open_im_sdk_callbackOnAdvancedMsgListenerProtocol { func setAppBadge(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
private let channel: FlutterMethodChannel Open_im_sdkSetAppBadge(BaseCallback(result: result), methodCall[string: "operationID"], Int32(methodCall[int64: "count"]))
private let id: String }
init(channel: FlutterMethodChannel, id: String) { func sendMessageNotOss(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
self.channel = channel let sendMsgProgressListener: SendMsgProgressListener = SendMsgProgressListener(channel: channel,result: result,methodCall: methodCall)
self.id = id Open_im_sdkSendMessageNotOss(sendMsgProgressListener, methodCall[string: "operationID"], methodCall[jsonString: "message"], methodCall[string: "userID"],
} methodCall[string: "groupID"], methodCall[jsonString: "offlinePushInfo"])
}
public func onRecvC2CReadReceipt(_ msgReceiptList: String?) {
var values: [String: Any] = [:] func createImageMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
values["id"] = id callBack(result, Open_im_sdkCreateImageMessageByURL(methodCall[string: "operationID"], methodCall[string: "sourcePath"], methodCall[jsonString: "sourcePicture"], methodCall[jsonString: "bigPicture"], methodCall[jsonString: "snapshotPicture"]))
values["haveReadMessage"] = msgReceiptList }
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvC2CReadReceipt", errCode: nil, errMsg: nil, data: values)
} func createSoundMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateSoundMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "soundElem"]))
public func onRecvMessageRevoked(_ msgId: String?) { }
var values: [String: Any] = [:]
values["id"] = id func createVideoMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
values["revokedMessage"] = msgId callBack(result, Open_im_sdkCreateVideoMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "videoElem"]))
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvMessageRevoked", errCode: nil, errMsg: nil, data: values) }
}
func createFileMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
public func onRecvNewMessage(_ message: String?) { callBack(result, Open_im_sdkCreateFileMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "fileElem"]))
var values: [String: Any] = [:] }
values["id"] = id
values["newMessage"] = message func setCustomBusinessListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvNewMessage", errCode: nil, errMsg: nil, data: values) Open_im_sdkSetCustomBusinessListener(CustomBusinessListener(channel: channel))
} callBack(result)
} }
} }
public class SendMsgProgressListener: NSObject, Open_im_sdk_callbackSendMsgCallBackProtocol {
private let channel: FlutterMethodChannel
private let result: FlutterResult
private let call: FlutterMethodCall
init(channel: FlutterMethodChannel, result: @escaping FlutterResult, methodCall: FlutterMethodCall) {
self.channel = channel
self.result = result
self.call = methodCall
}
public func onError(_ errCode: Int32, errMsg: String?) {
DispatchQueue.main.async { self.result(FlutterError(code: "\(errCode)", message: errMsg, details: nil)) }
}
public func onProgress(_ progress: Int) {
var values: [String: Any] = [:]
let message = call[dict: "message"]
values["clientMsgID"] = message["clientMsgID"]
values["progress"] = progress
CommonUtil.emitEvent(channel: channel, method: "msgSendProgressListener", type: "onProgress", errCode: nil, errMsg: nil, data: values)
}
public func onSuccess(_ data: String?) {
DispatchQueue.main.async { self.result(data) }
}
}
public class AdvancedMsgListener: NSObject, Open_im_sdk_callbackOnAdvancedMsgListenerProtocol {
private let channel: FlutterMethodChannel
private let id: String
init(channel: FlutterMethodChannel, id: String) {
self.channel = channel
self.id = id
}
public func onMsgDeleted(_ message: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["message"] = message
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onMsgDeleted", errCode: nil, errMsg: nil, data: values);
}
public func onNewRecvMessageRevoked(_ messageRevoked: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["messageRevoked"] = messageRevoked
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onNewRecvMessageRevoked", errCode: nil, errMsg: nil, data: values)
}
public func onRecvC2CReadReceipt(_ msgReceiptList: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["msgReceiptList"] = msgReceiptList
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvC2CReadReceipt", errCode: nil, errMsg: nil, data: values)
}
public func onRecvGroupReadReceipt(_ groupMsgReceiptList: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["groupMsgReceiptList"] = groupMsgReceiptList
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvGroupReadReceipt", errCode: nil, errMsg: nil, data: values)
}
public func onRecvMessageExtensionsAdded(_ msgID: String?, reactionExtensionList: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["msgID"] = msgID
values["reactionExtensionList"] = reactionExtensionList
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvMessageExtensionsAdded", errCode: nil, errMsg: nil, data: values)
}
public func onRecvMessageExtensionsChanged(_ msgID: String?, reactionExtensionList: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["msgID"] = msgID
values["reactionExtensionList"] = reactionExtensionList
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvMessageExtensionsChanged", errCode: nil, errMsg: nil, data: values)
}
public func onRecvMessageExtensionsDeleted(_ msgID: String?, reactionExtensionKeyList: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["msgID"] = msgID
values["reactionExtensionKeyList"] = reactionExtensionKeyList
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvMessageExtensionsDeleted", errCode: nil, errMsg: nil, data: values)
}
public func onRecvNewMessage(_ message: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["message"] = message
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvNewMessage", errCode: nil, errMsg: nil, data: values)
}
public func onRecvOfflineNewMessage(_ message: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["message"] = message
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvOfflineNewMessage", errCode: nil, errMsg: nil, data: values);
}
}
public class CustomBusinessListener: NSObject, Open_im_sdk_callbackOnCustomBusinessListenerProtocol {
private let channel: FlutterMethodChannel
init(channel: FlutterMethodChannel) {
self.channel = channel
}
public func onRecvCustomBusinessMessage(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "customBusinessListener", type: "onRecvCustomBusinessMessage", errCode: nil, errMsg: nil, data: s)
}
}

View File

@@ -9,6 +9,11 @@ public class UserManager: BaseServiceManager {
self["getUsersInfo"] = getUsersInfo self["getUsersInfo"] = getUsersInfo
self["setSelfInfo"] = setSelfInfo self["setSelfInfo"] = setSelfInfo
self["getSelfUserInfo"] = getSelfUserInfo self["getSelfUserInfo"] = getSelfUserInfo
self["subscribeUsersStatus"] = subscribeUsersStatus
self["unsubscribeUsersStatus"] = unsubscribeUsersStatus
self["getSubscribeUsersStatus"] = getSubscribeUsersStatus
self["getUserStatus"] = getUserStatus
self["getUsersInfoWithCache"] = getUsersInfoWithCache
} }
func setUserListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setUserListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -17,7 +22,7 @@ public class UserManager: BaseServiceManager {
} }
func getUsersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func getUsersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetUsersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "uidList"]) Open_im_sdkGetUsersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDList"])
} }
func setSelfInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func setSelfInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
@@ -27,6 +32,27 @@ public class UserManager: BaseServiceManager {
func getSelfUserInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func getSelfUserInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetSelfUserInfo(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkGetSelfUserInfo(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func subscribeUsersStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSubscribeUsersStatus(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDs"])
}
func unsubscribeUsersStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkUnsubscribeUsersStatus(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDs"])
}
func getSubscribeUsersStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetSubscribeUsersStatus(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getUserStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetUserStatus(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDs"])
}
func getUsersInfoWithCache(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetUsersInfoWithCache(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDs"],
methodCall[string: "groupID"])
}
} }
public class UserListener: NSObject, Open_im_sdk_callbackOnUserListenerProtocol { public class UserListener: NSObject, Open_im_sdk_callbackOnUserListenerProtocol {
@@ -40,4 +66,9 @@ public class UserListener: NSObject, Open_im_sdk_callbackOnUserListenerProtocol
public func onSelfInfoUpdated(_ userInfo: String?) { public func onSelfInfoUpdated(_ userInfo: String?) {
CommonUtil.emitEvent(channel: self.channel, method: "userListener", type: "onSelfInfoUpdated", errCode: nil, errMsg: nil, data: userInfo) CommonUtil.emitEvent(channel: self.channel, method: "userListener", type: "onSelfInfoUpdated", errCode: nil, errMsg: nil, data: userInfo)
} }
public func onUserStatusChanged(_ statusInfo: String?) {
CommonUtil.emitEvent(channel: self.channel, method: "userListener", type: "onUserStatusChanged", errCode: nil, errMsg: nil, data: statusInfo)
}
} }

View File

@@ -0,0 +1,405 @@
/*
Copyright (c) 2014, Ashley Mills
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
import SystemConfiguration
import Foundation
public enum ReachabilityError: Error {
case failedToCreateWithAddress(sockaddr, Int32)
case failedToCreateWithHostname(String, Int32)
case unableToSetCallback(Int32)
case unableToSetDispatchQueue(Int32)
case unableToGetFlags(Int32)
}
@available(*, unavailable, renamed: "Notification.Name.reachabilityChanged")
public let ReachabilityChangedNotification = NSNotification.Name("ReachabilityChangedNotification")
public extension Notification.Name {
static let reachabilityChanged = Notification.Name("reachabilityChanged")
}
public class Reachability {
public typealias NetworkReachable = (Reachability) -> ()
public typealias NetworkUnreachable = (Reachability) -> ()
@available(*, unavailable, renamed: "Connection")
public enum NetworkStatus: CustomStringConvertible {
case notReachable, reachableViaWiFi, reachableViaWWAN
public var description: String {
switch self {
case .reachableViaWWAN: return "Cellular"
case .reachableViaWiFi: return "WiFi"
case .notReachable: return "No Connection"
}
}
}
public enum Connection: CustomStringConvertible {
case unavailable, wifi, cellular
public var description: String {
switch self {
case .cellular: return "Cellular"
case .wifi: return "WiFi"
case .unavailable: return "No Connection"
}
}
@available(*, deprecated, renamed: "unavailable")
public static let none: Connection = .unavailable
}
public var whenReachable: NetworkReachable?
public var whenUnreachable: NetworkUnreachable?
@available(*, deprecated, renamed: "allowsCellularConnection")
public let reachableOnWWAN: Bool = true
/// Set to `false` to force Reachability.connection to .none when on cellular connection (default value `true`)
public var allowsCellularConnection: Bool
// The notification center on which "reachability changed" events are being posted
public var notificationCenter: NotificationCenter = NotificationCenter.default
@available(*, deprecated, renamed: "connection.description")
public var currentReachabilityString: String {
return "\(connection)"
}
@available(*, unavailable, renamed: "connection")
public var currentReachabilityStatus: Connection {
return connection
}
public var connection: Connection {
if flags == nil {
try? setReachabilityFlags()
}
switch flags?.connection {
case .unavailable?, nil: return .unavailable
case .cellular?: return allowsCellularConnection ? .cellular : .unavailable
case .wifi?: return .wifi
}
}
fileprivate var isRunningOnDevice: Bool = {
#if targetEnvironment(simulator)
return false
#else
return true
#endif
}()
fileprivate(set) var notifierRunning = false
fileprivate let reachabilityRef: SCNetworkReachability
fileprivate let reachabilitySerialQueue: DispatchQueue
fileprivate let notificationQueue: DispatchQueue?
fileprivate(set) var flags: SCNetworkReachabilityFlags? {
didSet {
guard flags != oldValue else { return }
notifyReachabilityChanged()
}
}
required public init(reachabilityRef: SCNetworkReachability,
queueQoS: DispatchQoS = .default,
targetQueue: DispatchQueue? = nil,
notificationQueue: DispatchQueue? = .main) {
self.allowsCellularConnection = true
self.reachabilityRef = reachabilityRef
self.reachabilitySerialQueue = DispatchQueue(label: "uk.co.ashleymills.reachability", qos: queueQoS, target: targetQueue)
self.notificationQueue = notificationQueue
}
public convenience init(hostname: String,
queueQoS: DispatchQoS = .default,
targetQueue: DispatchQueue? = nil,
notificationQueue: DispatchQueue? = .main) throws {
guard let ref = SCNetworkReachabilityCreateWithName(nil, hostname) else {
throw ReachabilityError.failedToCreateWithHostname(hostname, SCError())
}
self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue, notificationQueue: notificationQueue)
}
public convenience init(queueQoS: DispatchQoS = .default,
targetQueue: DispatchQueue? = nil,
notificationQueue: DispatchQueue? = .main) throws {
var zeroAddress = sockaddr()
zeroAddress.sa_len = UInt8(MemoryLayout<sockaddr>.size)
zeroAddress.sa_family = sa_family_t(AF_INET)
guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else {
throw ReachabilityError.failedToCreateWithAddress(zeroAddress, SCError())
}
self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue, notificationQueue: notificationQueue)
}
deinit {
stopNotifier()
}
}
public extension Reachability {
// MARK: - *** Notifier methods ***
func startNotifier() throws {
guard !notifierRunning else { return }
let callback: SCNetworkReachabilityCallBack = { (reachability, flags, info) in
guard let info = info else { return }
// `weakifiedReachability` is guaranteed to exist by virtue of our
// retain/release callbacks which we provided to the `SCNetworkReachabilityContext`.
let weakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info).takeUnretainedValue()
// The weak `reachability` _may_ no longer exist if the `Reachability`
// object has since been deallocated but a callback was already in flight.
weakifiedReachability.reachability?.flags = flags
}
let weakifiedReachability = ReachabilityWeakifier(reachability: self)
let opaqueWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.passUnretained(weakifiedReachability).toOpaque()
var context = SCNetworkReachabilityContext(
version: 0,
info: UnsafeMutableRawPointer(opaqueWeakifiedReachability),
retain: { (info: UnsafeRawPointer) -> UnsafeRawPointer in
let unmanagedWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info)
_ = unmanagedWeakifiedReachability.retain()
return UnsafeRawPointer(unmanagedWeakifiedReachability.toOpaque())
},
release: { (info: UnsafeRawPointer) -> Void in
let unmanagedWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info)
unmanagedWeakifiedReachability.release()
},
copyDescription: { (info: UnsafeRawPointer) -> Unmanaged<CFString> in
let unmanagedWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info)
let weakifiedReachability = unmanagedWeakifiedReachability.takeUnretainedValue()
let description = weakifiedReachability.reachability?.description ?? "nil"
return Unmanaged.passRetained(description as CFString)
}
)
if !SCNetworkReachabilitySetCallback(reachabilityRef, callback, &context) {
stopNotifier()
throw ReachabilityError.unableToSetCallback(SCError())
}
if !SCNetworkReachabilitySetDispatchQueue(reachabilityRef, reachabilitySerialQueue) {
stopNotifier()
throw ReachabilityError.unableToSetDispatchQueue(SCError())
}
// Perform an initial check
try setReachabilityFlags()
notifierRunning = true
}
func stopNotifier() {
defer { notifierRunning = false }
SCNetworkReachabilitySetCallback(reachabilityRef, nil, nil)
SCNetworkReachabilitySetDispatchQueue(reachabilityRef, nil)
}
// MARK: - *** Connection test methods ***
@available(*, deprecated, message: "Please use `connection != .none`")
var isReachable: Bool {
return connection != .unavailable
}
@available(*, deprecated, message: "Please use `connection == .cellular`")
var isReachableViaWWAN: Bool {
// Check we're not on the simulator, we're REACHABLE and check we're on WWAN
return connection == .cellular
}
@available(*, deprecated, message: "Please use `connection == .wifi`")
var isReachableViaWiFi: Bool {
return connection == .wifi
}
var description: String {
return flags?.description ?? "unavailable flags"
}
}
fileprivate extension Reachability {
func setReachabilityFlags() throws {
try reachabilitySerialQueue.sync { [unowned self] in
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags) {
self.stopNotifier()
throw ReachabilityError.unableToGetFlags(SCError())
}
self.flags = flags
}
}
func notifyReachabilityChanged() {
let notify = { [weak self] in
guard let self = self else { return }
self.connection != .unavailable ? self.whenReachable?(self) : self.whenUnreachable?(self)
self.notificationCenter.post(name: .reachabilityChanged, object: self)
}
// notify on the configured `notificationQueue`, or the caller's (i.e. `reachabilitySerialQueue`)
notificationQueue?.async(execute: notify) ?? notify()
}
}
extension SCNetworkReachabilityFlags {
typealias Connection = Reachability.Connection
var connection: Connection {
guard isReachableFlagSet else { return .unavailable }
// If we're reachable, but not on an iOS device (i.e. simulator), we must be on WiFi
#if targetEnvironment(simulator)
return .wifi
#else
var connection = Connection.unavailable
if !isConnectionRequiredFlagSet {
connection = .wifi
}
if isConnectionOnTrafficOrDemandFlagSet {
if !isInterventionRequiredFlagSet {
connection = .wifi
}
}
if isOnWWANFlagSet {
connection = .cellular
}
return connection
#endif
}
var isOnWWANFlagSet: Bool {
#if os(iOS)
return contains(.isWWAN)
#else
return false
#endif
}
var isReachableFlagSet: Bool {
return contains(.reachable)
}
var isConnectionRequiredFlagSet: Bool {
return contains(.connectionRequired)
}
var isInterventionRequiredFlagSet: Bool {
return contains(.interventionRequired)
}
var isConnectionOnTrafficFlagSet: Bool {
return contains(.connectionOnTraffic)
}
var isConnectionOnDemandFlagSet: Bool {
return contains(.connectionOnDemand)
}
var isConnectionOnTrafficOrDemandFlagSet: Bool {
return !intersection([.connectionOnTraffic, .connectionOnDemand]).isEmpty
}
var isTransientConnectionFlagSet: Bool {
return contains(.transientConnection)
}
var isLocalAddressFlagSet: Bool {
return contains(.isLocalAddress)
}
var isDirectFlagSet: Bool {
return contains(.isDirect)
}
var isConnectionRequiredAndTransientFlagSet: Bool {
return intersection([.connectionRequired, .transientConnection]) == [.connectionRequired, .transientConnection]
}
var description: String {
let W = isOnWWANFlagSet ? "W" : "-"
let R = isReachableFlagSet ? "R" : "-"
let c = isConnectionRequiredFlagSet ? "c" : "-"
let t = isTransientConnectionFlagSet ? "t" : "-"
let i = isInterventionRequiredFlagSet ? "i" : "-"
let C = isConnectionOnTrafficFlagSet ? "C" : "-"
let D = isConnectionOnDemandFlagSet ? "D" : "-"
let l = isLocalAddressFlagSet ? "l" : "-"
let d = isDirectFlagSet ? "d" : "-"
return "\(W)\(R) \(c)\(t)\(i)\(C)\(D)\(l)\(d)"
}
}
/**
`ReachabilityWeakifier` weakly wraps the `Reachability` class
in order to break retain cycles when interacting with CoreFoundation.
CoreFoundation callbacks expect a pair of retain/release whenever an
opaque `info` parameter is provided. These callbacks exist to guard
against memory management race conditions when invoking the callbacks.
#### Race Condition
If we passed `SCNetworkReachabilitySetCallback` a direct reference to our
`Reachability` class without also providing corresponding retain/release
callbacks, then a race condition can lead to crashes when:
- `Reachability` is deallocated on thread X
- A `SCNetworkReachability` callback(s) is already in flight on thread Y
#### Retain Cycle
If we pass `Reachability` to CoreFoundtion while also providing retain/
release callbacks, we would create a retain cycle once CoreFoundation
retains our `Reachability` class. This fixes the crashes and his how
CoreFoundation expects the API to be used, but doesn't play nicely with
Swift/ARC. This cycle would only be broken after manually calling
`stopNotifier()` `deinit` would never be called.
#### ReachabilityWeakifier
By providing both retain/release callbacks and wrapping `Reachability` in
a weak wrapper, we:
- interact correctly with CoreFoundation, thereby avoiding a crash.
See "Memory Management Programming Guide for Core Foundation".
- don't alter the public API of `Reachability.swift` in any way
- still allow for automatic stopping of the notifier on `deinit`.
*/
private class ReachabilityWeakifier {
weak var reachability: Reachability?
init(reachability: Reachability) {
self.reachability = reachability
}
}

View File

@@ -1,15 +0,0 @@
// Objective-C API for talking to the following Go packages
//
// open_im_sdk/open_im_sdk
// open_im_sdk/open_im_sdk_callback
//
// File is generated by gomobile bind. Do not edit.
#ifndef __OpenIMCore_FRAMEWORK_H__
#define __OpenIMCore_FRAMEWORK_H__
#include "Open_im_sdk.objc.h"
#include "Open_im_sdk_callback.objc.h"
#include "Universe.objc.h"
#endif

View File

@@ -1,210 +0,0 @@
// Objective-C API for talking to open_im_sdk/open_im_sdk Go package.
// gobind -lang=objc open_im_sdk/open_im_sdk
//
// File is generated by gobind. Do not edit.
#ifndef __Open_im_sdk_H__
#define __Open_im_sdk_H__
@import Foundation;
#include "ref.h"
#include "Universe.objc.h"
#include "Open_im_sdk_callback.objc.h"
@interface Open_im_sdk : NSObject
// skipped variable UserRouterMap with unsupported type: map[string]*open_im_sdk/internal/login.LoginMgr
// skipped variable UserSDKRwLock with unsupported type: sync.RWMutex
@end
FOUNDATION_EXPORT void Open_im_sdkAcceptFriendApplication(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDHandleMsg);
FOUNDATION_EXPORT void Open_im_sdkAcceptGroupApplication(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable fromUserID, NSString* _Nullable handleMsg);
FOUNDATION_EXPORT void Open_im_sdkAddBlack(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable blackUserID);
FOUNDATION_EXPORT void Open_im_sdkAddFriend(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDReqMsg);
FOUNDATION_EXPORT void Open_im_sdkCheckFriend(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDList);
FOUNDATION_EXPORT BOOL Open_im_sdkCheckToken(NSString* _Nullable userID, NSString* _Nullable token, NSError* _Nullable* _Nullable error);
FOUNDATION_EXPORT void Open_im_sdkClearC2CHistoryMessage(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userID);
FOUNDATION_EXPORT void Open_im_sdkClearGroupHistoryMessage(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateCardMessage(NSString* _Nullable operationID, NSString* _Nullable cardInfo);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateCustomMessage(NSString* _Nullable operationID, NSString* _Nullable data, NSString* _Nullable extension, NSString* _Nullable description);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateFileMessage(NSString* _Nullable operationID, NSString* _Nullable filePath, NSString* _Nullable fileName);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateFileMessageByURL(NSString* _Nullable operationID, NSString* _Nullable fileBaseInfo);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateFileMessageFromFullPath(NSString* _Nullable operationID, NSString* _Nullable fileFullPath, NSString* _Nullable fileName);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateForwardMessage(NSString* _Nullable operationID, NSString* _Nullable m);
FOUNDATION_EXPORT void Open_im_sdkCreateGroup(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupBaseInfo, NSString* _Nullable memberList);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateImageMessage(NSString* _Nullable operationID, NSString* _Nullable imagePath);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateImageMessageByURL(NSString* _Nullable operationID, NSString* _Nullable sourcePicture, NSString* _Nullable bigPicture, NSString* _Nullable snapshotPicture);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateImageMessageFromFullPath(NSString* _Nullable operationID, NSString* _Nullable imageFullPath);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateLocationMessage(NSString* _Nullable operationID, NSString* _Nullable description, double longitude, double latitude);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateMergerMessage(NSString* _Nullable operationID, NSString* _Nullable messageList, NSString* _Nullable title, NSString* _Nullable summaryList);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateQuoteMessage(NSString* _Nullable operationID, NSString* _Nullable text, NSString* _Nullable message);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateSoundMessage(NSString* _Nullable operationID, NSString* _Nullable soundPath, int64_t duration);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateSoundMessageByURL(NSString* _Nullable operationID, NSString* _Nullable soundBaseInfo);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateSoundMessageFromFullPath(NSString* _Nullable operationID, NSString* _Nullable soundPath, int64_t duration);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateTextAtMessage(NSString* _Nullable operationID, NSString* _Nullable text, NSString* _Nullable atUserList);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateTextMessage(NSString* _Nullable operationID, NSString* _Nullable text);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateVideoMessage(NSString* _Nullable operationID, NSString* _Nullable videoPath, NSString* _Nullable videoType, int64_t duration, NSString* _Nullable snapshotPath);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateVideoMessageByURL(NSString* _Nullable operationID, NSString* _Nullable videoBaseInfo);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkCreateVideoMessageFromFullPath(NSString* _Nullable operationID, NSString* _Nullable videoFullPath, NSString* _Nullable videoType, int64_t duration, NSString* _Nullable snapshotFullPath);
FOUNDATION_EXPORT void Open_im_sdkDeleteConversation(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationID);
FOUNDATION_EXPORT void Open_im_sdkDeleteFriend(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable friendUserID);
FOUNDATION_EXPORT void Open_im_sdkDeleteMessageFromLocalStorage(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message);
FOUNDATION_EXPORT void Open_im_sdkGetAllConversationList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkGetBlackList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkGetConversationIDBySessionType(NSString* _Nullable sourceID, long sessionType);
FOUNDATION_EXPORT void Open_im_sdkGetConversationListSplit(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, long offset, long count);
FOUNDATION_EXPORT void Open_im_sdkGetConversationRecvMessageOpt(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationIDList);
FOUNDATION_EXPORT void Open_im_sdkGetDesignatedFriendsInfo(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDList);
FOUNDATION_EXPORT void Open_im_sdkGetFriendList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkGetGroupMemberList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, int32_t filter, int32_t offset, int32_t count);
FOUNDATION_EXPORT void Open_im_sdkGetGroupMembersInfo(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable userIDList);
FOUNDATION_EXPORT void Open_im_sdkGetGroupsInfo(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupIDList);
FOUNDATION_EXPORT void Open_im_sdkGetHistoryMessageList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable getMessageOptions);
FOUNDATION_EXPORT void Open_im_sdkGetJoinedGroupList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT int32_t Open_im_sdkGetLoginStatus(void);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkGetLoginUser(void);
FOUNDATION_EXPORT void Open_im_sdkGetMultipleConversation(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationIDList);
FOUNDATION_EXPORT void Open_im_sdkGetOneConversation(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, long sessionType, NSString* _Nullable sourceID);
FOUNDATION_EXPORT void Open_im_sdkGetRecvFriendApplicationList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkGetRecvGroupApplicationList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkGetSelfUserInfo(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkGetSendFriendApplicationList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkGetSendGroupApplicationList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkGetTotalUnreadMsgCount(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
// skipped function GetUserWorker with unsupported parameter or return types
/**
* /////////////////////user/////////////////////
*/
FOUNDATION_EXPORT void Open_im_sdkGetUsersInfo(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDList);
// skipped function InitOnce with unsupported parameter or return types
FOUNDATION_EXPORT BOOL Open_im_sdkInitSDK(id<Open_im_sdk_callbackOnConnListener> _Nullable listener, NSString* _Nullable operationID, NSString* _Nullable config);
FOUNDATION_EXPORT void Open_im_sdkInsertGroupMessageToLocalStorage(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message, NSString* _Nullable groupID, NSString* _Nullable sendID);
FOUNDATION_EXPORT void Open_im_sdkInsertSingleMessageToLocalStorage(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message, NSString* _Nullable recvID, NSString* _Nullable sendID);
FOUNDATION_EXPORT void Open_im_sdkInviteUserToGroup(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable reason, NSString* _Nullable userIDList);
FOUNDATION_EXPORT void Open_im_sdkJoinGroup(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable reqMsg);
FOUNDATION_EXPORT void Open_im_sdkKickGroupMember(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable reason, NSString* _Nullable userIDList);
FOUNDATION_EXPORT void Open_im_sdkLogin(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userID, NSString* _Nullable token);
FOUNDATION_EXPORT void Open_im_sdkLogout(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT void Open_im_sdkMarkC2CMessageAsRead(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userID, NSString* _Nullable msgIDList);
FOUNDATION_EXPORT void Open_im_sdkMarkGroupMessageHasRead(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID);
FOUNDATION_EXPORT void Open_im_sdkPinConversation(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationID, BOOL isPinned);
FOUNDATION_EXPORT void Open_im_sdkQuitGroup(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID);
FOUNDATION_EXPORT void Open_im_sdkRefuseFriendApplication(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDHandleMsg);
FOUNDATION_EXPORT void Open_im_sdkRefuseGroupApplication(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable fromUserID, NSString* _Nullable handleMsg);
FOUNDATION_EXPORT void Open_im_sdkRemoveBlack(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable removeUserID);
FOUNDATION_EXPORT void Open_im_sdkRevokeMessage(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkSdkVersion(void);
FOUNDATION_EXPORT void Open_im_sdkSearchLocalMessages(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable searchParam);
FOUNDATION_EXPORT void Open_im_sdkSendMessage(id<Open_im_sdk_callbackSendMsgCallBack> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message, NSString* _Nullable recvID, NSString* _Nullable groupID, NSString* _Nullable offlinePushInfo);
FOUNDATION_EXPORT void Open_im_sdkSendMessageNotOss(id<Open_im_sdk_callbackSendMsgCallBack> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message, NSString* _Nullable recvID, NSString* _Nullable groupID, NSString* _Nullable offlinePushInfo);
FOUNDATION_EXPORT void Open_im_sdkSetAdvancedMsgListener(id<Open_im_sdk_callbackOnAdvancedMsgListener> _Nullable listener);
FOUNDATION_EXPORT void Open_im_sdkSetConversationDraft(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationID, NSString* _Nullable draftText);
FOUNDATION_EXPORT void Open_im_sdkSetConversationListener(id<Open_im_sdk_callbackOnConversationListener> _Nullable listener);
FOUNDATION_EXPORT void Open_im_sdkSetConversationRecvMessageOpt(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationIDList, long opt);
FOUNDATION_EXPORT void Open_im_sdkSetFriendListener(id<Open_im_sdk_callbackOnFriendshipListener> _Nullable listener);
FOUNDATION_EXPORT void Open_im_sdkSetFriendRemark(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userIDRemark);
FOUNDATION_EXPORT void Open_im_sdkSetGroupInfo(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable groupInfo);
/**
* ////////////////////////group//////////////////////////////////////////
*/
FOUNDATION_EXPORT void Open_im_sdkSetGroupListener(id<Open_im_sdk_callbackOnGroupListener> _Nullable callback);
FOUNDATION_EXPORT void Open_im_sdkSetSelfInfo(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userInfo);
FOUNDATION_EXPORT void Open_im_sdkSetUserListener(id<Open_im_sdk_callbackOnUserListener> _Nullable listener);
FOUNDATION_EXPORT void Open_im_sdkTransferGroupOwner(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable newOwnerUserID);
FOUNDATION_EXPORT void Open_im_sdkTypingStatusUpdate(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable recvID, NSString* _Nullable msgTip);
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkUploadImage(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable filePath, NSString* _Nullable token, NSString* _Nullable obj);
#endif

View File

@@ -1,205 +0,0 @@
// Objective-C API for talking to open_im_sdk/open_im_sdk_callback Go package.
// gobind -lang=objc open_im_sdk/open_im_sdk_callback
//
// File is generated by gobind. Do not edit.
#ifndef __Open_im_sdk_callback_H__
#define __Open_im_sdk_callback_H__
@import Foundation;
#include "ref.h"
#include "Universe.objc.h"
@protocol Open_im_sdk_callbackBase;
@class Open_im_sdk_callbackBase;
@protocol Open_im_sdk_callbackOnAdvancedMsgListener;
@class Open_im_sdk_callbackOnAdvancedMsgListener;
@protocol Open_im_sdk_callbackOnConnListener;
@class Open_im_sdk_callbackOnConnListener;
@protocol Open_im_sdk_callbackOnConversationListener;
@class Open_im_sdk_callbackOnConversationListener;
@protocol Open_im_sdk_callbackOnFriendshipListener;
@class Open_im_sdk_callbackOnFriendshipListener;
@protocol Open_im_sdk_callbackOnGroupListener;
@class Open_im_sdk_callbackOnGroupListener;
@protocol Open_im_sdk_callbackOnUserListener;
@class Open_im_sdk_callbackOnUserListener;
@protocol Open_im_sdk_callbackSendMsgCallBack;
@class Open_im_sdk_callbackSendMsgCallBack;
@protocol Open_im_sdk_callbackBase <NSObject>
- (void)onError:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onSuccess:(NSString* _Nullable)data;
@end
@protocol Open_im_sdk_callbackOnAdvancedMsgListener <NSObject>
- (void)onRecvC2CReadReceipt:(NSString* _Nullable)msgReceiptList;
- (void)onRecvMessageRevoked:(NSString* _Nullable)msgId;
- (void)onRecvNewMessage:(NSString* _Nullable)message;
@end
@protocol Open_im_sdk_callbackOnConnListener <NSObject>
- (void)onConnectFailed:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onConnectSuccess;
- (void)onConnecting;
- (void)onKickedOffline;
- (void)onUserTokenExpired;
@end
@protocol Open_im_sdk_callbackOnConversationListener <NSObject>
- (void)onConversationChanged:(NSString* _Nullable)conversationList;
- (void)onNewConversation:(NSString* _Nullable)conversationList;
- (void)onSyncServerFailed;
- (void)onSyncServerFinish;
- (void)onSyncServerStart;
- (void)onTotalUnreadMessageCountChanged:(int32_t)totalUnreadCount;
@end
@protocol Open_im_sdk_callbackOnFriendshipListener <NSObject>
- (void)onBlackAdded:(NSString* _Nullable)blackInfo;
- (void)onBlackDeleted:(NSString* _Nullable)blackInfo;
- (void)onFriendAdded:(NSString* _Nullable)friendInfo;
- (void)onFriendApplicationAccepted:(NSString* _Nullable)groupApplication;
- (void)onFriendApplicationAdded:(NSString* _Nullable)friendApplication;
- (void)onFriendApplicationDeleted:(NSString* _Nullable)friendApplication;
- (void)onFriendApplicationRejected:(NSString* _Nullable)friendApplication;
- (void)onFriendDeleted:(NSString* _Nullable)friendInfo;
- (void)onFriendInfoChanged:(NSString* _Nullable)friendInfo;
@end
@protocol Open_im_sdk_callbackOnGroupListener <NSObject>
- (void)onGroupApplicationAccepted:(NSString* _Nullable)groupApplication;
- (void)onGroupApplicationAdded:(NSString* _Nullable)groupApplication;
- (void)onGroupApplicationDeleted:(NSString* _Nullable)groupApplication;
- (void)onGroupApplicationRejected:(NSString* _Nullable)groupApplication;
- (void)onGroupInfoChanged:(NSString* _Nullable)groupInfo;
- (void)onGroupMemberAdded:(NSString* _Nullable)groupMemberInfo;
- (void)onGroupMemberDeleted:(NSString* _Nullable)groupMemberInfo;
- (void)onGroupMemberInfoChanged:(NSString* _Nullable)groupMemberInfo;
- (void)onJoinedGroupAdded:(NSString* _Nullable)groupInfo;
- (void)onJoinedGroupDeleted:(NSString* _Nullable)groupInfo;
@end
@protocol Open_im_sdk_callbackOnUserListener <NSObject>
- (void)onSelfInfoUpdated:(NSString* _Nullable)userInfo;
@end
@protocol Open_im_sdk_callbackSendMsgCallBack <NSObject>
- (void)onError:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onProgress:(long)progress;
- (void)onSuccess:(NSString* _Nullable)data;
@end
@class Open_im_sdk_callbackBase;
@class Open_im_sdk_callbackOnAdvancedMsgListener;
@class Open_im_sdk_callbackOnConnListener;
@class Open_im_sdk_callbackOnConversationListener;
@class Open_im_sdk_callbackOnFriendshipListener;
@class Open_im_sdk_callbackOnGroupListener;
@class Open_im_sdk_callbackOnUserListener;
@class Open_im_sdk_callbackSendMsgCallBack;
@interface Open_im_sdk_callbackBase : NSObject <goSeqRefInterface, Open_im_sdk_callbackBase> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onError:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onSuccess:(NSString* _Nullable)data;
@end
@interface Open_im_sdk_callbackOnAdvancedMsgListener : NSObject <goSeqRefInterface, Open_im_sdk_callbackOnAdvancedMsgListener> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onRecvC2CReadReceipt:(NSString* _Nullable)msgReceiptList;
- (void)onRecvMessageRevoked:(NSString* _Nullable)msgId;
- (void)onRecvNewMessage:(NSString* _Nullable)message;
@end
@interface Open_im_sdk_callbackOnConnListener : NSObject <goSeqRefInterface, Open_im_sdk_callbackOnConnListener> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onConnectFailed:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onConnectSuccess;
- (void)onConnecting;
- (void)onKickedOffline;
- (void)onUserTokenExpired;
@end
@interface Open_im_sdk_callbackOnConversationListener : NSObject <goSeqRefInterface, Open_im_sdk_callbackOnConversationListener> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onConversationChanged:(NSString* _Nullable)conversationList;
- (void)onNewConversation:(NSString* _Nullable)conversationList;
- (void)onSyncServerFailed;
- (void)onSyncServerFinish;
- (void)onSyncServerStart;
- (void)onTotalUnreadMessageCountChanged:(int32_t)totalUnreadCount;
@end
@interface Open_im_sdk_callbackOnFriendshipListener : NSObject <goSeqRefInterface, Open_im_sdk_callbackOnFriendshipListener> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onBlackAdded:(NSString* _Nullable)blackInfo;
- (void)onBlackDeleted:(NSString* _Nullable)blackInfo;
- (void)onFriendAdded:(NSString* _Nullable)friendInfo;
- (void)onFriendApplicationAccepted:(NSString* _Nullable)groupApplication;
- (void)onFriendApplicationAdded:(NSString* _Nullable)friendApplication;
- (void)onFriendApplicationDeleted:(NSString* _Nullable)friendApplication;
- (void)onFriendApplicationRejected:(NSString* _Nullable)friendApplication;
- (void)onFriendDeleted:(NSString* _Nullable)friendInfo;
- (void)onFriendInfoChanged:(NSString* _Nullable)friendInfo;
@end
@interface Open_im_sdk_callbackOnGroupListener : NSObject <goSeqRefInterface, Open_im_sdk_callbackOnGroupListener> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onGroupApplicationAccepted:(NSString* _Nullable)groupApplication;
- (void)onGroupApplicationAdded:(NSString* _Nullable)groupApplication;
- (void)onGroupApplicationDeleted:(NSString* _Nullable)groupApplication;
- (void)onGroupApplicationRejected:(NSString* _Nullable)groupApplication;
- (void)onGroupInfoChanged:(NSString* _Nullable)groupInfo;
- (void)onGroupMemberAdded:(NSString* _Nullable)groupMemberInfo;
- (void)onGroupMemberDeleted:(NSString* _Nullable)groupMemberInfo;
- (void)onGroupMemberInfoChanged:(NSString* _Nullable)groupMemberInfo;
- (void)onJoinedGroupAdded:(NSString* _Nullable)groupInfo;
- (void)onJoinedGroupDeleted:(NSString* _Nullable)groupInfo;
@end
@interface Open_im_sdk_callbackOnUserListener : NSObject <goSeqRefInterface, Open_im_sdk_callbackOnUserListener> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onSelfInfoUpdated:(NSString* _Nullable)userInfo;
@end
@interface Open_im_sdk_callbackSendMsgCallBack : NSObject <goSeqRefInterface, Open_im_sdk_callbackSendMsgCallBack> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onError:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onProgress:(long)progress;
- (void)onSuccess:(NSString* _Nullable)data;
@end
#endif

View File

@@ -1,29 +0,0 @@
// Objective-C API for talking to Go package.
// gobind -lang=objc
//
// File is generated by gobind. Do not edit.
#ifndef __Universe_H__
#define __Universe_H__
@import Foundation;
#include "ref.h"
@protocol Universeerror;
@class Universeerror;
@protocol Universeerror <NSObject>
- (NSString* _Nonnull)error;
@end
@class Universeerror;
@interface Universeerror : NSError <goSeqRefInterface, Universeerror> {
}
@property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (NSString* _Nonnull)error;
@end
#endif

View File

@@ -1,35 +0,0 @@
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#ifndef __GO_REF_HDR__
#define __GO_REF_HDR__
#include <Foundation/Foundation.h>
// GoSeqRef is an object tagged with an integer for passing back and
// forth across the language boundary. A GoSeqRef may represent either
// an instance of a Go object, or an Objective-C object passed to Go.
// The explicit allocation of a GoSeqRef is used to pin a Go object
// when it is passed to Objective-C. The Go seq package maintains a
// reference to the Go object in a map keyed by the refnum along with
// a reference count. When the reference count reaches zero, the Go
// seq package will clear the corresponding entry in the map.
@interface GoSeqRef : NSObject {
}
@property(readonly) int32_t refnum;
@property(strong) id obj; // NULL when representing a Go object.
// new GoSeqRef object to proxy a Go object. The refnum must be
// provided from Go side.
- (instancetype)initWithRefnum:(int32_t)refnum obj:(id)obj;
- (int32_t)incNum;
@end
@protocol goSeqRefInterface
-(GoSeqRef*) _ref;
@end
#endif

View File

@@ -1,9 +0,0 @@
framework module "OpenIMCore" {
header "ref.h"
header "Open_im_sdk.objc.h"
header "Open_im_sdk_callback.objc.h"
header "Universe.objc.h"
header "OpenIMCore.h"
export *
}

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>

View File

@@ -15,9 +15,11 @@ A new Flutter project.
s.source = { :path => '.' } s.source = { :path => '.' }
s.source_files = 'Classes/**/*' s.source_files = 'Classes/**/*'
s.dependency 'Flutter' s.dependency 'Flutter'
s.platform = :ios, '8.0' s.platform = :ios, '11.0'
s.vendored_frameworks = 'Framework/*.framework' s.dependency 'OpenIMSDKCore','3.4.0'
s.static_framework = true
# s.vendored_frameworks = 'Framework/*.framework'
# Flutter.framework does not contain a i386 slice. # Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386 arm64' } s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386 arm64' }
s.swift_version = '5.0' s.swift_version = '5.0'

View File

@@ -1,35 +1,38 @@
library flutter_openim_sdk; library flutter_openim_sdk;
export 'src/enum/conversation_type.dart'; export 'src/enum/conversation_type.dart';
export 'src/enum/group_at_type.dart';
export 'src/enum/group_role_level.dart'; export 'src/enum/group_role_level.dart';
export 'src/enum/group_type.dart';
export 'src/enum/group_verification.dart';
export 'src/enum/im_platform.dart'; export 'src/enum/im_platform.dart';
export 'src/enum/listener_type.dart'; export 'src/enum/listener_type.dart';
export 'src/enum/login_status.dart';
export 'src/enum/message_status.dart'; export 'src/enum/message_status.dart';
export 'src/enum/message_type.dart'; export 'src/enum/message_type.dart';
export 'src/enum/sdk_error_code.dart';
export 'src/listener/advanced_msg_listener.dart'; export 'src/listener/advanced_msg_listener.dart';
export 'src/listener/advanced_msg_listener.dart';
export 'src/listener/connect_listener.dart';
export 'src/listener/connect_listener.dart'; export 'src/listener/connect_listener.dart';
export 'src/listener/conversation_listener.dart'; export 'src/listener/conversation_listener.dart';
export 'src/listener/friendship_listener.dart'; export 'src/listener/custom_business_listener.dart';
export 'src/listener/friendship_listener.dart'; export 'src/listener/friendship_listener.dart';
export 'src/listener/group_listener.dart'; export 'src/listener/group_listener.dart';
export 'src/listener/group_listener.dart'; export 'src/listener/listener_for_service.dart';
export 'src/listener/msg_send_progress_listener.dart'; export 'src/listener/msg_send_progress_listener.dart';
export 'src/listener/msg_send_progress_listener.dart'; export 'src/listener/upload_file_listener.dart';
export 'src/listener/user_listener.dart';
export 'src/listener/user_listener.dart'; export 'src/listener/user_listener.dart';
export 'src/manager/im_conversation_manager.dart'; export 'src/manager/im_conversation_manager.dart';
export 'src/manager/im_friendship_manager.dart'; export 'src/manager/im_friendship_manager.dart';
export 'src/manager/im_group_manager.dart'; export 'src/manager/im_group_manager.dart';
export 'src/manager/im_manager.dart'; export 'src/manager/im_manager.dart';
export 'src/manager/im_message_manager.dart'; export 'src/manager/im_message_manager.dart';
export 'src/manager/im_offline_push_manager.dart';
export 'src/manager/im_signaling_manager.dart';
export 'src/manager/im_user_manager.dart'; export 'src/manager/im_user_manager.dart';
export 'src/models/conversation_info.dart'; export 'src/models/conversation_info.dart';
export 'src/models/group_info.dart'; export 'src/models/group_info.dart';
export 'src/models/init_config.dart';
export 'src/models/message.dart'; export 'src/models/message.dart';
export 'src/models/notification_info.dart';
export 'src/models/search_info.dart';
export 'src/models/user_info.dart'; export 'src/models/user_info.dart';
export 'src/openim.dart'; export 'src/openim.dart';
export 'src/utils.dart'; export 'src/utils.dart';

View File

@@ -0,0 +1,4 @@
class AllowType {
static const allow = 0;
static const notAllow = 1;
}

View File

@@ -1,4 +1,15 @@
/// Conversation types
class ConversationType { class ConversationType {
/// Single chat
static const single = 1; static const single = 1;
/// Group (Deprecated in v3)
@Deprecated('Use superGroup instead')
static const group = 2; static const group = 2;
/// Super group chat
static const superGroup = 3;
/// Notification
static const notification = 4;
} }

View File

@@ -0,0 +1,17 @@
/// Conversation Strong Hint Content
class GroupAtType {
/// Cancel all hints, equivalent to calling the resetConversationGroupAtType method
static const atNormal = 0;
/// @ me hint
static const atMe = 1;
/// @ all hint
static const atAll = 2;
/// @ all and @ me hint
static const atAllAtMe = 3;
/// Group notification hint
static const groupNotification = 4;
}

View File

@@ -0,0 +1,14 @@
/// Group Member Filter
class GroupMemberFilter {
static const all = 0;
static const owner = 1;
static const admin = 2;
static const member = 3;
static const adminAndMember = 4;
static const superAndAdmin = 4;
}

View File

@@ -1,7 +1,11 @@
/// 1 ordinary member, 2 group owners, 3 administrators /// Group Member Roles
/// 1普通成员, 2群主3管理员
class GroupRoleLevel { class GroupRoleLevel {
static const member = 1; /// Group owner
static const owner = 2; static const owner = 100;
static const admin = 3;
/// Administrator
static const admin = 60;
/// Regular member
static const member = 20;
} }

View File

@@ -0,0 +1,7 @@
/// Group Status
class GroupStatus {
static const normal = 0;
static const baned = 1;
static const dismissed = 2;
static const muted = 3;
}

View File

@@ -0,0 +1,9 @@
/// Group Types
class GroupType {
/// General group (Deprecated in v3)
@Deprecated('Use work instead')
static const int general = 0;
/// Work group
static const int work = 2;
}

View File

@@ -0,0 +1,11 @@
/// Group Join Verification Settings
class GroupVerification {
/// Apply and invite directly for entry
static const int applyNeedVerificationInviteDirectly = 0;
/// Everyone needs verification to join, except for group owners and administrators who can invite directly
static const int allNeedVerification = 1;
/// Directly join the group
static const int directly = 2;
}

View File

@@ -1,9 +1,16 @@
/// The current Flutter platform supports only Android/iOS
class IMPlatform { class IMPlatform {
/// iOS
static const ios = 1; static const ios = 1;
/// Android
static const android = 2; static const android = 2;
static const windows = 3; static const windows = 3;
static const xos = 4; static const xos = 4;
static const web = 5; static const web = 5;
static const mini_web = 6; static const miniWeb = 6;
static const linux = 7; static const linux = 7;
static const androidPad = 8;
static const ipad = 9;
} }

View File

@@ -0,0 +1,5 @@
class JoinSource {
static const invited = 2;
static const search = 3;
static const QRCode = 4;
}

View File

@@ -1,11 +1,18 @@
/// Callback Types
class ListenerType { class ListenerType {
static final simpleMsgListener = 'simpleMsgListener'; static const simpleMsgListener = 'simpleMsgListener';
static final connectListener = 'connectListener'; static const connectListener = 'connectListener';
static final userListener = 'userListener'; static const userListener = 'userListener';
static final groupListener = 'groupListener'; static const groupListener = 'groupListener';
static final advancedMsgListener = 'advancedMsgListener'; static const advancedMsgListener = 'advancedMsgListener';
static final conversationListener = 'conversationListener'; static const conversationListener = 'conversationListener';
static final friendListener = 'friendListener'; static const friendListener = 'friendListener';
static final signalingListener = 'signalingListener'; static const signalingListener = 'signalingListener';
static final msgSendProgressListener = "msgSendProgressListener"; static const msgSendProgressListener = "msgSendProgressListener";
static const workMomentsListener = "workMomentsListener";
static const organizationListener = "organizationListener";
static const customBusinessListener = "customBusinessListener";
static const messageKvInfoListener = "messageKvInfoListener";
static const listenerForService = "listenerForService";
static const uploadFileListener = "uploadFileListener";
} }

View File

@@ -0,0 +1,5 @@
class LoginStatus {
static const logout = 1;
static const logging = 2;
static const logged = 3;
}

View File

@@ -1,6 +1,14 @@
/// Message Send Status
class MessageStatus { class MessageStatus {
/// Sending
static const sending = 1; static const sending = 1;
/// Successfully sent
static const succeeded = 2; static const succeeded = 2;
/// Send failed
static const failed = 3; static const failed = 3;
/// Already deleted
static const deleted = 4; static const deleted = 4;
} }

View File

@@ -1,40 +1,176 @@
/// Message Types
class MessageType { class MessageType {
/// /// Normal text
static const text = 101; static const text = 101;
/// Picture
static const picture = 102; static const picture = 102;
/// Voice
static const voice = 103; static const voice = 103;
/// Video
static const video = 104; static const video = 104;
/// File
static const file = 105; static const file = 105;
static const at_text = 106;
/// @ Message
static const atText = 106;
/// Merge
static const merger = 107; static const merger = 107;
// static const forward = 108;
/// Business Card
static const card = 108; static const card = 108;
/// Location
static const location = 109; static const location = 109;
/// Custom
static const custom = 110; static const custom = 110;
static const revoke = 111;
static const has_read_receipt = 112; /// Typing
static const typing = 113; static const typing = 113;
/// Quote Reply
static const quote = 114; static const quote = 114;
/// /// Custom Emoji
static const accept_friend = 201; static const customFace = 115;
static const add_friend = 202;
static const refuse_friend_application = 203;
static const set_self_info = 204;
static const revoke_message = 205;
static const c2c_message_as_read = 206;
static const kick_online = 303; /// Group Message Has Read Receipt (Deprecated in v3)
@Deprecated('Use GroupHasReadReceiptNotification instead')
static const groupHasReadReceipt = 116;
/// /// Rich Text Message
static const transfer_group_owner = 501; static const advancedText = 117;
static const create_group = 502;
// static const create_group = 503; static const customMsgNotTriggerConversation = 119;
static const join_group = 504;
static const quit_group = 505; static const customMsgOnlineOnly = 120;
static const set_group_info = 506;
static const accept_group_application = 507; /// Notification Types
static const refuse_group_application = 508; static const notificationBegin = 1000;
static const kick_group_member = 509;
static const invited_user_to_group = 510; static const friendNotificationBegin = 1200;
/// Friend Request Accepted
static const friendApplicationApprovedNotification = 1201;
/// Friend Request Rejected
static const friendApplicationRejectedNotification = 1202;
/// Friend Request
static const friendApplicationNotification = 1203;
/// Friend Added
static const friendAddedNotification = 1204;
/// Friend Deleted
static const friendDeletedNotification = 1205;
/// Set Friend Remark
static const friendRemarkSetNotification = 1206;
/// Friend Added to Blacklist
static const blackAddedNotification = 1207;
/// Removed from Blacklist
static const blackDeletedNotification = 1208;
static const friendNotificationEnd = 1299;
/// Conversation Change
static const conversationChangeNotification = 1300;
static const userNotificationBegin = 1301;
/// User Information Changed
static const userInfoUpdatedNotification = 1303;
static const userNotificationEnd = 1399;
/// OA Notification
static const oaNotification = 1400;
static const groupNotificationBegin = 1500;
/// Group Created
static const groupCreatedNotification = 1501;
/// Group Info Set
static const groupInfoSetNotification = 1502;
/// Join Group Application
static const joinGroupApplicationNotification = 1503;
/// Group Member Quit
static const memberQuitNotification = 1504;
/// Group Application Accepted
static const groupApplicationAcceptedNotification = 1505;
/// Group Application Rejected
static const groupApplicationRejectedNotification = 1506;
/// Group Owner Transferred
static const groupOwnerTransferredNotification = 1507;
/// Member Kicked from Group
static const memberKickedNotification = 1508;
/// Member Invited to Group
static const memberInvitedNotification = 1509;
/// Member Entered Group
static const memberEnterNotification = 1510;
/// Dismiss Group
static const dismissGroupNotification = 1511;
static const groupNotificationEnd = 1599;
/// Group Member Muted
static const groupMemberMutedNotification = 1512;
/// Group Member Cancel Muted
static const groupMemberCancelMutedNotification = 1513;
/// Group Muted
static const groupMutedNotification = 1514;
/// Cancel Group Muted
static const groupCancelMutedNotification = 1515;
/// Group Member Information Changed
static const groupMemberInfoChangedNotification = 1516;
/// Group Member Set to Admin
static const groupMemberSetToAdminNotification = 1517;
static const groupMemberSetToOrdinaryUserNotification = 1518;
/// Group Notice Changed
static const groupInfoSetAnnouncementNotification = 1519;
/// Group Name Changed
static const groupInfoSetNameNotification = 1520;
/// Burn After Reading
static const burnAfterReadingNotification = 1701;
static const notificationEnd = 2000;
/// Business Notification
static const businessNotification = 2001;
/// Recall Message
static const revokeMessageNotification = 2101;
/// Single Chat Has Read Receipt
static const signalHasReadReceiptNotification = 2150;
/// Group Chat Has Read Receipt
static const groupHasReadReceiptNotification = 2155;
} }

View File

@@ -0,0 +1,5 @@
class ReceiveMessageOpt {
static const receive = 0;
static const notReceive = 1;
static const notNotify = 2;
}

View File

@@ -0,0 +1,4 @@
class AllowType {
static const black = 0;
static const friend = 1;
}

View File

@@ -0,0 +1,155 @@
/// SDK Error Codes
class SDKErrorCode {
/// Network Request Error
static const int networkRequestError = 10000;
/// Network Waiting Timeout Error
static const int networkWaitTimeoutError = 10001;
/// Parameter Error
static const int parameterError = 10002;
/// Context Timeout Error, usually when the user has already logged out
static const int contextTimeoutError = 10003;
/// Resources not loaded completely, usually uninitialized or login hasn't completed
static const int resourceNotLoaded = 10004;
/// Unknown Error, check the error message for details
static const int unknownError = 10005;
/// SDK Internal Error, check the error message for details
static const int sdkInternalError = 10006;
/// This user has set not to be added
static const int refuseToAddFriends = 10013;
/// User does not exist or is not registered
static const int userNotExistOrNotRegistered = 10100;
/// User has already logged out
static const int userHasLoggedOut = 10101;
/// User is attempting to log in again, check the login status to avoid duplicate logins
static const int repeatLogin = 10102;
/// The file to upload does not exist
static const int uploadFileNotExist = 10200;
/// Message decompression failed
static const int messageDecompressionFailed = 10201;
/// Message decoding failed
static const int messageDecodingFailed = 10202;
/// Unsupported long connection binary protocol
static const int unsupportedLongConnection = 10203;
/// Message sent multiple times
static const int messageRepeated = 10204;
/// Message content type not supported
static const int messageContentTypeNotSupported = 10205;
/// Unsupported session operation
static const int unsupportedSessionOperation = 10301;
/// Group ID does not exist
static const int groupIDNotExist = 10400;
/// Group type is incorrect
static const int wrongGroupType = 10401;
/// Server Internal Error, usually an internal network error, check if server nodes are running correctly
static const int serverInternalError = 500;
/// Parameter Error on the server, check if body and header parameters are correct
static const int serverParameterError = 1001;
/// Insufficient Permissions, typically when the token in the header is incorrect or when trying to perform unauthorized actions
static const int insufficientPermissions = 1002;
/// Duplicate Database Primary Key
static const int duplicateDatabasePrimaryKey = 1003;
/// Database Record Not Found
static const int databaseRecordNotFound = 1004;
/// User ID does not exist
static const int userIDNotExist = 1101;
/// User is already registered
static const int userAlreadyRegistered = 1102;
/// Group does not exist
static const int groupNotExis = 1201;
/// Group already exists
static const int groupAlreadyExists = 1202;
/// User is not in the group
static const int userIsNotInGroup = 1203;
/// Group has been disbanded
static const int groupDisbanded = 1204;
/// Group application has already been processed, no need to process it again
static const int groupApplicationHasBeenProcessed = 1206;
/// Cannot add yourself as a friend
static const int notAddMyselfAsAFriend = 1301;
/// You have been blocked by the other party
static const int hasBeenBlocked = 1302;
/// The other party is not your friend
static const int notFriend = 1303;
/// Already in a friend relationship, no need to reapply
static const int alreadyAFriendRelationship = 1304;
/// Message read function is turned off
static const int messageReadFunctionIsTurnedOff = 1401;
/// You have been banned from speaking in the group
static const int youHaveBeenBanned = 1402;
/// The group has been banned from posting
static const int groupHasBeenBanned = 1403;
/// This message has been retracted
static const int messageHasBeenRetracted = 1404;
/// Authorization has expired
static const int licenseExpired = 1405;
/// Token has expired
static const int tokenHasExpired = 1501;
/// Invalid token
static const int tokenInvalid = 1502;
/// Token format error
static const int tokenFormatError = 1503;
/// Token has not yet taken effect
static const int tokenHasNotYetTakenEffect = 1504;
/// Unknown token error
static const int unknownTokenError = 1505;
/// The kicked-out token is invalid
static const int thekickedOutTokenIsInvalid = 1506;
/// Token does not exist
static const int tokenNotExist = 1507;
/// Number of Connections Exceeds Gateway's Maximum Limit
static const int connectionsExceedsMaximumLimit = 1601;
/// Handshake Parameter Error
static const int handshakeParameterError = 1602;
/// File Upload Expired
static const int fileUploadExpired = 1701;
}

View File

@@ -1,33 +1,59 @@
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
/// Message Listener
class OnAdvancedMsgListener { class OnAdvancedMsgListener {
/// Message read receipt Function(Message msg)? onMsgDeleted;
Function(RevokedInfo info)? onNewRecvMessageRevoked;
Function(List<ReadReceiptInfo> list)? onRecvC2CReadReceipt; Function(List<ReadReceiptInfo> list)? onRecvC2CReadReceipt;
Function(List<ReadReceiptInfo> list)? onRecvGroupReadReceipt;
/// A friend revoked a message Function(String msgID, List<String> list)? onRecvMessageExtensionsDeleted;
Function(String msgId)? onRecvMessageRevoked;
/// Receive new message
Function(Message msg)? onRecvNewMessage; Function(Message msg)? onRecvNewMessage;
Function(Message msg)? onRecvOfflineNewMessage;
/// Uniquely identifies /// Uniquely identifies
String id; String id;
OnAdvancedMsgListener({ OnAdvancedMsgListener({
this.onMsgDeleted,
this.onNewRecvMessageRevoked,
this.onRecvC2CReadReceipt, this.onRecvC2CReadReceipt,
this.onRecvMessageRevoked, this.onRecvGroupReadReceipt,
this.onRecvMessageExtensionsDeleted,
this.onRecvNewMessage, this.onRecvNewMessage,
this.onRecvOfflineNewMessage,
}) : id = "id_${DateTime.now().microsecondsSinceEpoch}"; }) : id = "id_${DateTime.now().microsecondsSinceEpoch}";
void msgDeleted(Message msg) {
onMsgDeleted?.call(msg);
}
/// Message has been retracted
void newRecvMessageRevoked(RevokedInfo info) {
onNewRecvMessageRevoked?.call(info);
}
/// C2C Message Read Receipt
void recvC2CReadReceipt(List<ReadReceiptInfo> list) { void recvC2CReadReceipt(List<ReadReceiptInfo> list) {
if (null != onRecvC2CReadReceipt) onRecvC2CReadReceipt!(list); onRecvC2CReadReceipt?.call(list);
} }
void recvMessageRevoked(String msgId) { /// Group Message Read Receipt
if (null != onRecvMessageRevoked) onRecvMessageRevoked!(msgId); void recvGroupReadReceipt(List<ReadReceiptInfo> list) {
onRecvGroupReadReceipt?.call(list);
} }
/// Received Extended Message Deleted
/// [list] TypeKey that was deleted
void recvMessageExtensionsDeleted(String msgID, List<String> list) {
onRecvMessageExtensionsDeleted?.call(msgID, list);
}
/// Received a new message
void recvNewMessage(Message msg) { void recvNewMessage(Message msg) {
if (null != onRecvNewMessage) onRecvNewMessage!(msg); onRecvNewMessage?.call(msg);
}
void recvOfflineNewMessage(Message msg) {
onRecvOfflineNewMessage?.call(msg);
} }
} }

View File

@@ -1,46 +1,41 @@
/// SDK Connection State Listener
class OnConnectListener { class OnConnectListener {
/// SDK failed to connect to the server
Function(int? code, String? errorMsg)? onConnectFailed; Function(int? code, String? errorMsg)? onConnectFailed;
/// SDK has successfully connected to the server
Function()? onConnectSuccess; Function()? onConnectSuccess;
/// SDK is connecting to the server
Function()? onConnecting; Function()? onConnecting;
/// The current user is kicked offline.
/// At this time, the UI can prompt the user and call IMManager's login() function to log in again.
Function()? onKickedOffline; Function()? onKickedOffline;
Function()? onUserTokenExpired;
/// Ticket expired when online.
/// At this time, you need to generate a new userSig and call IMManager's login() function to log in again
Function()? onUserSigExpired;
OnConnectListener({ OnConnectListener({
this.onConnectFailed, this.onConnectFailed,
this.onConnectSuccess, this.onConnectSuccess,
this.onConnecting, this.onConnecting,
this.onKickedOffline, this.onKickedOffline,
this.onUserSigExpired, this.onUserTokenExpired,
}); });
/// SDK failed to connect to the server
void connectFailed(int? code, String? errorMsg) { void connectFailed(int? code, String? errorMsg) {
if (null != onConnectFailed) onConnectFailed!(code, errorMsg); onConnectFailed?.call(code, errorMsg);
} }
/// SDK successfully connected to the server
void connectSuccess() { void connectSuccess() {
if (null != onConnectSuccess) onConnectSuccess!(); onConnectSuccess?.call();
} }
/// SDK is currently connecting to the server
void connecting() { void connecting() {
if (null != onConnecting) onConnecting!.call(); onConnecting?.call();
} }
/// The account has been logged in from another location, and the current device has been kicked offline
void kickedOffline() { void kickedOffline() {
if (null != onKickedOffline) onKickedOffline!(); onKickedOffline?.call();
} }
void userSigExpired() { /// Login credentials have expired and require reauthentication
if (null != onUserSigExpired) onUserSigExpired!(); void userTokenExpired() {
onUserTokenExpired?.call();
} }
} }

View File

@@ -1,5 +1,6 @@
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
/// Conversation Listener
class OnConversationListener { class OnConversationListener {
Function(List<ConversationInfo> list)? onConversationChanged; Function(List<ConversationInfo> list)? onConversationChanged;
Function(List<ConversationInfo> list)? onNewConversation; Function(List<ConversationInfo> list)? onNewConversation;
@@ -17,28 +18,30 @@ class OnConversationListener {
this.onSyncServerStart, this.onSyncServerStart,
}); });
/// Conversations have changed
void conversationChanged(List<ConversationInfo> list) { void conversationChanged(List<ConversationInfo> list) {
if (onConversationChanged != null) onConversationChanged!(list); onConversationChanged?.call(list);
} }
/// New conversations have been created
void newConversation(List<ConversationInfo> list) { void newConversation(List<ConversationInfo> list) {
if (onNewConversation != null) onNewConversation!(list); onNewConversation?.call(list);
}
/// Total unread message count has changed
void totalUnreadMessageCountChanged(int count) {
onTotalUnreadMessageCountChanged?.call(count);
} }
void syncServerFailed() { void syncServerFailed() {
if (onSyncServerFailed != null) onSyncServerFailed!(); onSyncServerFailed?.call();
} }
void syncServerFinish() { void syncServerFinish() {
if (onSyncServerFinish != null) onSyncServerFinish!(); onSyncServerFinish?.call();
} }
void syncServerStart() { void syncServerStart() {
if (onSyncServerStart != null) onSyncServerStart!(); onSyncServerStart?.call();
}
void totalUnreadMessageCountChanged(int i) {
if (onTotalUnreadMessageCountChanged != null)
onTotalUnreadMessageCountChanged!(i);
} }
} }

View File

@@ -0,0 +1,9 @@
class OnCustomBusinessListener {
Function(String s)? onRecvCustomBusinessMessage;
OnCustomBusinessListener({this.onRecvCustomBusinessMessage});
void recvCustomBusinessMessage(String s) {
onRecvCustomBusinessMessage?.call(s);
}
}

View File

@@ -1,19 +1,20 @@
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
/// Friendship Listener
class OnFriendshipListener { class OnFriendshipListener {
Function(FriendApplicationInfo i)? onFriendApplicationAdded; Function(BlacklistInfo info)? onBlackAdded;
Function(FriendApplicationInfo i)? onFriendApplicationDeleted; Function(BlacklistInfo info)? onBlackDeleted;
Function(FriendApplicationInfo i)? onFriendApplicationAccepted; Function(FriendInfo info)? onFriendAdded;
Function(FriendApplicationInfo i)? onFriendApplicationRejected; Function(FriendApplicationInfo info)? onFriendApplicationAccepted;
Function(FriendInfo i)? onFriendAdded; Function(FriendApplicationInfo info)? onFriendApplicationAdded;
Function(FriendInfo i)? onFriendDeleted; Function(FriendApplicationInfo info)? onFriendApplicationDeleted;
Function(FriendInfo i)? onFriendInfoChanged; Function(FriendApplicationInfo info)? onFriendApplicationRejected;
Function(BlacklistInfo i)? onBlacklistAdded; Function(FriendInfo info)? onFriendDeleted;
Function(BlacklistInfo i)? onBlacklistDeleted; Function(FriendInfo info)? onFriendInfoChanged;
OnFriendshipListener({ OnFriendshipListener({
this.onBlacklistAdded, this.onBlackAdded,
this.onBlacklistDeleted, this.onBlackDeleted,
this.onFriendAdded, this.onFriendAdded,
this.onFriendApplicationAccepted, this.onFriendApplicationAccepted,
this.onFriendApplicationAdded, this.onFriendApplicationAdded,
@@ -23,39 +24,48 @@ class OnFriendshipListener {
this.onFriendInfoChanged, this.onFriendInfoChanged,
}); });
void blacklistAdded(BlacklistInfo u) { /// Added to the blacklist
onBlacklistAdded?.call(u); void blackAdded(BlacklistInfo info) {
onBlackAdded?.call(info);
} }
void blacklistDeleted(BlacklistInfo u) { /// Removed from the blacklist
onBlacklistDeleted?.call(u); void blackDeleted(BlacklistInfo info) {
onBlackDeleted?.call(info);
} }
void friendAdded(FriendInfo u) { /// Friend added
onFriendAdded?.call(u); void friendAdded(FriendInfo info) {
onFriendAdded?.call(info);
} }
void friendApplicationAccepted(FriendApplicationInfo u) { /// Friend application accepted
onFriendApplicationAccepted?.call(u); void friendApplicationAccepted(FriendApplicationInfo info) {
onFriendApplicationAccepted?.call(info);
} }
void friendApplicationAdded(FriendApplicationInfo u) { /// New friend application added
onFriendApplicationAdded?.call(u); void friendApplicationAdded(FriendApplicationInfo info) {
onFriendApplicationAdded?.call(info);
} }
void friendApplicationDeleted(FriendApplicationInfo u) { /// Friend application deleted
onFriendApplicationDeleted?.call(u); void friendApplicationDeleted(FriendApplicationInfo info) {
onFriendApplicationDeleted?.call(info);
} }
void friendApplicationRejected(FriendApplicationInfo u) { /// Friend application rejected
onFriendApplicationRejected?.call(u); void friendApplicationRejected(FriendApplicationInfo info) {
onFriendApplicationRejected?.call(info);
} }
void friendDeleted(FriendInfo u) { /// Friend deleted
onFriendDeleted?.call(u); void friendDeleted(FriendInfo info) {
onFriendDeleted?.call(info);
} }
void friendInfoChanged(FriendInfo u) { /// Friend information changed
onFriendInfoChanged?.call(u); void friendInfoChanged(FriendInfo info) {
onFriendInfoChanged?.call(info);
} }
} }

View File

@@ -1,10 +1,12 @@
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
/// Group Listener
class OnGroupListener { class OnGroupListener {
Function(GroupApplicationInfo info)? onGroupApplicationAccepted; Function(GroupApplicationInfo info)? onGroupApplicationAccepted;
Function(GroupApplicationInfo info)? onGroupApplicationAdded; Function(GroupApplicationInfo info)? onGroupApplicationAdded;
Function(GroupApplicationInfo info)? onGroupApplicationDeleted; Function(GroupApplicationInfo info)? onGroupApplicationDeleted;
Function(GroupApplicationInfo info)? onGroupApplicationRejected; Function(GroupApplicationInfo info)? onGroupApplicationRejected;
Function(GroupInfo info)? onGroupDismissed;
Function(GroupInfo info)? onGroupInfoChanged; Function(GroupInfo info)? onGroupInfoChanged;
Function(GroupMembersInfo info)? onGroupMemberAdded; Function(GroupMembersInfo info)? onGroupMemberAdded;
Function(GroupMembersInfo info)? onGroupMemberDeleted; Function(GroupMembersInfo info)? onGroupMemberDeleted;
@@ -17,6 +19,7 @@ class OnGroupListener {
this.onGroupApplicationAdded, this.onGroupApplicationAdded,
this.onGroupApplicationDeleted, this.onGroupApplicationDeleted,
this.onGroupApplicationRejected, this.onGroupApplicationRejected,
this.onGroupDismissed,
this.onGroupInfoChanged, this.onGroupInfoChanged,
this.onGroupMemberAdded, this.onGroupMemberAdded,
this.onGroupMemberDeleted, this.onGroupMemberDeleted,
@@ -25,42 +28,56 @@ class OnGroupListener {
this.onJoinedGroupDeleted, this.onJoinedGroupDeleted,
}); });
/// Group application accepted
void groupApplicationAccepted(GroupApplicationInfo info) { void groupApplicationAccepted(GroupApplicationInfo info) {
onGroupApplicationAccepted?.call(info); onGroupApplicationAccepted?.call(info);
} }
/// Group application added
void groupApplicationAdded(GroupApplicationInfo info) { void groupApplicationAdded(GroupApplicationInfo info) {
onGroupApplicationAdded?.call(info); onGroupApplicationAdded?.call(info);
} }
/// Group application deleted
void groupApplicationDeleted(GroupApplicationInfo info) { void groupApplicationDeleted(GroupApplicationInfo info) {
onGroupApplicationDeleted?.call(info); onGroupApplicationDeleted?.call(info);
} }
/// Group application rejected
void groupApplicationRejected(GroupApplicationInfo info) { void groupApplicationRejected(GroupApplicationInfo info) {
onGroupApplicationRejected?.call(info); onGroupApplicationRejected?.call(info);
} }
void groupDismissed(GroupInfo info) {
onGroupDismissed?.call(info);
}
/// Group information changed
void groupInfoChanged(GroupInfo info) { void groupInfoChanged(GroupInfo info) {
onGroupInfoChanged?.call(info); onGroupInfoChanged?.call(info);
} }
/// Group member added
void groupMemberAdded(GroupMembersInfo info) { void groupMemberAdded(GroupMembersInfo info) {
onGroupMemberAdded?.call(info); onGroupMemberAdded?.call(info);
} }
/// Group member deleted
void groupMemberDeleted(GroupMembersInfo info) { void groupMemberDeleted(GroupMembersInfo info) {
onGroupMemberDeleted?.call(info); onGroupMemberDeleted?.call(info);
} }
/// Group member information changed
void groupMemberInfoChanged(GroupMembersInfo info) { void groupMemberInfoChanged(GroupMembersInfo info) {
onGroupMemberInfoChanged?.call(info); onGroupMemberInfoChanged?.call(info);
} }
/// Joined group added
void joinedGroupAdded(GroupInfo info) { void joinedGroupAdded(GroupInfo info) {
onJoinedGroupAdded?.call(info); onJoinedGroupAdded?.call(info);
} }
/// Joined group deleted
void joinedGroupDeleted(GroupInfo info) { void joinedGroupDeleted(GroupInfo info) {
onJoinedGroupDeleted?.call(info); onJoinedGroupDeleted?.call(info);
} }

View File

@@ -0,0 +1,38 @@
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
/// Friend Relationship Listener
class OnListenerForService {
Function(FriendApplicationInfo i)? onFriendApplicationAdded;
Function(FriendApplicationInfo i)? onFriendApplicationAccepted;
Function(GroupApplicationInfo info)? onGroupApplicationAccepted;
Function(GroupApplicationInfo info)? onGroupApplicationAdded;
Function(Message msg)? onRecvNewMessage;
OnListenerForService({
this.onFriendApplicationAdded,
this.onFriendApplicationAccepted,
this.onGroupApplicationAccepted,
this.onGroupApplicationAdded,
this.onRecvNewMessage,
});
void friendApplicationAccepted(FriendApplicationInfo u) {
onFriendApplicationAccepted?.call(u);
}
void friendApplicationAdded(FriendApplicationInfo u) {
onFriendApplicationAdded?.call(u);
}
void groupApplicationAccepted(GroupApplicationInfo info) {
onGroupApplicationAccepted?.call(info);
}
void groupApplicationAdded(GroupApplicationInfo info) {
onGroupApplicationAdded?.call(info);
}
void recvNewMessage(Message msg) {
onRecvNewMessage?.call(msg);
}
}

View File

@@ -1,9 +1,11 @@
/// Message Sending Progress Listener
class OnMsgSendProgressListener { class OnMsgSendProgressListener {
Function(String clientMsgID, int progress)? onProgress; Function(String clientMsgID, int progress)? onProgress;
OnMsgSendProgressListener({this.onProgress}); OnMsgSendProgressListener({this.onProgress});
/// Message sending progress
void progress(String clientMsgID, int progress) { void progress(String clientMsgID, int progress) {
if (null != onProgress) onProgress!(clientMsgID, progress); onProgress?.call(clientMsgID, progress);
} }
} }

View File

@@ -0,0 +1,45 @@
class OnUploadFileListener {
Function(String id, int size, String url, int type)? onComplete;
Function(String id, String partHash, String fileHash)? onHashPartComplete;
Function(String id, int index, int size, String partHash)? onHashPartProgress;
Function(String id, int size)? onOpen;
Function(String id, int partSize, int num)? onPartSize;
Function(String id, int fileSize, int streamSize, int storageSize)?
onUploadProgress;
Function(String id, String uploadID)? onUploadID;
Function(String id, int index, int partSize, String partHash)?
onUploadPartComplete;
void complete(String id, int size, String url, int type) {
onComplete?.call(id, size, url, type);
}
void hashPartComplete(String id, String partHash, String fileHash) {
onHashPartComplete?.call(id, partHash, fileHash);
}
void hashPartProgress(String id, int index, int size, String partHash) {
onHashPartProgress?.call(id, index, size, partHash);
}
void open(String id, int size) {
onOpen?.call(id, size);
}
void partSize(String id, int partSize, int num) {
onPartSize?.call(id, partSize, num);
}
void uploadProgress(
String id, int fileSize, int streamSize, int storageSize) {
onUploadProgress?.call(id, fileSize, streamSize, storageSize);
}
void uploadID(String id, String uploadID) {
onUploadID?.call(id, uploadID);
}
void uploadPartComplete(String id, int index, int partSize, String partHash) {
onUploadPartComplete?.call(id, index, partSize, partHash);
}
}

Some files were not shown because too many files have changed in this diff Show More