Compare commits

..

180 Commits
2.1.0 ... 3.8.1

Author SHA1 Message Date
Brett
6a446a7b33 chore: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.1 2024-09-29 17:27:30 +08:00
Brett
9f57971ee9 feat: Added getFriendListPageMap interface. 2024-08-15 16:28:18 +08:00
Brett
29b43d03ac feat: Add input status related API; update synchronization monitoring related API. 2024-08-07 16:57:15 +08:00
Brett
cade0091a7 fix: Calling setConversationEx will report that type 'String' is not a subtype of type 'List<dynamic>' in type cast. (#138) 2024-08-07 14:55:35 +08:00
Brett
d90bb33764 feat: [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.1-rc.0) 2024-08-06 15:24:10 +08:00
Brett
8c64af6798 feat: [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.1-rc.0) 2024-08-06 15:22:10 +08:00
Brett
c10dabc7e8 feat: [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.0) 2024-08-02 21:59:30 +08:00
Brett
ff25636516 fix: Bug fixes and performance enhancements. 2024-07-28 19:02:22 +08:00
Brett
43d3f05d4d Update README.md 2024-05-16 14:45:23 +08:00
Brett
3b8ec30625 Update README.md 2024-04-25 21:01:53 +08:00
Brett
44fe1a3210 chore: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1 2024-03-06 21:01:19 +08:00
Brett
9b11686dac fix: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.8 2024-02-02 11:05:32 +08:00
Brett
1764da125b fix: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.7 2024-01-23 14:49:31 +08:00
Brett
bf4cdf0754 fix: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.7 2024-01-23 14:32:11 +08:00
Brett
45cd497d94 fix: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.7 2024-01-23 11:34:29 +08:00
Brett
1db776e23d fix: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.7 2024-01-23 11:30:51 +08:00
Brett
98227756df chore: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.2 2024-01-08 11:39:17 +08:00
oliver
da148f78e3 3.5.1-alpha.2 2024-01-08 11:05:06 +08:00
oliver
883627f077 3.5.0-rc.1+1 2024-01-02 15:02:19 +08:00
oliver
50f8350987 3.5.0-rc.2 2024-01-02 14:58:08 +08:00
oliver
d098a50eaa Merge remote-tracking branch 'origin/main' 2024-01-02 12:12:37 +08:00
oliver
9e50ecf341 3.5.0+1 2024-01-02 12:12:20 +08:00
oliver
9aa861ff74 3.5.0+1 2024-01-02 12:08:13 +08:00
oliver
cfadcc5e35 3.5.0+1 2024-01-02 11:59:26 +08:00
Brett
8b4b21e18d feat: https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.0-rc.1 2023-12-29 20:19:29 +08:00
Brett
2814122ba4 Merge branch 'main' of https://github.com/OpenIMSDK/Open-IM-SDK-Flutter 2023-12-13 16:28:33 +08:00
Brett
2e94254192 feat: Add the log upload function of SDK. 2023-12-13 16:28:25 +08:00
Brett
a9573dbc63 Update README.md 2023-11-22 11:30:48 +08:00
Brett
92dd3adad5 Correct homepage and other information. 2023-11-17 17:01:22 +08:00
Brett
ebae12f11d fix: 'Fix return value type of 'getFriendsInfo'. 2023-11-17 16:45:22 +08:00
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
142 changed files with 6487 additions and 5213 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,27 @@
<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$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/async" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/cli" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/cli" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/collection" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/collection" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/convert" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/convert" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/core" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/core" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/developer" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/developer" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/ffi" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/ffi" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/html" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/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$/../../install/flutter_sdk/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$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/io" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/isolate" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/isolate" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/js" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/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$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/js_interop" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/math" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/js_interop_unsafe" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/mirrors" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/js_util" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/svg" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/math" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/typed_data" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/mirrors" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/web_audio" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/svg" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/web_gl" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/typed_data" />
<root url="file://$USER_HOME$/Development/flutter/bin/cache/dart-sdk/lib/web_sql" /> <root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/web_audio" />
<root url="file://$PROJECT_DIR$/../../install/flutter_sdk/bin/cache/dart-sdk/lib/web_gl" />
</CLASSES> </CLASSES>
<JAVADOC /> <JAVADOC />
<SOURCES /> <SOURCES />

1
.idea/misc.xml generated
View File

@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="FrameworkDetectionExcludesConfiguration"> <component name="FrameworkDetectionExcludesConfiguration">
<type id="android" /> <type id="android" />

View File

@@ -1,16 +1,213 @@
## 3.8.1
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.1)
## 3.8.1-rc.0
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.1-rc.0)
## 3.8.0
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.0)
## 3.8.0-rc.16
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.8.0-rc.16)
## 3.5.1
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1)
## 3.5.1-alpha.7
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.7)
## 3.5.1-alpha.2
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.1-alpha.2)
## 3.5.0-rc.1
- [Bug fixes and performance enhancements.](https://github.com/openimsdk/openim-sdk-core/releases/tag/v3.5.0-rc.1)
## 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 ## 2.0.9+3
1.Fix bug </br> 1.Fix bug </br>
2.New setGlobalRecvMessageOpt method</br> 2.Add setGlobalRecvMessageOpt method </br>
## 2.0.9+2 ## 2.0.9+2
1.Fix bug </br> 1.Fix bug </br>
2.New searchOrganization method</br> 2.Add searchOrganization method </br>
3.New searchFriends method</br> 3.Add searchFriends method </br>
4.New getDepartmentInfo method</br> 4.Add getDepartmentInfo method </br>
5.New setGroupMemberRoleLevel method</br> 5.Add setGroupMemberRoleLevel method </br>
## 2.0.9+1 ## 2.0.9+1
@@ -19,9 +216,9 @@
## 2.0.9 ## 2.0.9
1.Fix bug </br> 1.Fix bug </br>
2.New organization fuction</br> 2.Add organization fuction </br>
3.New uploadImage method </br> 3.Add uploadImage method </br>
4.Fix login slow bug</br> 4.Fix login slow bug </br>
## 2.0.8 ## 2.0.8
@@ -31,38 +228,38 @@
## 2.0.0+6 ## 2.0.0+6
1.Fix bug</br> 1.Fix bug </br>
2.Adapter ios emulator</br> 2.Adapter ios emulator </br>
3.New modify group nickname</br> 3.Add modify group nickname </br>
4.Update at message</br> 4.Update at message </br>
5.ConverstaionInfo new add isNotInGroup field</br> 5.ConverstaionInfo new add isNotInGroup field</br>
6.New at type</br> 6.Add at type </br>
7.New work moments</br> 7.Add work moments </br>
8.New global search</br> 8.Add global search </br>
9.New getHistoryMessageListReverse method</br> 9.Add getHistoryMessageListReverse method </br>
10.New getAtAllTag method</br> 10.Add getAtAllTag method </br>
11.New resetConversationGroupAtType method</br> 11.Add resetConversationGroupAtType method </br>
12.New searchGroups method</br> 12.Add searchGroups method </br>
## 2.0.0+5 ## 2.0.0+5
1.New notification parse </br> 1.Add notification parse </br>
2.New deleteConversationFromLocalAndSvr method </br> 2.Add deleteConversationFromLocalAndSvr method </br>
3.New deleteMessageFromLocalAndSvr method </br> 3.Add deleteMessageFromLocalAndSvr method </br>
4.New deleteAllMsgFromLocal method </br> 4.Add deleteAllMsgFromLocal method </br>
5.New deleteAllMsgFromLocalAndSvr method </br> 5.Add deleteAllMsgFromLocalAndSvr method </br>
6.New clearC2CHistoryMessageFromLocalAndSvr method </br> 6.Add clearC2CHistoryMessageFromLocalAndSvr method </br>
7.New clearGroupHistoryMessageFromLocalAndSvr method </br> 7.Add clearGroupHistoryMessageFromLocalAndSvr method </br>
8.New markMessageAsReadByConID method </br> 8.Add markMessageAsReadByConID method </br>
9.New wakeUp method </br> 9.Add wakeUp method </br>
10.New deleteAllConversationFromLocal method </br> 10.Add deleteAllConversationFromLocal method </br>
## 2.0.0+4 ## 2.0.0+4
1.New dismiss group </br> 1.Add dismiss group </br>
2.New search local message </br> 2.Add search local message </br>
3.New private chat </br> 3.Add private chat </br>
4.New group mute 4.Add group mute
## 2.0.0+3 ## 2.0.0+3
@@ -71,8 +268,8 @@
## 2.0.0+2 ## 2.0.0+2
1.Fix some one crash </br> 1.Fix some one crash </br>
2.New add signaling function </br> 2.Add signaling function </br>
3.New add group have read receipt 3.Add group have read receipt
## 2.0.0+1 ## 2.0.0+1
@@ -99,13 +296,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
@@ -143,36 +340,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
@@ -181,11 +387,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.

163
README.md
View File

@@ -1,23 +1,158 @@
# 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.
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-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A)
- :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.

