Skip to content

Commit 7f96a8f

Browse files
author
攻玉网络技术部
committed
尝试修改注册方式
1 parent 8233ff4 commit 7f96a8f

File tree

13 files changed

+858
-385
lines changed

13 files changed

+858
-385
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
.packages
55
.pub/
6-
6+
.flutter-plugins-dependencies
77
build/
88
.idea/
99
android/.idea/

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ android {
2828

2929
defaultConfig {
3030
minSdkVersion 16
31-
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
31+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3232
}
3333
lintOptions {
3434
disable 'InvalidPackage'

android/gradle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
org.gradle.jvmargs=-Xmx1536M
2+
android.enableR8=true
3+
android.useAndroidX=true
4+
android.enableJetifier=true

android/src/main/java/cn/smssdk/flutter/MobsmsPlugin.java

Lines changed: 358 additions & 322 deletions
Large diffs are not rendered by default.
Lines changed: 363 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,363 @@
1+
package cn.smssdk.flutter;
2+
3+
import android.os.Handler;
4+
import android.os.Looper;
5+
import android.text.TextUtils;
6+
7+
import org.json.JSONException;
8+
import org.json.JSONObject;
9+
10+
import java.util.ArrayList;
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
14+
import cn.smssdk.EventHandler;
15+
import cn.smssdk.SMSSDK;
16+
import cn.smssdk.utils.SPHelper;
17+
import io.flutter.plugin.common.MethodCall;
18+
import io.flutter.plugin.common.MethodChannel;
19+
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
20+
import io.flutter.plugin.common.MethodChannel.Result;
21+
import io.flutter.plugin.common.PluginRegistry.Registrar;
22+
23+
/** MobsmsPlugin */
24+
public class MobsmsPluginBak implements MethodCallHandler {
25+
private static final String TAG = "MobsmsPlugin";
26+
public static final String CHANNEL = "com.mob.smssdk";
27+
private static final String KEY_CODE = "code";
28+
private static final String KEY_MSG = "msg";
29+
private static final int BRIDGE_ERR = 700;
30+
private static final String ERROR_INTERNAL = "Flutter bridge internal error: ";
31+
32+
/** Plugin registration. */
33+
public static void registerWith(Registrar registrar) {
34+
SMSSDKLog.d("registerWith() called");
35+
final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL);
36+
channel.setMethodCallHandler(new MobsmsPluginBak());
37+
}
38+
39+
@Override
40+
public void onMethodCall(MethodCall call, final Result rst) {
41+
SMSSDKLog.d("onMethodCall. method: " + call.method);
42+
if (call.method.equals("getTextCode")) {
43+
// 注册监听器
44+
EventHandler callback = new EventHandler() {
45+
@Override
46+
public void afterEvent(final int event, final int result, final Object data) {
47+
if (result == SMSSDK.RESULT_COMPLETE) {
48+
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
49+
boolean smart = (Boolean)data;
50+
// callback onSuccess
51+
Map<String, Object> map = new HashMap<>();
52+
map.put("smart", smart);
53+
onSuccess(rst, map);
54+
}
55+
} else {
56+
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
57+
// callback onError
58+
if (data instanceof Throwable) {
59+
Throwable throwable = (Throwable) data;
60+
String msg = throwable.getMessage();
61+
onSdkError(rst, msg);
62+
} else {
63+
String msg = "Sdk returned 'RESULT_ERROR', but the data is NOT an instance of Throwable";
64+
SMSSDKLog.e("getTextCode() internal error: " + msg);
65+
onInternalError(rst, msg);
66+
}
67+
}
68+
}
69+
}
70+
};
71+
// Flutter的Result对象只能返回一次数据,同一个Result对象如果再次提交数据会crash(错误信息:数据已被提交过),所以要把前一次的EventHandler注销掉
72+
// 否则重复调用统一个接口时,smssdk会针对所有EventHandler发送回调,旧的Result对象就会被触发,导致Flutter层crash
73+
SMSSDK.unregisterAllEventHandler();
74+
SMSSDK.registerEventHandler(callback);
75+
76+
String phoneNumber = call.argument("phoneNumber");
77+
String zone = call.argument("zone");
78+
String tempCode = call.argument("tempCode");
79+
SMSSDKLog.d("tempCode: " + tempCode);
80+
SMSSDKLog.d("zone: " + zone);
81+
SMSSDKLog.d("phoneNumber: " + phoneNumber);
82+
SMSSDK.getVerificationCode(tempCode, zone, phoneNumber);
83+
}
84+
else if (call.method.equals("getVoiceCode")) {
85+
// 注册监听器
86+
EventHandler callback = new EventHandler() {
87+
@Override
88+
public void afterEvent(final int event, final int result, final Object data) {
89+
if (result == SMSSDK.RESULT_COMPLETE) {
90+
if (event == SMSSDK.EVENT_GET_VOICE_VERIFICATION_CODE) {
91+
// callback onSuccess
92+
// 此接口data=null
93+
Map<String, Object> map = new HashMap<>();
94+
onSuccess(rst, map);
95+
}
96+
} else {
97+
if (event == SMSSDK.EVENT_GET_VOICE_VERIFICATION_CODE) {
98+
// callback onError
99+
if (data instanceof Throwable) {
100+
Throwable throwable = (Throwable) data;
101+
String msg = throwable.getMessage();
102+
onSdkError(rst, msg);
103+
} else {
104+
String msg = "Sdk returned 'RESULT_ERROR', but the data is NOT an instance of Throwable";
105+
SMSSDKLog.e("getVoiceCode() internal error: " + msg);
106+
onInternalError(rst, msg);
107+
}
108+
}
109+
}
110+
}
111+
};
112+
// Flutter的Result对象只能返回一次数据,同一个Result对象如果再次提交数据会crash(错误信息:数据已被提交过),所以要把前一次的EventHandler注销掉
113+
// 否则重复调用统一个接口时,smssdk会针对所有EventHandler发送回调,旧的Result对象就会被触发,导致Flutter层crash
114+
SMSSDK.unregisterAllEventHandler();
115+
SMSSDK.registerEventHandler(callback);
116+
117+
String phoneNumber = call.argument("phoneNumber");
118+
String zone = call.argument("zone");
119+
SMSSDKLog.d("zone: " + zone);
120+
SMSSDKLog.d("phoneNumber: " + phoneNumber);
121+
SMSSDK.getVoiceVerifyCode(zone, phoneNumber);
122+
}
123+
else if (call.method.equals("commitCode")) {
124+
// 注册监听器
125+
EventHandler callback = new EventHandler() {
126+
@Override
127+
public void afterEvent(final int event, final int result, final Object data) {
128+
if (result == SMSSDK.RESULT_COMPLETE) {
129+
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
130+
// callback onSuccess
131+
// data示例:{country=86, phone=13362206853}
132+
HashMap<String, Object> dataMap = (HashMap<String, Object>)data;
133+
Map<String, Object> map = new HashMap<>();
134+
onSuccess(rst, map);
135+
}
136+
} else {
137+
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
138+
// callback onError
139+
if (data instanceof Throwable) {
140+
Throwable throwable = (Throwable) data;
141+
String msg = throwable.getMessage();
142+
onSdkError(rst, msg);
143+
} else {
144+
String msg = "Sdk returned 'RESULT_ERROR', but the data is NOT an instance of Throwable";
145+
SMSSDKLog.e("commitCode() internal error: " + msg);
146+
onInternalError(rst, msg);
147+
}
148+
}
149+
}
150+
}
151+
};
152+
// Flutter的Result对象只能返回一次数据,同一个Result对象如果再次提交数据会crash(错误信息:数据已被提交过),所以要把前一次的EventHandler注销掉
153+
// 否则重复调用统一个接口时,smssdk会针对所有EventHandler发送回调,旧的Result对象就会被触发,导致Flutter层crash
154+
SMSSDK.unregisterAllEventHandler();
155+
SMSSDK.registerEventHandler(callback);
156+
157+
String phoneNumber = call.argument("phoneNumber");
158+
String zone = call.argument("zone");
159+
String code = call.argument("code");
160+
SMSSDKLog.d("zone: " + zone);
161+
SMSSDKLog.d("phoneNumber: " + phoneNumber);
162+
SMSSDKLog.d("code: " + code);
163+
SMSSDK.submitVerificationCode(zone, phoneNumber, code);
164+
}
165+
else if (call.method.equals("getSupportedCountries")) {
166+
// 注册监听器
167+
EventHandler callback = new EventHandler() {
168+
@Override
169+
public void afterEvent(final int event, final int result, final Object data) {
170+
if (result == SMSSDK.RESULT_COMPLETE) {
171+
if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
172+
// callback onSuccess
173+
// data示例:[{zone=590, rule=^\d+}, {zone=680, rule=^\d+}]
174+
ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>)data;
175+
Map<String, Object> map = new HashMap<String, Object>();
176+
map.put("countries", list);
177+
onSuccess(rst, map);
178+
}
179+
} else {
180+
if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
181+
// callback onError
182+
if (data instanceof Throwable) {
183+
Throwable throwable = (Throwable) data;
184+
String msg = throwable.getMessage();
185+
onSdkError(rst, msg);
186+
} else {
187+
String msg = "Sdk returned 'RESULT_ERROR', but the data is NOT an instance of Throwable";
188+
SMSSDKLog.e("getSupportedCountries() internal error: " + msg);
189+
onInternalError(rst, msg);
190+
}
191+
}
192+
}
193+
}
194+
};
195+
// Flutter的Result对象只能返回一次数据,同一个Result对象如果再次提交数据会crash(错误信息:数据已被提交过),所以要把前一次的EventHandler注销掉
196+
// 否则重复调用统一个接口时,smssdk会针对所有EventHandler发送回调,旧的Result对象就会被触发,导致Flutter层crash
197+
SMSSDK.unregisterAllEventHandler();
198+
SMSSDK.registerEventHandler(callback);
199+
200+
SMSSDK.getSupportedCountries();
201+
}
202+
else if (call.method.equals("getFriends")) {
203+
// 注册监听器
204+
EventHandler callback = new EventHandler() {
205+
@Override
206+
public void afterEvent(final int event, final int result, final Object data) {
207+
if (result == SMSSDK.RESULT_COMPLETE) {
208+
if (event == SMSSDK.EVENT_GET_FRIENDS_IN_APP) {
209+
// callback onSuccess
210+
/* data示例:[{uid=1155310877, phone=17301652905, nickname=SmsSDK_User_1155310877,
211+
* avatar=http://img1.touxiang.cn/uploads/20121224/24-054837_708.jpg, isnew=true}]
212+
*/
213+
ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>)data;
214+
Map<String, Object> map = new HashMap<String, Object>();
215+
map.put("friends", list);
216+
onSuccess(rst, map);
217+
}
218+
} else {
219+
if (event == SMSSDK.EVENT_GET_FRIENDS_IN_APP) {
220+
// callback onError
221+
if (data instanceof Throwable) {
222+
Throwable throwable = (Throwable) data;
223+
String msg = throwable.getMessage();
224+
onSdkError(rst, msg);
225+
} else {
226+
String msg = "Sdk returned 'RESULT_ERROR', but the data is NOT an instance of Throwable";
227+
SMSSDKLog.e("getFriends() internal error: " + msg);
228+
onInternalError(rst, msg);
229+
}
230+
}
231+
}
232+
}
233+
};
234+
// Flutter的Result对象只能返回一次数据,同一个Result对象如果再次提交数据会crash(错误信息:数据已被提交过),所以要把前一次的EventHandler注销掉
235+
// 否则重复调用统一个接口时,smssdk会针对所有EventHandler发送回调,旧的Result对象就会被触发,导致Flutter层crash
236+
SMSSDK.unregisterAllEventHandler();
237+
SMSSDK.registerEventHandler(callback);
238+
239+
SMSSDK.getFriendsInApp();
240+
}
241+
else if (call.method.equals("submitUserInfo")) {
242+
// 注册监听器
243+
EventHandler callback = new EventHandler() {
244+
@Override
245+
public void afterEvent(final int event, final int result, final Object data) {
246+
if (result == SMSSDK.RESULT_COMPLETE) {
247+
if (event == SMSSDK.EVENT_SUBMIT_USER_INFO) {
248+
// callback onSuccess
249+
// data示例:{}
250+
Map<String, Object> map = new HashMap<String, Object>();
251+
onSuccess(rst, map);
252+
}
253+
} else {
254+
if (event == SMSSDK.EVENT_SUBMIT_USER_INFO) {
255+
// callback onError
256+
if (data instanceof Throwable) {
257+
Throwable throwable = (Throwable) data;
258+
String msg = throwable.getMessage();
259+
onSdkError(rst, msg);
260+
} else {
261+
String msg = "Sdk returned 'RESULT_ERROR', but the data is NOT an instance of Throwable";
262+
SMSSDKLog.e("submitUserInfo() internal error: " + msg);
263+
onInternalError(rst, msg);
264+
}
265+
}
266+
}
267+
}
268+
};
269+
// Flutter的Result对象只能返回一次数据,同一个Result对象如果再次提交数据会crash(错误信息:数据已被提交过),所以要把前一次的EventHandler注销掉
270+
// 否则重复调用统一个接口时,smssdk会针对所有EventHandler发送回调,旧的Result对象就会被触发,导致Flutter层crash
271+
SMSSDK.unregisterAllEventHandler();
272+
SMSSDK.registerEventHandler(callback);
273+
274+
String zone = call.argument("country");
275+
String phoneNumber = call.argument("phone");
276+
String uid = call.argument("uid");
277+
String nickname = call.argument("nickname");
278+
String avatar = call.argument("avatar");
279+
280+
SMSSDKLog.d("zone: " + zone);
281+
SMSSDKLog.d("phoneNumber: " + phoneNumber);
282+
SMSSDKLog.d("uid: " + uid);
283+
SMSSDKLog.d("nickname: " + nickname);
284+
SMSSDKLog.d("avatar: " + avatar);
285+
SMSSDK.submitUserInfo(uid, nickname, avatar, zone, phoneNumber);
286+
}
287+
else if (call.method.equals("getVersion")) {
288+
String version = SMSSDK.getVersion();
289+
Map<String, Object> map = new HashMap<>();
290+
map.put("version", version);
291+
onSuccess(rst, map);
292+
}
293+
else if (call.method.equals("enableWarn")) {
294+
boolean isWarn = call.argument("isWarn");
295+
SMSSDKLog.d("isWarn: " + isWarn);
296+
SPHelper.getInstance().setWarnWhenReadContact(isWarn);
297+
Map<String, Object> map = new HashMap<>();
298+
onSuccess(rst, map);
299+
}
300+
else {
301+
rst.notImplemented();
302+
}
303+
}
304+
305+
public static void recycle() {
306+
SMSSDK.unregisterAllEventHandler();
307+
}
308+
309+
private void onSuccess(final Result result, Map<String, Object> ret) {
310+
final Map<String, Object> map = new HashMap<>();
311+
map.put("ret", ret);
312+
new Handler(Looper.getMainLooper()).post(new Runnable() {
313+
@Override
314+
public void run() {
315+
result.success(map);
316+
}
317+
});
318+
}
319+
320+
private void onSdkError(final Result result, String error) {
321+
try {
322+
JSONObject errorJson = new JSONObject(error);
323+
int code = errorJson.optInt("status");
324+
String msg = errorJson.optString("detail");
325+
if (TextUtils.isEmpty(msg)) {
326+
msg = errorJson.optString("error");
327+
}
328+
329+
Map<String, Object> errMap = new HashMap<>();
330+
errMap.put(KEY_CODE, code);
331+
errMap.put(KEY_MSG, msg);
332+
333+
final Map<String, Object> map = new HashMap<>();
334+
map.put("err", errMap);
335+
new Handler(Looper.getMainLooper()).post(new Runnable() {
336+
@Override
337+
public void run() {
338+
result.success(map);
339+
}
340+
});
341+
} catch (JSONException e) {
342+
SMSSDKLog.e("Smssdk Flutter plugin internal error. msg= " + e.getMessage(), e);
343+
onInternalError(result,"Generate JSONObject error");
344+
}
345+
346+
347+
}
348+
349+
private void onInternalError(final Result result, String errMsg) {
350+
Map<String, Object> errMap = new HashMap<>();
351+
errMap.put(KEY_CODE, BRIDGE_ERR);
352+
errMap.put(KEY_MSG, ERROR_INTERNAL + errMsg);
353+
354+
final Map<String, Object> map = new HashMap<>();
355+
map.put("err", errMap);
356+
new Handler(Looper.getMainLooper()).post(new Runnable() {
357+
@Override
358+
public void run() {
359+
result.success(map);
360+
}
361+
});
362+
}
363+
}

0 commit comments

Comments
 (0)