|
- private static final String APP_SECRET = "9a2efcae3c6038b5450b0c2ef3187b1f";
|
28
|
|
- private String wxCode;
|
|
24
|
+ private String unionid;
|
|
25
|
+ private String token;
|
29
|
26
|
|
30
|
|
- public LoginInteractor(String wxCode, InteractorListener<String> listener) {
|
31
|
|
- this.wxCode = wxCode;
|
|
27
|
+ public LoginInteractor(String unionid, String token, InteractorListener<String> listener) {
|
|
28
|
+ this.unionid = unionid;
|
|
29
|
+ this.token = token;
|
32
|
30
|
this.listener = listener;
|
33
|
31
|
}
|
34
|
32
|
|
35
|
33
|
@Override
|
36
|
34
|
public void startJob() {
|
37
|
|
- fetchToken();
|
38
|
|
- }
|
39
|
|
-
|
40
|
|
- @Override
|
41
|
|
- public void cancelJob() {
|
42
|
|
- cancelJob(loginTask);
|
43
|
|
- cancelJob(fetchTokenTask);
|
44
|
|
- cancelJob(fetchUserInfoTask);
|
45
|
|
- }
|
46
|
|
-
|
47
|
|
- private void cancelJob(HttpPostTask task) {
|
48
|
|
- if (task == null) {
|
49
|
|
- return;
|
50
|
|
- }
|
51
|
|
- if (task.getStatus() == AsyncTask.Status.RUNNING) {
|
52
|
|
- task.cancel(true);
|
53
|
|
- }
|
54
|
|
- }
|
55
|
|
-
|
56
|
|
- private void fetchToken() {
|
57
|
|
-
|
58
|
|
- final String tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APP_ID
|
59
|
|
- + "&secret=" + APP_SECRET + "&code=" + wxCode + "&grant_type=authorization_code";
|
60
|
|
- LogHelper.d("czy","interactor fetchToken with url = "+tokenUrl);
|
61
|
|
- fetchTokenTask = new HttpPostTask(null) {
|
62
|
|
-
|
63
|
|
- String token;
|
64
|
|
- String openId;
|
65
|
|
-
|
66
|
|
- @Override
|
67
|
|
- protected boolean parseResponse(String response) {
|
68
|
|
- LogHelper.d("czy","interactor fetchToken parseResponse response = "+response);
|
69
|
|
- try {
|
70
|
|
- JSONObject json = new JSONObject(response);
|
71
|
|
- token = json.getString("access_token");
|
72
|
|
- openId = json.getString("openid");
|
73
|
|
- return true;
|
74
|
|
- } catch (Exception e) {
|
75
|
|
- e.printStackTrace();
|
76
|
|
- }
|
77
|
|
- return false;
|
78
|
|
- }
|
79
|
|
-
|
80
|
|
- @Override
|
81
|
|
- protected void onPostSuccess() {
|
82
|
|
- super.onPostSuccess();
|
83
|
|
- fetchUserInfo(token, openId);
|
84
|
|
- }
|
85
|
|
-
|
86
|
|
- @Override
|
87
|
|
- protected void onPostFail() {
|
88
|
|
- super.onPostFail();
|
89
|
|
- }
|
90
|
|
- };
|
91
|
|
- fetchTokenTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), tokenUrl);
|
92
|
|
- }
|
93
|
|
-
|
94
|
|
- private void fetchUserInfo(String token, String openId) {
|
95
|
|
-
|
96
|
|
- String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid=" + openId;
|
97
|
|
- LogHelper.d("czy","interactor fetchUserInfo with url = "+userInfoUrl);
|
98
|
|
- fetchUserInfoTask = new HttpPostTask(null) {
|
99
|
|
- HashMap<String, String> params;
|
100
|
|
-
|
101
|
|
- @Override
|
102
|
|
- protected boolean parseResponse(String response) {
|
103
|
|
- LogHelper.d("czy","interactor fetchUserInfo parseResponse response = "+response);
|
104
|
|
- try {
|
105
|
|
- JSONObject json = new JSONObject(response);
|
106
|
|
- params = new HashMap<>();
|
107
|
|
- params.put("unionid", json.getString("unionid"));
|
108
|
|
- params.put("openid", json.getString("openid"));
|
109
|
|
- params.put("sex", json.getString("sex"));
|
110
|
|
- params.put("nickname", json.getString("nickname"));
|
111
|
|
- params.put("headimgurl", json.getString("headimgurl"));
|
112
|
|
- params.put("country", json.getString("country"));
|
113
|
|
- params.put("province", json.getString("province"));
|
114
|
|
- params.put("city", json.getString("city"));
|
115
|
|
- return true;
|
116
|
|
- } catch (Exception e) {
|
117
|
|
- e.printStackTrace();
|
118
|
|
- }
|
119
|
|
- return false;
|
120
|
|
- }
|
121
|
|
-
|
122
|
|
- @Override
|
123
|
|
- protected void onPostSuccess() {
|
124
|
|
- super.onPostSuccess();
|
125
|
|
- wxLogin(params);
|
126
|
|
- }
|
127
|
|
-
|
128
|
|
- @Override
|
129
|
|
- protected void onPostFail() {
|
130
|
|
- super.onPostFail();
|
131
|
|
- }
|
132
|
|
- };
|
133
|
|
- fetchUserInfoTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), userInfoUrl);
|
134
|
|
- }
|
135
|
|
-
|
136
|
|
- private void login() {
|
137
|
35
|
HashMap<String, String> params = new HashMap<>();
|
138
|
|
- params.put("username", "chengzhenyu");
|
139
|
|
- params.put("password", "paiai");
|
|
36
|
+ params.put("unionid", unionid);
|
|
37
|
+ params.put("token", token);
|
140
|
38
|
|
141
|
39
|
loginTask = new HttpPostTask(params) {
|
142
|
40
|
|
143
|
41
|
String lensmanId;
|
144
|
42
|
String message;
|
145
|
|
-
|
146
|
|
- @Override
|
147
|
|
- protected boolean parseResponse(String response) {
|
148
|
|
- try {
|
149
|
|
- JSONObject json = new JSONObject(response);
|
150
|
|
- int status = json.getInt("status");
|
151
|
|
- if (status == 200) {
|
152
|
|
- JSONObject info = json.getJSONObject("data");
|
153
|
|
- lensmanId = info.getString("user_id");
|
154
|
|
- return true;
|
155
|
|
- } else {
|
156
|
|
- message = json.getString("message");
|
157
|
|
- }
|
158
|
|
- } catch (Exception e) {
|
159
|
|
- e.printStackTrace();
|
160
|
|
- }
|
161
|
|
- return false;
|
162
|
|
- }
|
163
|
|
-
|
164
|
|
- @Override
|
165
|
|
- protected void onPostFail() {
|
166
|
|
- super.onPostFail();
|
167
|
|
- listener.onInteractFail(message);
|
168
|
|
- }
|
169
|
|
-
|
170
|
|
- @Override
|
171
|
|
- protected void onPostSuccess() {
|
172
|
|
- super.onPostSuccess();
|
173
|
|
- listener.onInteractSuccess(lensmanId);
|
174
|
|
- }
|
175
|
|
- };
|
176
|
|
- loginTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.LOGIN_URL);
|
177
|
|
- }
|
178
|
|
-
|
179
|
|
- private void wxLogin(HashMap<String, String> params) {
|
180
|
|
-
|
181
|
|
- loginTask = new HttpPostTask(params) {
|
182
|
|
-
|
183
|
|
- String lensmanId;
|
184
|
43
|
String userName;
|
185
|
|
- String message;
|
186
|
44
|
|
187
|
45
|
@Override
|
188
|
46
|
protected boolean parseResponse(String response) {
|
189
|
|
- LogHelper.d("czy","interactor wxLogin parseResponse response = "+response);
|
190
|
47
|
try {
|
191
|
48
|
JSONObject json = new JSONObject(response);
|
192
|
49
|
int status = json.getInt("status");
|
193
|
50
|
if (status == 200) {
|
194
|
51
|
JSONObject info = json.getJSONObject("data");
|
195
|
52
|
lensmanId = info.getString("user_id");
|
196
|
|
- userName = info.getString("nickname");
|
|
53
|
+ userName = info.getString("name");
|
|
54
|
+ if(TextUtils.isEmpty(userName)){
|
|
55
|
+ userName = info.getString("nickname");
|
|
56
|
+ }
|
|
57
|
+ if(TextUtils.isEmpty(userName)){
|
|
58
|
+ userName = info.getString("username");
|
|
59
|
+ }
|
197
|
60
|
return true;
|
198
|
61
|
} else {
|
199
|
|
- message = json.getString("message");
|
|
62
|
+ message = json.getString("description");
|
200
|
63
|
}
|
201
|
64
|
} catch (Exception e) {
|
202
|
65
|
e.printStackTrace();
|
|
|
@@ -218,7 +81,22 @@ public class LoginInteractor implements BaseInteractor {
|
218
|
81
|
Preferences.getInstance().setUserName(userName);
|
219
|
82
|
}
|
220
|
83
|
};
|
221
|
|
- loginTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.WX_LOGIN_URL);
|
|
84
|
+ loginTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.BOX_LENSMAN_LOGIN_URL);
|
222
|
85
|
}
|
223
|
86
|
|
|
87
|
+ @Override
|
|
88
|
+ public void cancelJob() {
|
|
89
|
+ cancelJob(loginTask);
|
|
90
|
+ }
|
|
91
|
+
|
|
92
|
+ private void cancelJob(HttpPostTask task) {
|
|
93
|
+ if (task == null) {
|
|
94
|
+ return;
|
|
95
|
+ }
|
|
96
|
+ if (task.getStatus() == AsyncTask.Status.RUNNING) {
|
|
97
|
+ task.cancel(true);
|
|
98
|
+ }
|
|
99
|
+ }
|
|
100
|
+
|
|
101
|
+
|
224
|
102
|
}
|
|
|
@@ -1,13 +1,9 @@
|
1
|
1
|
package ai.pai.lensman.login;
|
2
|
2
|
|
3
|
|
-import android.content.Context;
|
4
|
|
-import android.text.TextUtils;
|
5
|
|
-
|
6
|
3
|
import com.android.common.utils.LogHelper;
|
7
|
|
-import com.tencent.mm.sdk.modelmsg.SendAuth;
|
8
|
|
-import com.tencent.mm.sdk.openapi.IWXAPI;
|
9
|
|
-import com.tencent.mm.sdk.openapi.WXAPIFactory;
|
10
|
4
|
|
|
5
|
+import ai.pai.lensman.App;
|
|
6
|
+import ai.pai.lensman.R;
|
11
|
7
|
import ai.pai.lensman.base.BaseInteractor;
|
12
|
8
|
import ai.pai.lensman.db.Preferences;
|
13
|
9
|
|
|
|
@@ -16,39 +12,24 @@ import ai.pai.lensman.db.Preferences;
|
16
|
12
|
*/
|
17
|
13
|
public class LoginPresenter implements LoginContract.Presenter,BaseInteractor.InteractorListener<String> {
|
18
|
14
|
|
19
|
|
- private IWXAPI api;
|
20
|
|
- private Context context;
|
21
|
15
|
private LoginContract.View view;
|
22
|
16
|
private LoginInteractor interactor;
|
23
|
|
- private static final String APP_ID = "wxf4832536d9dda70a";
|
24
|
17
|
|
25
|
|
- public LoginPresenter(Context context,LoginContract.View view){
|
|
18
|
+ public LoginPresenter(LoginContract.View view){
|
26
|
19
|
this.view = view;
|
27
|
|
- this.context = context;
|
28
|
|
- api = WXAPIFactory.createWXAPI(context, APP_ID, true);
|
29
|
|
- api.registerApp(APP_ID);
|
30
|
20
|
}
|
31
|
21
|
|
32
|
22
|
@Override
|
33
|
|
- public void login() {
|
|
23
|
+ public void login(String unionid, String token) {
|
34
|
24
|
LogHelper.d("czy","presenter login");
|
35
|
|
-
|
36
|
|
- SendAuth.Req req = new SendAuth.Req();
|
37
|
|
- req.scope = "snsapi_userinfo";
|
38
|
|
- req.state = "paiai_for_lensman";
|
39
|
|
- api.sendReq(req);
|
|
25
|
+ view.showProgressView();
|
|
26
|
+ interactor = new LoginInteractor(unionid,token,this);
|
|
27
|
+ interactor.startJob();
|
40
|
28
|
}
|
41
|
29
|
|
42
|
30
|
@Override
|
43
|
31
|
public void start() {
|
44
|
|
- String wxCode = Preferences.getInstance().getWXCode();
|
45
|
|
- LogHelper.d("czy","presenter start with wx code = "+wxCode);
|
46
|
|
- if(!TextUtils.isEmpty(wxCode)){
|
47
|
|
- view.showProgressView();
|
48
|
|
- interactor = new LoginInteractor(wxCode,this);
|
49
|
|
- interactor.startJob();
|
50
|
|
- Preferences.getInstance().setWXCode("");
|
51
|
|
- }
|
|
32
|
+
|
52
|
33
|
}
|
53
|
34
|
|
54
|
35
|
@Override
|
|
|
@@ -62,6 +43,7 @@ public class LoginPresenter implements LoginContract.Presenter,BaseInteractor.In
|
62
|
43
|
@Override
|
63
|
44
|
public void onInteractSuccess(String result) {
|
64
|
45
|
view.hideProgressView();
|
|
46
|
+ view.showLoginHint(App.getAppContext().getString(R.string.login_success));
|
65
|
47
|
Preferences.getInstance().setLensManId(result);
|
66
|
48
|
view.jumpMain();
|
67
|
49
|
}
|
|
|
@@ -11,8 +11,6 @@ public class UrlContainer {
|
11
|
11
|
|
12
|
12
|
public static final String LOGIN_URL = HOST_URL+"login";
|
13
|
13
|
|
14
|
|
- public static final String SESSION_IDS_CREATE = HOST_URL+"uuid";
|
15
|
|
-
|
16
|
14
|
/**
|
17
|
15
|
* user_id # 用户唯一标识
|
18
|
16
|
* nickname # 用户昵称
|
|
|
@@ -71,9 +69,6 @@ public class UrlContainer {
|
71
|
69
|
|
72
|
70
|
public static final String SERVER_TIME_URL=HOST_URL+"s/server_time";
|
73
|
71
|
|
74
|
|
- /**
|
75
|
|
- * 盒子程序版本信息
|
76
|
|
- */
|
77
|
|
- public static final String BOX_VERSION_URL = HOST_URL+"op/bpversion";
|
|
72
|
+ public static final String BOX_LENSMAN_LOGIN_URL = HOST_URL+"box/loginqr";
|
78
|
73
|
|
79
|
74
|
}
|
|
|
@@ -47,7 +47,7 @@
|
47
|
47
|
android:layout_marginBottom="50dp"
|
48
|
48
|
android:background="@drawable/login_btn_rounded_rect_bg"
|
49
|
49
|
android:gravity="center"
|
50
|
|
- android:text="@string/wx_login"
|
|
50
|
+ android:text="@string/wx_scan_login"
|
51
|
51
|
android:textColor="@color/wx_login_btn_stroke"
|
52
|
52
|
android:textSize="18sp" />
|
53
|
53
|
|
|
|
@@ -12,6 +12,7 @@
|
12
|
12
|
<string name="settings">设置</string>
|
13
|
13
|
<string name="scene">场景%d</string>
|
14
|
14
|
|
|
15
|
+ <string name="wx_scan_login">扫描拍爱公众号授权码</string>
|
15
|
16
|
<string name="wx_login">微信登录</string>
|
16
|
17
|
<string name="agree_protocol">已阅读并同意<u>拍爱用户协议</u></string>
|
17
|
18
|
|
|
|
@@ -143,4 +144,6 @@
|
143
|
144
|
<string name="usb_permission_denied">请检查设备是否已开放root权限</string>
|
144
|
145
|
|
145
|
146
|
<string name="sdcard_error">保存照片失败,请检查手机存储卡</string>
|
|
147
|
+
|
|
148
|
+ <string name="scan_login_qr_error">扫描授权码失败</string>
|
146
|
149
|
</resources>
|