File diff suppressed because it is too large Load Diff

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 {
url 'http://121.37.25.71:8081/repository/maven2/'
allowInsecureProtocol = true
}
google() google()
mavenCentral() mavenCentral()
} }
@@ -18,10 +27,9 @@ buildscript {
rootProject.allprojects { rootProject.allprojects {
repositories { repositories {
maven { // 将aar放到libs本地仓库替换远程仓库
url 'http://121.37.25.71:8081/repository/maven2/' // maven { url "$dir/libs" }
allowInsecureProtocol = true 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:core-sdk:2.0.9.27@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.8.1@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,30 +10,31 @@ 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;
import io.openim.flutter_openim_sdk.manager.IMManager; import io.openim.flutter_openim_sdk.manager.IMManager;
import io.openim.flutter_openim_sdk.manager.MessageManager; import io.openim.flutter_openim_sdk.manager.MessageManager;
import io.openim.flutter_openim_sdk.manager.OrganizationManager;
import io.openim.flutter_openim_sdk.manager.SignalingManager;
import io.openim.flutter_openim_sdk.manager.UserManager; import io.openim.flutter_openim_sdk.manager.UserManager;
import io.openim.flutter_openim_sdk.manager.WorkMomentsManager;
/** /**
* 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;
@@ -40,30 +42,30 @@ 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 SignalingManager signalingManager; private static Activity activity;
private static WorkMomentsManager workMomentsManager; private static Context context;
private static OrganizationManager organizationManager; 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();
FlutterOpenimSdkPlugin.messageManager = new MessageManager(); FlutterOpenimSdkPlugin.messageManager = new MessageManager();
FlutterOpenimSdkPlugin.conversationManager = new ConversationManager(); FlutterOpenimSdkPlugin.conversationManager = new ConversationManager();
FlutterOpenimSdkPlugin.groupManager = new GroupManager(); FlutterOpenimSdkPlugin.groupManager = new GroupManager();
FlutterOpenimSdkPlugin.signalingManager = new SignalingManager();
FlutterOpenimSdkPlugin.workMomentsManager = new WorkMomentsManager();
FlutterOpenimSdkPlugin.organizationManager = new OrganizationManager();
} }
@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
@@ -74,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,35 +13,51 @@ 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("c2cMessageReadReceipt", s); values.put("msgReceiptList", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvC2CReadReceipt", values); CommonUtil.emitEvent("advancedMsgListener", "onRecvC2CReadReceipt", values);
} }
@Override
public void onRecvGroupReadReceipt(String s) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("groupMessageReadReceipt", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvGroupReadReceipt", values);
}
@Override
public void onRecvMessageRevoked(String s) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("revokedMessage", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvMessageRevoked", 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);
}
@Override
public void onRecvOnlineOnlyMessage(String s) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("message", s);
CommonUtil.emitEvent("advancedMsgListener", "onRecvOnlineOnlyMessage", values);
}
} }

View File

@@ -19,13 +19,15 @@ public class OnBaseListener implements Base {
@Override @Override
public void onError(int l, String s) { public void onError(int l, String s) {
Log.i("F-OpenIMSDK(flutter call native)", "method: 【 " + call.method + " 】, onError: { code:" + l + ", message:" + s + "}"); String threadName = Thread.currentThread().getName();
Log.i("F-OpenIMSDK(native call flutter)", "thread: " + threadName + " 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(flutter call native)", "method: 【 " + call.method + " 】, onSuccess: " + s); String threadName = Thread.currentThread().getName();
Log.i("F-OpenIMSDK(native call flutter)", "thread: " + threadName + " method: 【 " + call.method + " 】, onSuccess: " + s);
CommonUtil.runMainThreadReturn(result, s); CommonUtil.runMainThreadReturn(result, s);
} }
} }

View File

@@ -31,4 +31,9 @@ public class OnConnListener implements open_im_sdk_callback.OnConnListener {
public void onUserTokenExpired() { public void onUserTokenExpired() {
CommonUtil.emitEvent("connectListener", "onUserTokenExpired", null); CommonUtil.emitEvent("connectListener", "onUserTokenExpired", null);
} }
@Override
public void onUserTokenInvalid(String s) {
CommonUtil.emitEvent("connectListener", "onUserTokenInvalid", s);
}
} }

View File

@@ -10,24 +10,34 @@ public class OnConversationListener implements open_im_sdk_callback.OnConversati
CommonUtil.emitEvent("conversationListener", "onConversationChanged", s); CommonUtil.emitEvent("conversationListener", "onConversationChanged", s);
} }
@Override
public void onConversationUserInputStatusChanged(String s) {
CommonUtil.emitEvent("conversationListener", "onConversationUserInputStatusChanged", s);
}
@Override @Override
public void onNewConversation(String s) { public void onNewConversation(String s) {
CommonUtil.emitEvent("conversationListener", "onNewConversation", s); CommonUtil.emitEvent("conversationListener", "onNewConversation", s);
} }
@Override @Override
public void onSyncServerFailed() { public void onSyncServerFailed(boolean reinstalled) {
CommonUtil.emitEvent("conversationListener", "onSyncServerFailed", null); CommonUtil.emitEvent("conversationListener", "onSyncServerFailed", reinstalled);
} }
@Override @Override
public void onSyncServerFinish() { public void onSyncServerFinish(boolean reinstalled) {
CommonUtil.emitEvent("conversationListener", "onSyncServerFinish", null); CommonUtil.emitEvent("conversationListener", "onSyncServerFinish", reinstalled);
} }
@Override @Override
public void onSyncServerStart() { public void onSyncServerStart(boolean reinstalled) {
CommonUtil.emitEvent("conversationListener", "onSyncServerStart", null); CommonUtil.emitEvent("conversationListener", "onSyncServerStart", reinstalled);
}
@Override
public void onSyncServerProgress(long progress) {
CommonUtil.emitEvent("conversationListener", "onSyncServerProgress", progress);
} }
@Override @Override

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

@@ -1,10 +0,0 @@
package io.openim.flutter_openim_sdk.listener;
import io.openim.flutter_openim_sdk.util.CommonUtil;
public class OnOrganizationListener implements open_im_sdk_callback.OnOrganizationListener {
@Override
public void onOrganizationUpdated() {
CommonUtil.emitEvent("organizationListener", "onOrganizationUpdated", null);
}
}

View File

@@ -1,46 +0,0 @@
package io.openim.flutter_openim_sdk.listener;
import io.openim.flutter_openim_sdk.util.CommonUtil;
public class OnSignalingListener implements open_im_sdk_callback.OnSignalingListener {
@Override
public void onInvitationCancelled(String s) {
CommonUtil.emitEvent("signalingListener", "onInvitationCancelled", s);
}
@Override
public void onInvitationTimeout(String s) {
CommonUtil.emitEvent("signalingListener", "onInvitationTimeout", s);
}
@Override
public void onInviteeAccepted(String s) {
CommonUtil.emitEvent("signalingListener", "onInviteeAccepted", s);
}
@Override
public void onInviteeAcceptedByOtherDevice(String s) {
CommonUtil.emitEvent("signalingListener", "onInviteeAcceptedByOtherDevice", s);
}
@Override
public void onInviteeRejected(String s) {
CommonUtil.emitEvent("signalingListener", "onInviteeRejected", s);
}
@Override
public void onInviteeRejectedByOtherDevice(String s) {
CommonUtil.emitEvent("signalingListener", "onInviteeRejectedByOtherDevice", s);
}
@Override
public void onReceiveNewInvitation(String s) {
CommonUtil.emitEvent("signalingListener", "onReceiveNewInvitation", s);
}
@Override
public void onHangUp(String s) {
CommonUtil.emitEvent("signalingListener", "onHangUp", 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

@@ -0,0 +1,26 @@
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.UploadLogProgress;
public class OnUploadLogsListener implements UploadLogProgress {
final private MethodChannel.Result result;
public OnUploadLogsListener(MethodChannel.Result result, MethodCall call) {
this.result = result;
}
@Override
public void onProgress(long current, long size) {
final Map<String, Object> values = new ArrayMap<>();
values.put("current", current);
values.put("size", size);
CommonUtil.emitEvent("uploadLogsListener", "onProgress", values);
}
}

View File

@@ -8,4 +8,24 @@ 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);
}
@Override
public void onUserCommandAdd(String s) {
CommonUtil.emitEvent("userListener", "onUserCommandAdd", s);
}
@Override
public void onUserCommandDelete(String s) {
CommonUtil.emitEvent("userListener", "onUserCommandDelete", s);
}
@Override
public void onUserCommandUpdate(String s) {
CommonUtil.emitEvent("userListener", "onUserCommandUpdate", s);
}
} }

View File

@@ -1,12 +0,0 @@
package io.openim.flutter_openim_sdk.listener;
import io.openim.flutter_openim_sdk.util.CommonUtil;
public class OnWorkMomentsListener implements open_im_sdk_callback.OnWorkMomentsListener {
@Override
public void onRecvNewNotification() {
CommonUtil.emitEvent("workMomentsListener", "OnRecvNewNotification", null);
}
}

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,6 +11,8 @@ 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);
} }
@@ -34,7 +36,7 @@ public class ConversationManager extends BaseManager {
Open_im_sdk.getOneConversation( Open_im_sdk.getOneConversation(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
int2long(methodCall, "sessionType"), value(methodCall, "sessionType"),
value(methodCall, "sourceID") value(methodCall, "sourceID")
); );
} }
@@ -47,13 +49,6 @@ public class ConversationManager extends BaseManager {
); );
} }
public void deleteConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteConversation(
new OnBaseListener(result, methodCall),
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(
@@ -64,28 +59,19 @@ public class ConversationManager extends BaseManager {
); );
} }
public void pinConversation(MethodCall methodCall, MethodChannel.Result result) { public void hideConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.pinConversation( Open_im_sdk.hideConversation(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "conversationID"), value(methodCall, "conversationID")
value(methodCall, "isPinned")
); );
} }
// public void markSingleMessageHasRead(MethodCall methodCall, MethodChannel.Result result) { public void markConversationMessageAsRead(MethodCall methodCall, MethodChannel.Result result) {
// Open_im_sdk.markSingleMessageHasRead( Open_im_sdk.markConversationMessageAsRead(
// 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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "groupID") value(methodCall, "conversationID")
); );
} }
@@ -98,53 +84,21 @@ public class ConversationManager extends BaseManager {
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 clearConversationAndDeleteAllMsg(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversationRecvMessageOpt( Open_im_sdk.clearConversationAndDeleteAllMsg(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "conversationIDList"),
int2long(methodCall, "status")
);
}
public void getConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getConversationRecvMessageOpt(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "conversationIDList")
);
}
public void setOneConversationPrivateChat(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setOneConversationPrivateChat(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "isPrivate")
);
}
public void deleteConversationFromLocalAndSvr(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteConversationFromLocalAndSvr(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "conversationID") value(methodCall, "conversationID")
); );
} }
public void deleteAllConversationFromLocal(MethodCall methodCall, MethodChannel.Result result) { public void deleteConversationAndDeleteAllMsg(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteAllConversationFromLocal( Open_im_sdk.deleteConversationAndDeleteAllMsg(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
public void resetConversationGroupAtType(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.resetConversationGroupAtType(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "conversationID") value(methodCall, "conversationID")
@@ -152,14 +106,57 @@ public class ConversationManager extends BaseManager {
} }
public void getAtAllTag(MethodCall methodCall, MethodChannel.Result result) { public void getAtAllTag(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result, Open_im_sdk.getAtAllTag()); CommonUtil.runMainThreadReturn(result, Open_im_sdk.getAtAllTag(value(methodCall, "operationID")));
} }
public void setGlobalRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) { public void hideAllConversations(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGlobalRecvMessageOpt( Open_im_sdk.hideAllConversations(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID")
);
}
public void searchConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchConversation(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
int2long(methodCall, "status") value(methodCall, "name")
);
}
public void changeInputStates(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.changeInputStates(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "focus")
);
}
public void getInputStates(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getInputStates(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "userID")
);
}
public void setConversation(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setConversation(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
jsonValue(methodCall, "req")
);
}
public void searchConversations(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchConversation(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "name")
); );
} }
} }

View File

@@ -11,13 +11,16 @@ 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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList"),
value(methodCall, "filterBlack")
); );
} }
@@ -29,15 +32,15 @@ public class FriendshipManager extends BaseManager {
); );
} }
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, methodCall), 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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
@@ -46,15 +49,18 @@ public class FriendshipManager extends BaseManager {
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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID"),
value(methodCall, "filterBlack")
); );
} }
public void setFriendRemark(MethodCall methodCall, MethodChannel.Result result) { public void getFriendListPage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setFriendRemark( Open_im_sdk.getFriendListPage(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) value(methodCall, "offset"),
value(methodCall, "count"),
value(methodCall, "filterBlack")
); );
} }
@@ -62,7 +68,8 @@ public class FriendshipManager extends BaseManager {
Open_im_sdk.addBlack( Open_im_sdk.addBlack(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid") value(methodCall, "userID"),
value(methodCall, "ex")
); );
} }
@@ -77,7 +84,7 @@ public class FriendshipManager extends BaseManager {
Open_im_sdk.removeBlack( Open_im_sdk.removeBlack(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid") value(methodCall, "userID")
); );
} }
@@ -85,7 +92,7 @@ public class FriendshipManager extends BaseManager {
Open_im_sdk.checkFriend( Open_im_sdk.checkFriend(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList")
); );
} }
@@ -93,7 +100,7 @@ public class FriendshipManager extends BaseManager {
Open_im_sdk.deleteFriend( Open_im_sdk.deleteFriend(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid") value(methodCall, "userID")
); );
} }
@@ -120,4 +127,12 @@ public class FriendshipManager extends BaseManager {
jsonValue(methodCall, "searchParam") jsonValue(methodCall, "searchParam")
); );
} }
public void updateFriends(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.updateFriends(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "req")
);
}
} }

View File

@@ -10,15 +10,17 @@ 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, methodCall), 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")
); );
} }
@@ -26,18 +28,18 @@ public class GroupManager extends BaseManager {
Open_im_sdk.kickGroupMember( Open_im_sdk.kickGroupMember(
new OnBaseListener(result, methodCall), 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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
jsonValue(methodCall, "uidList") jsonValue(methodCall, "userIDList")
); );
} }
@@ -45,7 +47,7 @@ public class GroupManager extends BaseManager {
Open_im_sdk.getGroupMemberList( Open_im_sdk.getGroupMemberList(
new OnBaseListener(result, methodCall), 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")
@@ -60,12 +62,20 @@ public class GroupManager extends BaseManager {
); );
} }
public void getJoinedGroupListPage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getJoinedGroupListPage(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "offset"),
value(methodCall, "count")
);
}
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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "gInfo"), jsonValue(methodCall)
jsonValue(methodCall, "memberList")
); );
} }
@@ -73,16 +83,15 @@ public class GroupManager extends BaseManager {
Open_im_sdk.setGroupInfo( Open_im_sdk.setGroupInfo(
new OnBaseListener(result, methodCall), 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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall, "gidList") jsonValue(methodCall, "groupIDList")
); );
} }
@@ -90,8 +99,10 @@ public class GroupManager extends BaseManager {
Open_im_sdk.joinGroup( Open_im_sdk.joinGroup(
new OnBaseListener(result, methodCall), 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"),
value(methodCall, "ex")
); );
} }
@@ -99,7 +110,7 @@ public class GroupManager extends BaseManager {
Open_im_sdk.quitGroup( Open_im_sdk.quitGroup(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid") value(methodCall, "groupID")
); );
} }
@@ -107,20 +118,20 @@ public class GroupManager extends BaseManager {
Open_im_sdk.transferGroupOwner( Open_im_sdk.transferGroupOwner(
new OnBaseListener(result, methodCall), 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, methodCall), 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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
@@ -130,8 +141,8 @@ public class GroupManager extends BaseManager {
Open_im_sdk.acceptGroupApplication( Open_im_sdk.acceptGroupApplication(
new OnBaseListener(result, methodCall), 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")
); );
@@ -141,8 +152,8 @@ public class GroupManager extends BaseManager {
Open_im_sdk.refuseGroupApplication( Open_im_sdk.refuseGroupApplication(
new OnBaseListener(result, methodCall), 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")
); );
@@ -152,7 +163,7 @@ public class GroupManager extends BaseManager {
Open_im_sdk.dismissGroup( Open_im_sdk.dismissGroup(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid") value(methodCall, "groupID")
); );
} }
@@ -160,7 +171,7 @@ public class GroupManager extends BaseManager {
Open_im_sdk.changeGroupMute( Open_im_sdk.changeGroupMute(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "mute") value(methodCall, "mute")
); );
} }
@@ -169,21 +180,12 @@ public class GroupManager extends BaseManager {
Open_im_sdk.changeGroupMemberMute( Open_im_sdk.changeGroupMemberMute(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "gid"), value(methodCall, "groupID"),
value(methodCall, "uid"), value(methodCall, "userID"),
int2long(methodCall, "seconds") int2long(methodCall, "seconds")
); );
} }
public void setGroupMemberNickname(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupMemberNickname(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "gid"),
value(methodCall, "uid"),
value(methodCall, "groupNickname")
);
}
public void searchGroups(MethodCall methodCall, MethodChannel.Result result) { public void searchGroups(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchGroups(new OnBaseListener(result, methodCall), Open_im_sdk.searchGroups(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
@@ -191,12 +193,51 @@ public class GroupManager extends BaseManager {
); );
} }
public void setGroupMemberRoleLevel(MethodCall methodCall, MethodChannel.Result result) { public void getGroupMemberListByJoinTimeFilter(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setGroupMemberRoleLevel(new OnBaseListener(result, methodCall), Open_im_sdk.getGroupMemberListByJoinTimeFilter(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "groupID"), value(methodCall, "groupID"),
value(methodCall, "userID"), value(methodCall, "offset"),
int2long(methodCall, "roleLevel") value(methodCall, "count"),
int2long(methodCall, "joinTimeBegin"),
int2long(methodCall, "joinTimeEnd"),
jsonValue(methodCall, "excludeUserIDList")
);
}
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")
);
}
public void getUsersInGroup(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getUsersInGroup(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
jsonValue(methodCall, "userIDs")
); );
} }
} }

View File

@@ -2,26 +2,34 @@ 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.listener.OnUploadLogsListener;
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, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "uid"), value(methodCall, "userID"),
value(methodCall, "token") value(methodCall, "token")
); );
} }
@@ -34,23 +42,70 @@ public class IMManager extends BaseManager {
} }
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 wakeUp(MethodCall methodCall, MethodChannel.Result result) { public void uploadFile(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.wakeUp( 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 uploadLogs(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.uploadLogs(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
int2long(methodCall, "line"),
value(methodCall, "ex"),
new OnUploadLogsListener(result, methodCall)
);
}
public void logs(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.logs(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
int2long(methodCall, "logLevel"),
value(methodCall, "file"),
int2long(methodCall, "line"),
value(methodCall, "msgs"),
value(methodCall, "err"),
value(methodCall, "keyAndValue")
);
}
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), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void uploadImage(MethodCall methodCall, MethodChannel.Result result) { // public void setListenerForService(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.uploadImage( // Open_im_sdk.setListenerForService(new OnListenerForService());
new OnBaseListener(result, methodCall), //
value(methodCall, "operationID"), // result.success(null);
value(methodCall, "path"), // }
value(methodCall, "token"),
value(methodCall, "obj")
);
}
} }

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) {
@@ -91,15 +27,8 @@ public class MessageManager extends BaseManager {
jsonValue(methodCall, "message"), jsonValue(methodCall, "message"),
value(methodCall, "userID"), value(methodCall, "userID"),
value(methodCall, "groupID"), value(methodCall, "groupID"),
jsonValue(methodCall, "offlinePushInfo") jsonValue(methodCall, "offlinePushInfo"),
); value(methodCall, "isOnlineOnly")
}
public void getHistoryMessageList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getHistoryMessageList(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall)
); );
} }
@@ -107,7 +36,8 @@ public class MessageManager extends BaseManager {
Open_im_sdk.revokeMessage( Open_im_sdk.revokeMessage(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) value(methodCall, "conversationID"),
value(methodCall, "clientMsgID")
); );
} }
@@ -115,13 +45,33 @@ public class MessageManager extends BaseManager {
Open_im_sdk.deleteMessageFromLocalStorage( Open_im_sdk.deleteMessageFromLocalStorage(
new OnBaseListener(result, methodCall), 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, methodCall), 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(
@@ -143,20 +93,11 @@ public class MessageManager extends BaseManager {
); );
} }
public void markC2CMessageAsRead(MethodCall methodCall, MethodChannel.Result result) { public void markMessagesAsReadByMsgID(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.markC2CMessageAsRead( Open_im_sdk.markMessagesAsReadByMsgID(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "userID"), value(methodCall, "conversationID"),
jsonValue(methodCall, "messageIDList")
);
}
public void markGroupMessageAsRead(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.markGroupMessageAsRead(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "groupID"),
jsonValue(methodCall, "messageIDList") jsonValue(methodCall, "messageIDList")
); );
} }
@@ -201,6 +142,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(
@@ -311,20 +253,23 @@ public class MessageManager extends BaseManager {
)); ));
} }
public void clearC2CHistoryMessage(MethodCall methodCall, MethodChannel.Result result) { public void createAdvancedTextMessage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearC2CHistoryMessage( CommonUtil.runMainThreadReturn(result,
new OnBaseListener(result, methodCall), Open_im_sdk.createAdvancedTextMessage(
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "userID") value(methodCall, "text"),
); jsonValue(methodCall, "richMessageInfoList")
));
} }
public void clearGroupHistoryMessage(MethodCall methodCall, MethodChannel.Result result) { public void createAdvancedQuoteMessage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearGroupHistoryMessage( CommonUtil.runMainThreadReturn(result,
new OnBaseListener(result, methodCall), Open_im_sdk.createAdvancedQuoteMessage(
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "groupID") value(methodCall, "quoteText"),
); jsonValue(methodCall, "quoteMessage"),
jsonValue(methodCall, "richMessageInfoList")
));
} }
public void searchLocalMessages(MethodCall methodCall, MethodChannel.Result result) { public void searchLocalMessages(MethodCall methodCall, MethodChannel.Result result) {
@@ -335,58 +280,104 @@ public class MessageManager extends BaseManager {
); );
} }
public void deleteMessageFromLocalAndSvr(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteMessageFromLocalAndSvr( public void clearConversationAndDeleteAllMsg(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearConversationAndDeleteAllMsg(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID")
);
}
public void getAdvancedHistoryMessageList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getAdvancedHistoryMessageList(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) jsonValue(methodCall)
); );
} }
public void deleteAllMsgFromLocal(MethodCall methodCall, MethodChannel.Result result) { public void getAdvancedHistoryMessageListReverse(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteAllMsgFromLocal( Open_im_sdk.getAdvancedHistoryMessageListReverse(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID"),
jsonValue(methodCall)
); );
} }
public void deleteAllMsgFromLocalAndSvr(MethodCall methodCall, MethodChannel.Result result) { public void findMessageList(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteAllMsgFromLocalAndSvr( Open_im_sdk.findMessageList(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID") value(methodCall, "operationID"),
jsonValue(methodCall, "searchParams")
); );
} }
public void markMessageAsReadByConID(MethodCall methodCall, MethodChannel.Result result) { public void setMessageLocalEx(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.markMessageAsReadByConID( Open_im_sdk.setMessageLocalEx(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "conversationID"), value(methodCall, "conversationID"),
jsonValue(methodCall, "messageIDList") value(methodCall, "clientMsgID"),
value(methodCall, "localEx")
); );
} }
public void clearC2CHistoryMessageFromLocalAndSvr(MethodCall methodCall, MethodChannel.Result result) { public void setAppBadge(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearC2CHistoryMessageFromLocalAndSvr( Open_im_sdk.setAppBadge(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "userID") value(methodCall, "count")
); );
} }
public void clearGroupHistoryMessageFromLocalAndSvr(MethodCall methodCall, MethodChannel.Result result) { public void sendMessageNotOss(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearGroupHistoryMessageFromLocalAndSvr( Open_im_sdk.sendMessageNotOss(
new OnBaseListener(result, methodCall), new OnMsgSendListener(result, methodCall),
value(methodCall, "operationID"), value(methodCall, "operationID"),
value(methodCall, "groupID") jsonValue(methodCall, "message"),
value(methodCall, "userID"),
value(methodCall, "groupID"),
jsonValue(methodCall, "offlinePushInfo"),
value(methodCall, "isOnlineOnly")
); );
} }
public void getHistoryMessageListReverse(MethodCall methodCall, MethodChannel.Result result) { public void createImageMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getHistoryMessageListReverse( CommonUtil.runMainThreadReturn(result,
new OnBaseListener(result, methodCall), Open_im_sdk.createImageMessageByURL(
value(methodCall, "operationID"), value(methodCall, "operationID"),
jsonValue(methodCall) 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

@@ -1,68 +0,0 @@
package io.openim.flutter_openim_sdk.manager;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.openim.flutter_openim_sdk.listener.OnBaseListener;
import io.openim.flutter_openim_sdk.listener.OnOrganizationListener;
import open_im_sdk.Open_im_sdk;
public class OrganizationManager extends BaseManager {
public void setOrganizationListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setOrganizationListener(new OnOrganizationListener());
}
public void getSubDepartment(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getSubDepartment(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "departmentID"),
int2long(methodCall, "offset"),
int2long(methodCall, "count")
);
}
public void getDepartmentMember(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getDepartmentMember(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "departmentID"),
int2long(methodCall, "offset"),
int2long(methodCall, "count")
);
}
public void getUserInDepartment(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getUserInDepartment(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "userID")
);
}
public void getDepartmentMemberAndSubDepartment(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getDepartmentMemberAndSubDepartment(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "departmentID")
);
}
public void getDepartmentInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getDepartmentInfo(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "departmentID")
);
}
public void searchOrganization(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchOrganization(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "searchParams"),
int2long(methodCall, "offset"),
int2long(methodCall, "count")
);
}
}

View File

@@ -1,56 +0,0 @@
package io.openim.flutter_openim_sdk.manager;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.openim.flutter_openim_sdk.listener.OnBaseListener;
import io.openim.flutter_openim_sdk.listener.OnSignalingListener;
import open_im_sdk.Open_im_sdk;
public class SignalingManager extends BaseManager {
public void setSignalingListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setSignalingListener(new OnSignalingListener());
}
public void signalingInvite(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingInvite(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "signalingInfo"));
}
public void signalingInviteInGroup(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingInviteInGroup(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "signalingInfo"));
}
public void signalingAccept(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingAccept(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "signalingInfo"));
}
public void signalingReject(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingReject(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "signalingInfo"));
}
public void signalingCancel(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingCancel(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "signalingInfo"));
}
public void signalingHungUp(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingHungUp(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "signalingInfo"));
}
}

View File

@@ -10,13 +10,15 @@ 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, methodCall), 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) {
@@ -32,4 +34,31 @@ public class UserManager extends BaseManager {
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"));
}
} }

View File

@@ -1,31 +0,0 @@
package io.openim.flutter_openim_sdk.manager;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.openim.flutter_openim_sdk.listener.OnBaseListener;
import io.openim.flutter_openim_sdk.listener.OnWorkMomentsListener;
import open_im_sdk.Open_im_sdk;
public class WorkMomentsManager extends BaseManager {
public void setWorkMomentsListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setWorkMomentsListener(new OnWorkMomentsListener());
}
public void getWorkMomentsUnReadCount(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getWorkMomentsUnReadCount(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"));
}
public void getWorkMomentsNotification(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getWorkMomentsNotification(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
int2long(methodCall, "offset"),
int2long(methodCall, "count"));
}
public void clearWorkMomentsNotification(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.clearWorkMomentsNotification(new OnBaseListener(result, methodCall),
value(methodCall, "operationID"));
}
}

View File

@@ -33,6 +33,7 @@ public class CommonUtil {
} }
public synchronized static <T> void emitEvent(String method, String type, Object errCode, String errMsg, T data) { public synchronized static <T> void emitEvent(String method, String type, Object errCode, String errMsg, T data) {
String threadName = Thread.currentThread().getName();
runMainThread(() -> { runMainThread(() -> {
Map<String, Object> res = new ArrayMap<>(); Map<String, Object> res = new ArrayMap<>();
if (null != type) { if (null != type) {
@@ -47,7 +48,7 @@ public class CommonUtil {
if (null != errMsg) { if (null != errMsg) {
res.put("errMsg", errMsg); res.put("errMsg", errMsg);
} }
Log.i("F-OpenIMSDK(native call flutter)", "{ method:" + method + ", type:" + type + " }"); Log.i("F-OpenIMSDK(native call flutter)", "thread: " + threadName + " { method:" + method + ", type:" + type + " }");
FlutterOpenimSdkPlugin.channel.invokeMethod(method, res); FlutterOpenimSdkPlugin.channel.invokeMethod(method, res);
}); });
} }

View File

@@ -1,9 +1,9 @@
buildscript { buildscript {
repositories { repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
google() google()
mavenCentral() mavenCentral()
} }
@@ -15,10 +15,10 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
google() google()
mavenCentral() mavenCentral()
} }
@@ -30,6 +30,6 @@ subprojects {
project.evaluationDependsOn(':app') project.evaluationDependsOn(':app')
} }
task clean(type: Delete) { tasks.register("clean", Delete) {
delete rootProject.buildDir delete rootProject.buildDir
} }

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-all.zip

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,4 @@
# 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'
# 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'

29
example/ios/Podfile.lock Normal file
View File

@@ -0,0 +1,29 @@
PODS:
- Flutter (1.0.0)
- flutter_openim_sdk (0.0.1):
- Flutter
- OpenIMSDKCore (= 3.8.1-rc.0)
- OpenIMSDKCore (3.8.1-rc.0)
DEPENDENCIES:
- Flutter (from `Flutter`)
- flutter_openim_sdk (from `.symlinks/plugins/flutter_openim_sdk/ios`)
SPEC REPOS:
trunk:
- OpenIMSDKCore
EXTERNAL SOURCES:
Flutter:
:path: Flutter
flutter_openim_sdk:
:path: ".symlinks/plugins/flutter_openim_sdk/ios"
SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_openim_sdk: 754e4ad0177918ce2c37dfba63973db26ce89c90
OpenIMSDKCore: 0c92e9e3eb2a91b6b6528e7781a1e28ed42bc518
PODFILE CHECKSUM: d4ba08011ff3d270b662299a448a7c436eb30089
COCOAPODS: 1.14.3

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,7 +131,7 @@
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 */,
@@ -198,6 +198,7 @@
/* Begin PBXShellScriptBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
@@ -212,6 +213,7 @@
}; };
9740EEB61CF901F6004384FC /* Run Script */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
@@ -224,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 = (
@@ -322,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;
@@ -339,14 +341,14 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = BDLHL8GNFV; DEVELOPMENT_TEAM = V57RT7LMFH;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.openim.flutterOpenimSdkExample; PRODUCT_BUNDLE_IDENTIFIER = io.openim.sdk.example;
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;
@@ -402,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;
@@ -452,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;
@@ -471,14 +473,14 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = BDLHL8GNFV; DEVELOPMENT_TEAM = V57RT7LMFH;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.openim.flutterOpenimSdkExample; PRODUCT_BUNDLE_IDENTIFIER = io.openim.sdk.example;
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";
@@ -495,14 +497,14 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = BDLHL8GNFV; DEVELOPMENT_TEAM = V57RT7LMFH;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.openim.flutterOpenimSdkExample; PRODUCT_BUNDLE_IDENTIFIER = io.openim.sdk.example;
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,5 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
void main() { void main() {
runApp(MyApp()); runApp(MyApp());
@@ -14,6 +14,12 @@ class _MyAppState extends State<MyApp> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
OpenIM.iMManager.initSDK(
platformID: 1,
apiAddr: '',
wsAddr: '',
dataDir: '/',
listener: OnConnectListener());
} }
@override @override

View File

@@ -5,58 +5,58 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: async name: async
url: "https://pub.flutter-io.cn" sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.8.2" version: "2.11.0"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
url: "https://pub.flutter-io.cn" sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.1"
characters: characters:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
url: "https://pub.flutter-io.cn" sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.3.0"
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
url: "https://pub.flutter-io.cn" sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.1.1"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
url: "https://pub.flutter-io.cn" sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted source: hosted
version: "1.16.0" version: "1.18.0"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
name: cupertino_icons name: cupertino_icons
url: "https://pub.flutter-io.cn" sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.3" version: "1.0.6"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
name: fake_async name: fake_async
url: "https://pub.flutter-io.cn" sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.3.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -68,40 +68,68 @@ packages:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "2.0.9+2" version: "3.8.1"
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"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
url: "https://pub.dev"
source: hosted
version: "10.0.4"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
url: "https://pub.flutter-io.cn" sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.11" version: "0.12.16+1"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
url: "https://pub.flutter-io.cn" sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.4" version: "0.8.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
url: "https://pub.flutter-io.cn" sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.7.0" version: "1.12.0"
path: path:
dependency: transitive dependency: transitive
description: description:
name: path name: path
url: "https://pub.flutter-io.cn" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.1" version: "1.9.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -111,51 +139,66 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
url: "https://pub.flutter-io.cn" sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.2" version: "1.10.0"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
url: "https://pub.flutter-io.cn" sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.0" version: "1.11.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
url: "https://pub.flutter-io.cn" sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.2"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
url: "https://pub.flutter-io.cn" sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
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
url: "https://pub.flutter-io.cn" sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
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
url: "https://pub.flutter-io.cn" sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.9" version: "0.7.0"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
name: vector_math name: vector_math
url: "https://pub.flutter-io.cn" sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.dev"
source: hosted
version: "14.2.1"
sdks: sdks:
dart: ">=2.17.0-0 <3.0.0" dart: ">=3.3.0 <4.0.0"
flutter: ">=1.20.0" flutter: ">=3.18.0-18.0.pre.54"

View File

@@ -8,7 +8,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_openim_sdk_example/main.dart'; import '../lib/main.dart';
void main() { void main() {
testWidgets('Verify Platform version', (WidgetTester tester) async { testWidgets('Verify Platform version', (WidgetTester tester) async {
@@ -18,8 +18,7 @@ void main() {
// Verify that platform version is retrieved. // Verify that platform version is retrieved.
expect( expect(
find.byWidgetPredicate( find.byWidgetPredicate(
(Widget widget) => widget is Text && (Widget widget) => widget is Text && widget.data!.startsWith('Running on:'),
widget.data!.startsWith('Running on:'),
), ),
findsOneWidget, findsOneWidget,
); );

38
ios/.gitignore vendored
View File

@@ -1,38 +0,0 @@
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/Generated.xcconfig
/Flutter/ephemeral/
/Flutter/flutter_export_environment.sh

View File

View File

@@ -2,146 +2,146 @@ import Foundation
import OpenIMCore import OpenIMCore
public class ConversationManager: BaseServiceManager { public class ConversationManager: BaseServiceManager {
public override func registerHandlers() { public override func registerHandlers() {
super.registerHandlers() super.registerHandlers()
self["setConversationListener"] = setConversationListener self["changeInputStates"] = changeInputStates
self["clearConversationAndDeleteAllMsg"] = clearConversationAndDeleteAllMsg
self["deleteConversationAndDeleteAllMsg"] = deleteConversationAndDeleteAllMsg
self["getAllConversationList"] = getAllConversationList self["getAllConversationList"] = getAllConversationList
self["getConversationListSplit"] = getConversationListSplit
self["getOneConversation"] = getOneConversation
self["getMultipleConversation"] = getMultipleConversation
self["deleteConversation"] = deleteConversation
self["setConversationDraft"] = setConversationDraft
self["pinConversation"] = pinConversation
// self["markSingleMessageHasRead"] = markSingleMessageHasRead
self["markGroupMessageHasRead"] = markGroupMessageHasRead
self["getTotalUnreadMsgCount"] = getTotalUnreadMsgCount
self["getConversationIDBySessionType"] = getConversationIDBySessionType
self["setConversationRecvMessageOpt"] = setConversationRecvMessageOpt
self["getConversationRecvMessageOpt"] = getConversationRecvMessageOpt
self["setOneConversationPrivateChat"] = setOneConversationPrivateChat
self["deleteConversationFromLocalAndSvr"] = deleteConversationFromLocalAndSvr
self["deleteAllConversationFromLocal"] = deleteAllConversationFromLocal
self["resetConversationGroupAtType"] = resetConversationGroupAtType
self["getAtAllTag"] = getAtAllTag self["getAtAllTag"] = getAtAllTag
self["setGlobalRecvMessageOpt"] = setGlobalRecvMessageOpt self["getConversationIDBySessionType"] = getConversationIDBySessionType
self["getConversationListSplit"] = getConversationListSplit
self["getInputStates"] = getInputStates
self["getMultipleConversation"] = getMultipleConversation
self["getOneConversation"] = getOneConversation
self["getTotalUnreadMsgCount"] = getTotalUnreadMsgCount
self["hideAllConversations"] = hideAllConversations
self["hideConversation"] = hideConversation
self["markConversationMessageAsRead"] = markConversationMessageAsRead
self["searchConversation"] = searchConversation
self["setConversationDraft"] = setConversationDraft
self["setConversationListener"] = setConversationListener
self["setConversation"] = setConversation
self["searchConversations"] = searchConversations
} }
func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func changeInputStates(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetConversationListener(ConversationListener(channel: channel)) Open_im_sdkChangeInputStates(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[bool: "focus"])
callBack(result)
} }
func getAllConversationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ 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 getAllConversationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetAllConversationList(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkGetAllConversationList(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func getConversationListSplit(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getAtAllTag(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetConversationListSplit(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "offset"], methodCall[int: "count"]) callBack(result, Open_im_sdkGetAtAllTag(methodCall[string: "operationID"]))
} }
func getOneConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getConversationIDBySessionType(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetOneConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "sessionType"], methodCall[string: "sourceID"]) let conversationID = Open_im_sdkGetConversationIDBySessionType(methodCall[string: "operationID"], methodCall[string: "sourceID"], methodCall[int: "sessionType"])
}
func getMultipleConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
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){
Open_im_sdkSetConversationDraft(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[string: "draftText"])
}
func pinConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkPinConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[bool: "isPinned"])
}
// func markSingleMessageHasRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkMarkSingleMessageHasRead(BaseCallback(result: result), methodCall[string: "userID"])
// }
func markGroupMessageHasRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkMarkGroupMessageHasRead(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
}
func getTotalUnreadMsgCount(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetTotalUnreadMsgCount(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getConversationIDBySessionType(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
let conversationID = Open_im_sdkGetConversationIDBySessionType(methodCall[string: "sourceID"], methodCall[int: "sessionType"])
callBack(result, conversationID) callBack(result, conversationID)
} }
func setConversationRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getConversationListSplit(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetConversationRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"], methodCall[int: "status"]) Open_im_sdkGetConversationListSplit(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "offset"], methodCall[int: "count"])
} }
func getConversationRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getInputStates(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetConversationRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"]) Open_im_sdkGetInputStates(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[string: "userID"])
} }
func setOneConversationPrivateChat(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getMultipleConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetOneConversationPrivateChat(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"],methodCall[bool: "isPrivate"]) Open_im_sdkGetMultipleConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "conversationIDList"])
} }
func deleteConversationFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getOneConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkDeleteConversationFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"]) Open_im_sdkGetOneConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int32: "sessionType"], methodCall[string: "sourceID"])
} }
func deleteAllConversationFromLocal(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func getTotalUnreadMsgCount(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkDeleteAllConversationFromLocal(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkGetTotalUnreadMsgCount(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func resetConversationGroupAtType(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func hideAllConversations(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkResetConversationGroupAtType(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"]) Open_im_sdkHideAllConversations(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func getAtAllTag(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func hideConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
callBack(result, Open_im_sdkGetAtAllTag()) Open_im_sdkHideConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
} }
func setGlobalRecvMessageOpt(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func markConversationMessageAsRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetGlobalRecvMessageOpt(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "status"]) Open_im_sdkMarkConversationMessageAsRead(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
}
func searchConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSearchConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "name"])
}
func setConversationDraft(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetConversationDraft(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[string: "draftText"])
}
func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetConversationListener(ConversationListener(channel: channel))
callBack(result)
}
func setConversation(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[jsonString: "req"])
}
func searchConversations(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSearchConversation(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "name"])
} }
} }
public class ConversationListener: NSObject, Open_im_sdk_callbackOnConversationListenerProtocol { public class ConversationListener: NSObject, Open_im_sdk_callbackOnConversationListenerProtocol {
private let channel:FlutterMethodChannel private let channel: FlutterMethodChannel
init(channel:FlutterMethodChannel) { init(channel: FlutterMethodChannel) {
self.channel = channel self.channel = channel
} }
public func onConversationChanged(_ conversationList: String?) { public func onConversationChanged(_ conversationList: String?) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onConversationChanged", errCode: nil, errMsg: nil, data: conversationList) CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onConversationChanged", errCode: nil, errMsg: nil, data: conversationList)
} }
public func onConversationUserInputStatusChanged(_ change: String?) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onConversationUserInputStatusChanged", errCode: nil, errMsg: nil, data: change)
}
public func onNewConversation(_ conversationList: String?) { public func onNewConversation(_ conversationList: String?) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onNewConversation", errCode: nil, errMsg: nil, data: conversationList) CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onNewConversation", errCode: nil, errMsg: nil, data: conversationList)
} }
public func onSyncServerFailed() { public func onSyncServerFailed(_ reinstalled: Bool) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onSyncServerFailed", errCode: nil, errMsg: nil, data: nil) CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onSyncServerFailed", errCode: nil, errMsg: nil, data: reinstalled)
} }
public func onSyncServerFinish() { public func onSyncServerFinish(_ reinstalled: Bool) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onSyncServerFinish", errCode: nil, errMsg: nil, data: nil) CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onSyncServerFinish", errCode: nil, errMsg: nil, data: reinstalled)
} }
public func onSyncServerStart() { public func onSyncServerProgress(_ progress: Int) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onSyncServerStart", errCode: nil, errMsg: nil, data: nil) CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onSyncServerProgress", errCode: nil, errMsg: nil, data: progress)
} }
public func onSyncServerStart(_ reinstalled: Bool) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onSyncServerStart", errCode: nil, errMsg: nil, data: reinstalled)
}
public func onTotalUnreadMessageCountChanged(_ totalUnreadCount: Int32) { public func onTotalUnreadMessageCountChanged(_ totalUnreadCount: Int32) {
CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onTotalUnreadMessageCountChanged", errCode: nil, errMsg: nil, data: totalUnreadCount) CommonUtil.emitEvent(channel: channel, method: "conversationListener", type: "onTotalUnreadMessageCountChanged", errCode: nil, errMsg: nil, data: totalUnreadCount)
} }
} }

View File

@@ -5,24 +5,78 @@ public class FriendshipManager: BaseServiceManager {
public override func registerHandlers() { public override func registerHandlers() {
super.registerHandlers() super.registerHandlers()
self["setFriendListener"] = setFriendListener self["acceptFriendApplication"] = acceptFriendApplication
self["getFriendsInfo"] = getFriendsInfo
self["addFriend"] = addFriend
self["getRecvFriendApplicationList"] = getRecvFriendApplicationList
self["getSendFriendApplicationList"] = getSendFriendApplicationList
self["getFriendList"] = getFriendList
self["setFriendRemark"] = setFriendRemark
self["addBlacklist"] = addBlacklist self["addBlacklist"] = addBlacklist
self["getBlacklist"] = getBlacklist self["addFriend"] = addFriend
self["removeBlacklist"] = removeBlacklist
self["checkFriend"] = checkFriend self["checkFriend"] = checkFriend
self["deleteFriend"] = deleteFriend self["deleteFriend"] = deleteFriend
self["acceptFriendApplication"] = acceptFriendApplication self["getBlacklist"] = getBlacklist
self["getFriendApplicationListAsApplicant"] = getFriendApplicationListAsApplicant
self["getFriendApplicationListAsRecipient"] = getFriendApplicationListAsRecipient
self["getFriendList"] = getFriendList
self["getFriendListPage"] = getFriendListPage
self["getFriendsInfo"] = getFriendsInfo
self["refuseFriendApplication"] = refuseFriendApplication self["refuseFriendApplication"] = refuseFriendApplication
self["removeBlacklist"] = removeBlacklist
self["searchFriends"] = searchFriends self["searchFriends"] = searchFriends
// self["forceSyncFriendApplication"] = forceSyncFriendApplication self["setFriendListener"] = setFriendListener
// self["forceSyncFriend"] = forceSyncFriend self["updateFriends"] = updateFriends
// self["forceSyncBlackList"] = forceSyncBlackList }
func acceptFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAcceptFriendApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func addBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAddBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"], methodCall[string: "ex"])
}
func addFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAddFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func checkFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkCheckFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDList"])
}
func deleteFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"])
}
func getBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetBlackList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getFriendApplicationListAsApplicant(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetFriendApplicationListAsApplicant(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getFriendApplicationListAsRecipient(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetFriendApplicationListAsRecipient(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getFriendList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetFriendList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[bool: "filterBlack"])
}
func getFriendListPage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetFriendListPage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int32: "offset"], methodCall[int32: "count"], methodCall[bool: "filterBlack"])
}
func getFriendsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetSpecifiedFriendsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "userIDList"], methodCall[bool: "filterBlack"])
}
func refuseFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkRefuseFriendApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func removeBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkRemoveBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"])
}
func searchFriends(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSearchFriends(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
} }
func setFriendListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setFriendListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -30,75 +84,9 @@ public class FriendshipManager: BaseServiceManager {
callBack(result) callBack(result)
} }
func getFriendsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func updateFriends(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetDesignatedFriendsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "uidList"]) Open_im_sdkUpdateFriends(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "req"])
} }
func addFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAddFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func getRecvFriendApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetRecvFriendApplicationList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getSendFriendApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetSendFriendApplicationList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getFriendList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetFriendList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func setFriendRemark(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetFriendRemark(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func addBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAddBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "uid"])
}
func getBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetBlackList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func removeBlacklist(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkRemoveBlack(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "uid"])
}
func checkFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkCheckFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "uidList"])
}
func deleteFriend(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteFriend(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "uid"])
}
func acceptFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkAcceptFriendApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func refuseFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkRefuseFriendApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func searchFriends(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSearchFriends(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
}
// func forceSyncFriendApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
// Open_im_sdkForceSyncFriendApplication()
// 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 {
@@ -109,11 +97,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?) {
@@ -132,16 +124,11 @@ 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

@@ -5,163 +5,194 @@ public class GroupManager: BaseServiceManager {
public override func registerHandlers() { public override func registerHandlers() {
super.registerHandlers() super.registerHandlers()
self["setGroupListener"] = setGroupListener
self["inviteUserToGroup"] = inviteUserToGroup
self["kickGroupMember"] = kickGroupMember
self["getGroupMembersInfo"] = getGroupMembersInfo
self["getGroupMemberList"] = getGroupMemberList
self["getJoinedGroupList"] = getJoinedGroupList
self["createGroup"] = createGroup
self["setGroupInfo"] = setGroupInfo
self["getGroupsInfo"] = getGroupsInfo
self["joinGroup"] = joinGroup
self["quitGroup"] = quitGroup
self["transferGroupOwner"] = transferGroupOwner
self["getRecvGroupApplicationList"] = getRecvGroupApplicationList
self["getSendGroupApplicationList"] = getSendGroupApplicationList
self["acceptGroupApplication"] = acceptGroupApplication self["acceptGroupApplication"] = acceptGroupApplication
self["refuseGroupApplication"] = refuseGroupApplication
self["dismissGroup"] = dismissGroup
self["changeGroupMute"] = changeGroupMute
self["changeGroupMemberMute"] = changeGroupMemberMute self["changeGroupMemberMute"] = changeGroupMemberMute
self["setGroupMemberNickname"] = setGroupMemberNickname self["changeGroupMute"] = changeGroupMute
self["createGroup"] = createGroup
self["dismissGroup"] = dismissGroup
self["getGroupApplicationListAsApplicant"] = getGroupApplicationListAsApplicant
self["getGroupApplicationListAsRecipient"] = getGroupApplicationListAsRecipient
self["getGroupMemberList"] = getGroupMemberList
self["getGroupMemberListByJoinTimeFilter"] = getGroupMemberListByJoinTimeFilter
self["getGroupMemberOwnerAndAdmin"] = getGroupMemberOwnerAndAdmin
self["getGroupMembersInfo"] = getGroupMembersInfo
self["getGroupsInfo"] = getGroupsInfo
self["getJoinedGroupList"] = getJoinedGroupList
self["getJoinedGroupListPage"] = getJoinedGroupListPage
self["getUsersInGroup"] = getUsersInGroup
self["inviteUserToGroup"] = inviteUserToGroup
self["isJoinGroup"] = isJoinGroup
self["joinGroup"] = joinGroup
self["kickGroupMember"] = kickGroupMember
self["quitGroup"] = quitGroup
self["refuseGroupApplication"] = refuseGroupApplication
self["searchGroupMembers"] = searchGroupMembers
self["searchGroups"] = searchGroups self["searchGroups"] = searchGroups
self["setGroupMemberRoleLevel"] = setGroupMemberRoleLevel self["setGroupInfo"] = setGroupInfo
self["setGroupListener"] = setGroupListener
self["setGroupMemberInfo"] = setGroupMemberInfo
self["transferGroupOwner"] = transferGroupOwner
} }
func setGroupListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func acceptGroupApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkAcceptGroupApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "userID"], methodCall[string: "handleMsg"])
}
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 changeGroupMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkChangeGroupMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[bool: "mute"])
}
func createGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkCreateGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
func dismissGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkDismissGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
}
func getGroupApplicationListAsApplicant(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetGroupApplicationListAsApplicant(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getGroupApplicationListAsRecipient(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetGroupApplicationListAsRecipient(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getGroupMemberList(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetGroupMemberList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[int32: "filter"],
methodCall[int32: "offset"], methodCall[int32: "count"])
}
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 getGroupMemberOwnerAndAdmin(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetGroupMemberOwnerAndAdmin(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
}
func getGroupMembersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetSpecifiedGroupMembersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[jsonString: "userIDList"])
}
func getGroupsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetSpecifiedGroupsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "groupIDList"])
}
func getJoinedGroupList(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetJoinedGroupList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getJoinedGroupListPage(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetJoinedGroupListPage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int32: "offset"], methodCall[int32: "count"])
}
func getUsersInGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetUsersInGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"],
methodCall[jsonString: "userIDs"])
}
func inviteUserToGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkInviteUserToGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "reason"],
methodCall[jsonString: "userIDList"])
}
func isJoinGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkIsJoinGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
}
func joinGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkJoinGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string:
"reason"], methodCall[int32: "joinSource"], methodCall[jsonString: "ex"])
}
func kickGroupMember(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkKickGroupMember(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "reason"],
methodCall[jsonString: "userIDList"])
}
func quitGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkQuitGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
}
func refuseGroupApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkRefuseGroupApplication(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "userID"], methodCall[string: "handleMsg"])
}
func searchGroupMembers(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSearchGroupMembers(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
}
func searchGroups(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSearchGroups(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
}
func setGroupInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetGroupInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "groupInfo"])
}
func setGroupListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetGroupListener(GroupListener(channel: channel)) Open_im_sdkSetGroupListener(GroupListener(channel: channel))
callBack(result) callBack(result)
} }
func inviteUserToGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setGroupMemberInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkInviteUserToGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "reason"], Open_im_sdkSetGroupMemberInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "info"])
methodCall[jsonString: "uidList"])
}
func kickGroupMember(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkKickGroupMember(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "reason"],
methodCall[jsonString: "uidList"])
}
func getGroupMembersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupMembersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[jsonString: "uidList"])
}
func getGroupMemberList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupMemberList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[int32: "filter"],
methodCall[int32: "offset"], methodCall[int32: "count"])
}
func getJoinedGroupList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetJoinedGroupList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func createGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkCreateGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "gInfo"], methodCall[jsonString: "memberList"])
}
func setGroupInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[jsonString: "gInfo"])
}
func getGroupsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetGroupsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "gidList"])
}
func joinGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkJoinGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "reason"])
}
func quitGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkQuitGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"])
}
func transferGroupOwner(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkTransferGroupOwner(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string: "uid"])
}
func getRecvGroupApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetRecvGroupApplicationList(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getSendGroupApplicationList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetSendGroupApplicationList(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func acceptGroupApplication(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func transferGroupOwner(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_sdkTransferGroupOwner(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[string: "userID"])
}
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"])
}
func dismissGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDismissGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"])
}
func changeGroupMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkChangeGroupMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[bool: "mute"])
}
func changeGroupMemberMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkChangeGroupMemberMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string:"uid"],methodCall[int:"seconds"])
}
func setGroupMemberNickname(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupMemberNickname(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string:"uid"],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"])
} }
} }
public class GroupListener: NSObject, Open_im_sdk_callbackOnGroupListenerProtocol { 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)
} }
public func onGroupApplicationAdded(_ s: String?) { public func onGroupApplicationAdded(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationAdded", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationAdded", errCode: nil, errMsg: nil, data: s)
} }
public func onGroupApplicationDeleted(_ s: String?) { public func onGroupApplicationDeleted(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationDeleted", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupApplicationDeleted", errCode: nil, errMsg: nil, data: s)
} }
public func onGroupApplicationRejected(_ s: String?) { public func onGroupApplicationRejected(_ s: String?) {
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)
} }
public func onGroupMemberAdded(_ s: String?) { public func onGroupMemberAdded(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupMemberAdded", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupMemberAdded", errCode: nil, errMsg: nil, data: s)
} }
public func onGroupMemberDeleted(_ s: String?) { public func onGroupMemberDeleted(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupMemberDeleted", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupMemberDeleted", errCode: nil, errMsg: nil, data: s)
} }
public func onGroupMemberInfoChanged(_ s: String?) { public func onGroupMemberInfoChanged(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupMemberInfoChanged", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onGroupMemberInfoChanged", errCode: nil, errMsg: nil, data: s)
} }
public func onJoinedGroupAdded(_ s: String?) { public func onJoinedGroupAdded(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onJoinedGroupAdded", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "groupListener", type: "onJoinedGroupAdded", errCode: nil, errMsg: nil, data: s)
} }

View File

@@ -3,21 +3,75 @@ 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["wakeUp"] = wakeUp self["uploadFile"] = uploadFile
self["uploadLogs"] = uploadLogs
self["logs"] = logs
self["updateFcmToken"] = updateFcmToken
self["setAppBackgroundStatus"] = setAppBackgroundStatus
self["networkStatusChanged"] = networkStatusChanged
}
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){
callBack(result,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()))
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) {
@@ -25,19 +79,41 @@ 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 wakeUp(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func uploadFile(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkWakeUp(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkUploadFile(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString(), UploadFileListener(channel: self.channel,id: methodCall[string: "id"]))
}
func uploadLogs(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkUploadLogs(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "line"], methodCall[string: "ex"],
UploadLogsListener(channel: self.channel))
}
func logs(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkLogs(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "logLevel"], methodCall[string: "file"], methodCall[int: "line"], methodCall[string: "msgs"], methodCall[string: "err"], methodCall[string: "keyAndValue"])
} }
func uploadImage(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func updateFcmToken(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkUploadImage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "path"], methodCall[string: "token"], methodCall[string: "obj"]) Open_im_sdkUpdateFcmToken(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "fcmToken"], methodCall[int64:
"expireTime"])
}
func setAppBackgroundStatus(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSetAppBackgroundStatus(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[bool: "isBackground"])
}
func networkStatusChanged(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkNetworkStatusChanged(BaseCallback(result: result), methodCall[string: "operationID"])
} }
} }
public class ConnListener: NSObject, Open_im_sdk_callbackOnConnListenerProtocol { public class ConnListener: NSObject, Open_im_sdk_callbackOnConnListenerProtocol {
public func onUserTokenInvalid(_ errMsg: String?) {
CommonUtil.emitEvent(channel: self.channel, method: "connectListener", type: "onUserTokenInvalid", errCode: nil, errMsg: errMsg, data: nil)
}
private let channel:FlutterMethodChannel private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) { init(channel:FlutterMethodChannel) {
@@ -47,7 +123,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)
} }
@@ -64,3 +140,96 @@ 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 UploadLogsListener: NSObject, Open_im_sdk_callbackUploadLogProgressProtocol {
private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) {
self.channel = channel
}
public func onProgress(_ current: Int64, size: Int64) {
var values: [String: Any] = [:]
values["current"] = current
values["size"] = size
CommonUtil.emitEvent(channel: channel, method: "uploadLogsListener", type: "onProgress", errCode: nil, errMsg: nil, data: values)
}
}
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["deleteMessageFromLocalAndSvr"] = deleteMessageFromLocalAndSvr
self["deleteAllMsgFromLocal"] = deleteAllMsgFromLocal
self["deleteAllMsgFromLocalAndSvr"] = deleteAllMsgFromLocalAndSvr
self["insertSingleMessageToLocalStorage"] = insertSingleMessageToLocalStorage self["insertSingleMessageToLocalStorage"] = insertSingleMessageToLocalStorage
self["insertGroupMessageToLocalStorage"] = insertGroupMessageToLocalStorage self["insertGroupMessageToLocalStorage"] = insertGroupMessageToLocalStorage
self["markC2CMessageAsRead"] = markC2CMessageAsRead self["markMessagesAsReadByMsgID"] = markMessagesAsReadByMsgID
self["markGroupMessageAsRead"] = markGroupMessageAsRead
self["typingStatusUpdate"] = typingStatusUpdate self["typingStatusUpdate"] = typingStatusUpdate
self["createTextMessage"] = createTextMessage self["createTextMessage"] = createTextMessage
self["createTextAtMessage"] = createTextAtMessage self["createTextAtMessage"] = createTextAtMessage
@@ -34,16 +34,25 @@ public class MessageManager: BaseServiceManager {
self["createQuoteMessage"] = createQuoteMessage self["createQuoteMessage"] = createQuoteMessage
self["createCardMessage"] = createCardMessage self["createCardMessage"] = createCardMessage
self["createFaceMessage"] = createFaceMessage self["createFaceMessage"] = createFaceMessage
self["clearC2CHistoryMessage"] = clearC2CHistoryMessage self["createAdvancedTextMessage"] = createAdvancedTextMessage
self["clearGroupHistoryMessage"] = clearGroupHistoryMessage self["createAdvancedQuoteMessage"] = createAdvancedQuoteMessage
self["searchLocalMessages"] = searchLocalMessages self["searchLocalMessages"] = searchLocalMessages
self["deleteMessageFromLocalAndSvr"] = deleteMessageFromLocalAndSvr self["clearConversationAndDeleteAllMsg"] = clearConversationAndDeleteAllMsg
self["deleteAllMsgFromLocal"] = deleteAllMsgFromLocal
self["deleteAllMsgFromLocalAndSvr"] = deleteAllMsgFromLocalAndSvr self["getAdvancedHistoryMessageList"] = getAdvancedHistoryMessageList
self["markMessageAsReadByConID"] = markMessageAsReadByConID self["getAdvancedHistoryMessageListReverse"] = getAdvancedHistoryMessageListReverse
self["clearC2CHistoryMessageFromLocalAndSvr"] = clearC2CHistoryMessageFromLocalAndSvr
self["clearGroupHistoryMessageFromLocalAndSvr"] = clearGroupHistoryMessageFromLocalAndSvr self["findMessageList"] = findMessageList
self["getHistoryMessageListReverse"] = getHistoryMessageListReverse 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){
@@ -56,21 +65,28 @@ public class MessageManager: BaseServiceManager {
func sendMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func sendMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
let sendMsgProgressListener: SendMsgProgressListener = SendMsgProgressListener(channel: channel,result: result,methodCall: methodCall) let sendMsgProgressListener: SendMsgProgressListener = SendMsgProgressListener(channel: channel,result: result,methodCall: methodCall)
Open_im_sdkSendMessage(sendMsgProgressListener, methodCall[string: "operationID"], methodCall[jsonString: "message"], methodCall[string: "userID"], Open_im_sdkSendMessage(sendMsgProgressListener, methodCall[string: "operationID"], methodCall[jsonString: "message"], methodCall[string: "userID"],
methodCall[string: "groupID"], methodCall[jsonString: "offlinePushInfo"]) methodCall[string: "groupID"], methodCall[jsonString: "offlinePushInfo"], methodCall[bool: "isOnlineOnly"])
}
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"])
} }
func deleteMessageFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping 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){
Open_im_sdkInsertSingleMessageToLocalStorage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "message"], Open_im_sdkInsertSingleMessageToLocalStorage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "message"],
@@ -82,12 +98,8 @@ public class MessageManager: BaseServiceManager {
methodCall[string: "groupID"], methodCall[string: "senderID"]) methodCall[string: "groupID"], methodCall[string: "senderID"])
} }
func markC2CMessageAsRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func markMessagesAsReadByMsgID(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkMarkC2CMessageAsRead(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"], methodCall[jsonString: "messageIDList"]) Open_im_sdkMarkMessagesAsReadByMsgID(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[jsonString: "messageIDList"])
}
func markGroupMessageAsRead(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkMarkGroupMessageAsRead(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"], methodCall[jsonString: "messageIDList"])
} }
func typingStatusUpdate(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func typingStatusUpdate(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -173,111 +185,162 @@ public class MessageManager: BaseServiceManager {
func createFaceMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createFaceMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateFaceMessage(methodCall[string: "operationID"], methodCall[int: "index"], methodCall[string: "data"])) callBack(result, Open_im_sdkCreateFaceMessage(methodCall[string: "operationID"], methodCall[int: "index"], methodCall[string: "data"]))
} }
func clearC2CHistoryMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createAdvancedTextMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearC2CHistoryMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"]) let prama = Open_im_sdkCreateAdvancedTextMessage(methodCall[string: "operationID"], methodCall[string: "text"], methodCall[jsonString: "richMessageInfoList"])
callBack(result, prama)
} }
func clearGroupHistoryMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createAdvancedQuoteMessage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearGroupHistoryMessage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"]) 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){ func searchLocalMessages(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSearchLocalMessages(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "filter"]) Open_im_sdkSearchLocalMessages(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "filter"])
} }
func deleteMessageFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func clearConversationAndDeleteAllMsg(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteMessageFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString()) 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"])
} }
func deleteAllMsgFromLocal(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func setMessageLocalEx(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteAllMsgFromLocal(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkSetMessageLocalEx(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[string: "clientMsgID"], methodCall[string: "localEx"])
} }
func deleteAllMsgFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { func setAppBadge(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteAllMsgFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkSetAppBadge(BaseCallback(result: result), methodCall[string: "operationID"], Int32(methodCall[int64: "count"]))
}
func markMessageAsReadByConID(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkMarkMessageAsReadByConID(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"], methodCall[jsonString: "messageIDList"])
} }
func clearC2CHistoryMessageFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func sendMessageNotOss(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearC2CHistoryMessageFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"]) let sendMsgProgressListener: SendMsgProgressListener = SendMsgProgressListener(channel: channel,result: result,methodCall: methodCall)
Open_im_sdkSendMessageNotOss(sendMsgProgressListener, methodCall[string: "operationID"], methodCall[jsonString: "message"], methodCall[string: "userID"], methodCall[string: "groupID"], methodCall[jsonString: "offlinePushInfo"], methodCall[bool: "isOnlineOnly"])
} }
func clearGroupHistoryMessageFromLocalAndSvr(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createImageMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkClearGroupHistoryMessageFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"]) callBack(result, Open_im_sdkCreateImageMessageByURL(methodCall[string: "operationID"], methodCall[string: "sourcePath"], methodCall[jsonString: "sourcePicture"], methodCall[jsonString: "bigPicture"], methodCall[jsonString: "snapshotPicture"]))
} }
func getHistoryMessageListReverse(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func createSoundMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetHistoryMessageListReverse(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString()) callBack(result, Open_im_sdkCreateSoundMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "soundElem"]))
} }
public class SendMsgProgressListener: NSObject, Open_im_sdk_callbackSendMsgCallBackProtocol { func createVideoMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
private let channel: FlutterMethodChannel callBack(result, Open_im_sdkCreateVideoMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "videoElem"]))
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 createFileMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
private let channel: FlutterMethodChannel callBack(result, Open_im_sdkCreateFileMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "fileElem"]))
private let id: String }
init(channel: FlutterMethodChannel, id: String) { func setCustomBusinessListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
self.channel = channel Open_im_sdkSetCustomBusinessListener(CustomBusinessListener(channel: channel))
self.id = id callBack(result)
} }
}
public func onRecvC2CReadReceipt(_ msgReceiptList: String?) {
var values: [String: Any] = [:] public class SendMsgProgressListener: NSObject, Open_im_sdk_callbackSendMsgCallBackProtocol {
values["id"] = id private let channel: FlutterMethodChannel
values["c2cMessageReadReceipt"] = msgReceiptList private let result: FlutterResult
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvC2CReadReceipt", errCode: nil, errMsg: nil, data: values) private let call: FlutterMethodCall
}
init(channel: FlutterMethodChannel, result: @escaping FlutterResult, methodCall: FlutterMethodCall) {
public func onRecvGroupReadReceipt(_ groupMsgReceiptList: String?) { self.channel = channel
var values: [String: Any] = [:] self.result = result
values["id"] = id self.call = methodCall
values["groupMessageReadReceipt"] = groupMsgReceiptList }
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvGroupReadReceipt", errCode: nil, errMsg: nil, data: values)
} public func onError(_ errCode: Int32, errMsg: String?) {
DispatchQueue.main.async { self.result(FlutterError(code: "\(errCode)", message: errMsg, details: nil)) }
public func onRecvMessageRevoked(_ msgId: String?) { }
var values: [String: Any] = [:]
values["id"] = id public func onProgress(_ progress: Int) {
values["revokedMessage"] = msgId var values: [String: Any] = [:]
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvMessageRevoked", errCode: nil, errMsg: nil, data: values) let message = call[dict: "message"]
} values["clientMsgID"] = message["clientMsgID"]
values["progress"] = progress
public func onRecvNewMessage(_ message: String?) { CommonUtil.emitEvent(channel: channel, method: "msgSendProgressListener", type: "onProgress", errCode: nil, errMsg: nil, data: values)
var values: [String: Any] = [:] }
values["id"] = id
values["newMessage"] = message public func onSuccess(_ data: String?) {
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvNewMessage", errCode: nil, errMsg: nil, data: values) 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 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 func onRecvOnlineOnlyMessage(_ message: String?) {
var values: [String: Any] = [:]
values["id"] = id
values["message"] = message
CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvOnlineOnlyMessage", 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

@@ -1,59 +0,0 @@
import Foundation
import OpenIMCore
public class OrganizationManager: BaseServiceManager {
public override func registerHandlers() {
super.registerHandlers()
self["setOrganizationListener"] = setOrganizationListener
self["getSubDepartment"] = getSubDepartment
self["getDepartmentMember"] = getDepartmentMember
self["getUserInDepartment"] = getUserInDepartment
self["getDepartmentMemberAndSubDepartment"] = getDepartmentMemberAndSubDepartment
self["getDepartmentInfo"] = getDepartmentInfo
self["searchOrganization"] = searchOrganization
}
func setOrganizationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetOrganizationListener(OrganizationListener(channel: channel))
callBack(result)
}
func getSubDepartment(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetSubDepartment(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "departmentID"], methodCall[int: "offset"], methodCall[int: "count"])
}
func getDepartmentMember(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetDepartmentMember(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "departmentID"], methodCall[int: "offset"], methodCall[int: "count"])
}
func getUserInDepartment(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetUserInDepartment(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "userID"])
}
func getDepartmentMemberAndSubDepartment(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetDepartmentMemberAndSubDepartment(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "departmentID"])
}
func getDepartmentInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetDepartmentInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "departmentID"])
}
func searchOrganization(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkSearchOrganization(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParams"], methodCall[int: "offset"], methodCall[int: "count"])
}
}
public class OrganizationListener: NSObject, Open_im_sdk_callbackOnOrganizationListenerProtocol {
private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) {
self.channel = channel
}
public func onOrganizationUpdated() {
CommonUtil.emitEvent(channel: self.channel, method: "organizationListener", type: "onOrganizationUpdated", errCode: nil, errMsg: nil, data: nil)
}
}

View File

@@ -1,86 +0,0 @@
import Foundation
import OpenIMCore
public class SignalingManager: BaseServiceManager {
public override func registerHandlers() {
super.registerHandlers()
self["setSignalingListener"] = setSignalingListener
self["signalingInvite"] = signalingInvite
self["signalingInviteInGroup"] = signalingInviteInGroup
self["signalingAccept"] = signalingAccept
self["signalingReject"] = signalingReject
self["signalingCancel"] = signalingCancel
self["signalingHungUp"] = signalingHungUp
}
func setSignalingListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetSignalingListener(SignalingListener(channel: channel))
callBack(result)
}
func signalingInvite(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingInvite(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"])
}
func signalingInviteInGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingInviteInGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"])
}
func signalingAccept(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingAccept(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"])
}
func signalingReject(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingReject(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"])
}
func signalingCancel(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingCancel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"])
}
func signalingHungUp(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingHungUp(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"])
}
}
public class SignalingListener: NSObject, Open_im_sdk_callbackOnSignalingListenerProtocol {
private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) {
self.channel = channel
}
public func onInvitationCancelled(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInvitationCancelled", errCode: nil, errMsg: nil, data: s)
}
public func onInvitationTimeout(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInvitationTimeout", errCode: nil, errMsg: nil, data: s)
}
public func onInviteeAccepted(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeAccepted", errCode: nil, errMsg: nil, data: s)
}
public func onInviteeAccepted(byOtherDevice s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeAcceptedByOtherDevice", errCode: nil, errMsg: nil, data: s)
}
public func onInviteeRejected(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeRejected", errCode: nil, errMsg: nil, data: s)
}
public func onInviteeRejected(byOtherDevice s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeRejectedByOtherDevice", errCode: nil, errMsg: nil, data: s)
}
public func onReceiveNewInvitation(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onReceiveNewInvitation", errCode: nil, errMsg: nil, data: s)
}
public func onHangUp(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onHangUp", errCode: nil, errMsg: nil, data: s)
}
}

View File

@@ -9,6 +9,10 @@ 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
} }
func setUserListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setUserListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -17,7 +21,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,9 +31,37 @@ 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"])
}
} }
public class UserListener: NSObject, Open_im_sdk_callbackOnUserListenerProtocol { public class UserListener: NSObject, Open_im_sdk_callbackOnUserListenerProtocol {
public func onUserCommandAdd(_ userCommand: String?) {
CommonUtil.emitEvent(channel: self.channel, method: "userListener", type: "onUserCommandAdd", errCode: nil, errMsg: nil, data: userCommand)
}
public func onUserCommandDelete(_ userCommand: String?) {
CommonUtil.emitEvent(channel: self.channel, method: "userListener", type: "onUserCommandDelete", errCode: nil, errMsg: nil, data: userCommand)
}
public func onUserCommandUpdate(_ userCommand: String?) {
CommonUtil.emitEvent(channel: self.channel, method: "userListener", type: "onUserCommandUpdate", errCode: nil, errMsg: nil, data: userCommand)
}
private let channel:FlutterMethodChannel private let channel:FlutterMethodChannel
@@ -40,4 +72,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

@@ -1,44 +0,0 @@
import Foundation
import OpenIMCore
public class WorkMomentsManager: BaseServiceManager {
public override func registerHandlers() {
super.registerHandlers()
self["setWorkMomentsListener"] = setWorkMomentsListener
self["getWorkMomentsUnReadCount"] = getWorkMomentsUnReadCount
self["getWorkMomentsNotification"] = getWorkMomentsNotification
self["clearWorkMomentsNotification"] = clearWorkMomentsNotification
}
func setWorkMomentsListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetWorkMomentsListener(WorkMomentsListener(channel: channel))
callBack(result)
}
func getWorkMomentsUnReadCount(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetWorkMomentsUnReadCount(BaseCallback(result: result), methodCall[string: "operationID"])
}
func getWorkMomentsNotification(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkGetWorkMomentsNotification(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[int: "offset"], methodCall[int: "count"])
}
func clearWorkMomentsNotification(methodCall: FlutterMethodCall, result: @escaping FlutterResult) {
Open_im_sdkClearWorkMomentsNotification(BaseCallback(result: result), methodCall[string: "operationID"])
}
}
public class WorkMomentsListener: NSObject, Open_im_sdk_callbackOnWorkMomentsListenerProtocol {
private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) {
self.channel = channel
}
public func onRecvNewNotification() {
CommonUtil.emitEvent(channel: self.channel, method: "workMomentsListener", type: "OnRecvNewNotification", errCode: nil, errMsg: nil, data: nil)
}
}

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

@@ -8,9 +8,6 @@ public class SwiftFlutterOpenimSdkPlugin: NSObject, FlutterPlugin {
let messageManager: MessageManager let messageManager: MessageManager
let groupManager: GroupManager let groupManager: GroupManager
let userManger: UserManager let userManger: UserManager
let signalingManager: SignalingManager
let workMomentsManager: WorkMomentsManager
let organizationManager: OrganizationManager
init(channel: FlutterMethodChannel) { init(channel: FlutterMethodChannel) {
self.imManager = IMMananger(channel: channel) self.imManager = IMMananger(channel: channel)
@@ -19,9 +16,6 @@ public class SwiftFlutterOpenimSdkPlugin: NSObject, FlutterPlugin {
self.messageManager = MessageManager(channel: channel) self.messageManager = MessageManager(channel: channel)
self.groupManager = GroupManager(channel: channel) self.groupManager = GroupManager(channel: channel)
self.userManger = UserManager(channel: channel) self.userManger = UserManager(channel: channel)
self.signalingManager = SignalingManager(channel: channel)
self.workMomentsManager = WorkMomentsManager(channel: channel)
self.organizationManager = OrganizationManager(channel: channel)
} }
public static func register(with registrar: FlutterPluginRegistrar) { public static func register(with registrar: FlutterPluginRegistrar) {
@@ -45,12 +39,6 @@ public class SwiftFlutterOpenimSdkPlugin: NSObject, FlutterPlugin {
groupManager.handleMethod(call: call, result: result) groupManager.handleMethod(call: call, result: result)
case "userManager": case "userManager":
userManger.handleMethod(call: call, result: result) userManger.handleMethod(call: call, result: result)
case "signalingManager":
signalingManager.handleMethod(call: call, result: result)
case "workMomentsManager":
workMomentsManager.handleMethod(call: call, result: result)
case "organizationManager":
organizationManager.handleMethod(call: call, result: result)
default: default:
print("Handle ManagerName Error: \(managerName) not found") print("Handle ManagerName Error: \(managerName) not found")
} }

View File

@@ -15,11 +15,13 @@ 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.dependency 'OpenIMSDKCore','2.0.9' s.dependency 'OpenIMSDKCore','3.8.1'
s.static_framework = true s.static_framework = true
# s.vendored_frameworks = 'Framework/*.framework' s.library = 'resolv'
# s.vendored_frameworks = 'Framework/*.xcframework'
# 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'

BIN
lib/.DS_Store vendored

Binary file not shown.

View File

@@ -3,38 +3,37 @@ 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_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/connect_listener.dart'; export 'src/listener/connect_listener.dart';
export 'src/listener/conversation_listener.dart'; export 'src/listener/conversation_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/listener_for_service.dart';
export 'src/listener/msg_send_progress_listener.dart'; export 'src/listener/msg_send_progress_listener.dart';
export 'src/listener/organization_listener.dart'; export 'src/listener/upload_file_listener.dart';
export 'src/listener/signaling_listener.dart';
export 'src/listener/user_listener.dart'; export 'src/listener/user_listener.dart';
export 'src/listener/workmoments_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_organization_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/manager/im_workmoments_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/notification_info.dart';
export 'src/models/organization_info.dart';
export 'src/models/search_info.dart'; export 'src/models/search_info.dart';
export 'src/models/signaling_info.dart';
export 'src/models/user_info.dart'; export 'src/models/user_info.dart';
export 'src/models/workmoments_info.dart'; export 'src/models/input_status_changed_data.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,5 +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; static const notification = 4;
} }

View File

@@ -1,7 +1,17 @@
/// Conversation Strong Hint Content
class GroupAtType { class GroupAtType {
/// Cancel all hints, equivalent to calling the resetConversationGroupAtType method
static const atNormal = 0; static const atNormal = 0;
/// @ me hint
static const atMe = 1; static const atMe = 1;
/// @ all hint
static const atAll = 2; static const atAll = 2;
/// @ all and @ me hint
static const atAllAtMe = 3; static const atAllAtMe = 3;
/// Group notification hint
static const groupNotification = 4; 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,13 +1,19 @@
/// 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 final workMomentsListener = "workMomentsListener"; static const workMomentsListener = "workMomentsListener";
static final organizationListener = "organizationListener"; static const organizationListener = "organizationListener";
static const customBusinessListener = "customBusinessListener";
static const messageKvInfoListener = "messageKvInfoListener";
static const listenerForService = "listenerForService";
static const uploadFileListener = "uploadFileListener";
static const uploadLogsListener = "uploadLogsListener";
} }

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,68 +1,176 @@
/// Message Types
class MessageType { class MessageType {
/// /// Normal text
static const text = 101; static const text = 101;
static const picture = 102;
static const voice = 103;
static const video = 104;
static const file = 105;
static const at_text = 106;
static const merger = 107;
static const card = 108;
static const location = 109;
static const custom = 110;
static const revoke = 111;
static const has_read_receipt = 112;
static const typing = 113;
static const quote = 114;
static const custom_face = 115;
/// /// Picture
static const picture = 102;
/// Voice
static const voice = 103;
/// Video
static const video = 104;
/// File
static const file = 105;
/// @ Message
static const atText = 106;
/// Merge
static const merger = 107;
/// Business Card
static const card = 108;
/// Location
static const location = 109;
/// Custom
static const custom = 110;
/// Typing
static const typing = 113;
/// Quote Reply
static const quote = 114;
/// Custom Emoji
static const customFace = 115;
/// Group Message Has Read Receipt (Deprecated in v3)
@Deprecated('Use GroupHasReadReceiptNotification instead')
static const groupHasReadReceipt = 116;
/// Rich Text Message
static const advancedText = 117;
static const customMsgNotTriggerConversation = 119;
static const customMsgOnlineOnly = 120;
/// Notification Types
static const notificationBegin = 1000; static const notificationBegin = 1000;
static const friendNotificationBegin = 1200; static const friendNotificationBegin = 1200;
/// Friend Request Accepted
static const friendApplicationApprovedNotification = 1201; static const friendApplicationApprovedNotification = 1201;
/// Friend Request Rejected
static const friendApplicationRejectedNotification = 1202; static const friendApplicationRejectedNotification = 1202;
/// Friend Request
static const friendApplicationNotification = 1203; static const friendApplicationNotification = 1203;
/// Friend Added
static const friendAddedNotification = 1204; static const friendAddedNotification = 1204;
/// Friend Deleted
static const friendDeletedNotification = 1205; static const friendDeletedNotification = 1205;
/// Set Friend Remark
static const friendRemarkSetNotification = 1206; static const friendRemarkSetNotification = 1206;
/// Friend Added to Blacklist
static const blackAddedNotification = 1207; static const blackAddedNotification = 1207;
/// Removed from Blacklist
static const blackDeletedNotification = 1208; static const blackDeletedNotification = 1208;
static const friendNotificationEnd = 1299; static const friendNotificationEnd = 1299;
/// Conversation Change
static const conversationChangeNotification = 1300; static const conversationChangeNotification = 1300;
static const userNotificationBegin = 1301; static const userNotificationBegin = 1301;
/// User Information Changed
static const userInfoUpdatedNotification = 1303; static const userInfoUpdatedNotification = 1303;
static const userNotificationEnd = 1399; static const userNotificationEnd = 1399;
/// OA Notification
static const oaNotification = 1400; static const oaNotification = 1400;
static const groupNotificationBegin = 1500; static const groupNotificationBegin = 1500;
/// Group Created
static const groupCreatedNotification = 1501; static const groupCreatedNotification = 1501;
/// Group Info Set
static const groupInfoSetNotification = 1502; static const groupInfoSetNotification = 1502;
/// Join Group Application
static const joinGroupApplicationNotification = 1503; static const joinGroupApplicationNotification = 1503;
/// Group Member Quit
static const memberQuitNotification = 1504; static const memberQuitNotification = 1504;
/// Group Application Accepted
static const groupApplicationAcceptedNotification = 1505; static const groupApplicationAcceptedNotification = 1505;
/// Group Application Rejected
static const groupApplicationRejectedNotification = 1506; static const groupApplicationRejectedNotification = 1506;
/// Group Owner Transferred
static const groupOwnerTransferredNotification = 1507; static const groupOwnerTransferredNotification = 1507;
/// Member Kicked from Group
static const memberKickedNotification = 1508; static const memberKickedNotification = 1508;
/// Member Invited to Group
static const memberInvitedNotification = 1509; static const memberInvitedNotification = 1509;
/// Member Entered Group
static const memberEnterNotification = 1510; static const memberEnterNotification = 1510;
/// Dismiss Group
static const dismissGroupNotification = 1511; static const dismissGroupNotification = 1511;
static const groupNotificationEnd = 1599; static const groupNotificationEnd = 1599;
/// Group Member Muted
static const groupMemberMutedNotification = 1512; static const groupMemberMutedNotification = 1512;
/// Group Member Cancel Muted
static const groupMemberCancelMutedNotification = 1513; static const groupMemberCancelMutedNotification = 1513;
/// Group Muted
static const groupMutedNotification = 1514; static const groupMutedNotification = 1514;
/// Cancel Group Muted
static const groupCancelMutedNotification = 1515; static const groupCancelMutedNotification = 1515;
/// Group Member Information Changed
static const groupMemberInfoChangedNotification = 1516; static const groupMemberInfoChangedNotification = 1516;
static const signalingNotificationBegin = 1600; /// Group Member Set to Admin
static const signalingNotification = 1601; static const groupMemberSetToAdminNotification = 1517;
static const signalingNotificationEnd = 1699;
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 burnAfterReadingNotification = 1701;
static const notificationEnd = 2000; 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;
}

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