mirror of
https://github.com/RxReader/tencent_kit.git
synced 2025-05-20 08:47:23 +08:00
优化获取用户信息函数
This commit is contained in:
@ -5,3 +5,7 @@
|
||||
## 0.1.0 - 2019.3.19
|
||||
|
||||
* 规范 fake_tencent 代码
|
||||
|
||||
## 0.2.0 - 2019.3.26
|
||||
|
||||
* 不再自动设置 AccessToken
|
||||
|
@ -78,6 +78,10 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
||||
|
||||
private static final String ARGUMENT_KEY_APPID = "appId";
|
||||
private static final String ARGUMENT_KEY_SCOPE = "scope";
|
||||
private static final String ARGUMENT_KEY_OPENID = "openId";
|
||||
private static final String ARGUMENT_KEY_ACCESSTOKEN = "accessToken";
|
||||
private static final String ARGUMENT_KEY_EXPIRESIN = "expiresIn";
|
||||
private static final String ARGUMENT_KEY_CREATEAT = "createAt";
|
||||
private static final String ARGUMENT_KEY_SCENE = "scene";
|
||||
private static final String ARGUMENT_KEY_TITLE = "title";
|
||||
private static final String ARGUMENT_KEY_SUMMARY = "summary";
|
||||
@ -94,6 +98,7 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
||||
private static final String ARGUMENT_KEY_RESULT_OPENID = "openid";
|
||||
private static final String ARGUMENT_KEY_RESULT_ACCESS_TOKEN = "access_token";
|
||||
private static final String ARGUMENT_KEY_RESULT_EXPIRES_IN = "expires_in";
|
||||
private static final String ARGUMENT_KEY_RESULT_CREATE_AT = "create_at";
|
||||
|
||||
private static final String SCHEME_FILE = "file";
|
||||
|
||||
@ -152,8 +157,6 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
||||
}
|
||||
|
||||
private IUiListener loginListener = new IUiListener() {
|
||||
|
||||
|
||||
@Override
|
||||
public void onComplete(Object o) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
@ -165,14 +168,14 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
||||
if (ret == TencentRetCode.RET_SUCCESS) {
|
||||
String openId = !object.isNull(ARGUMENT_KEY_RESULT_OPENID) ? object.getString(ARGUMENT_KEY_RESULT_OPENID) : null;
|
||||
String accessToken = !object.isNull(ARGUMENT_KEY_RESULT_ACCESS_TOKEN) ? object.getString(ARGUMENT_KEY_RESULT_ACCESS_TOKEN) : null;
|
||||
long expiresIn = !object.isNull(ARGUMENT_KEY_RESULT_EXPIRES_IN) ? object.getLong(ARGUMENT_KEY_RESULT_EXPIRES_IN) : 0;
|
||||
int expiresIn = !object.isNull(ARGUMENT_KEY_RESULT_EXPIRES_IN) ? object.getInt(ARGUMENT_KEY_RESULT_EXPIRES_IN) : 0;
|
||||
long createAt = System.currentTimeMillis();
|
||||
if (!TextUtils.isEmpty(openId) && !TextUtils.isEmpty(accessToken)) {
|
||||
tencent.setOpenId(openId);
|
||||
tencent.setAccessToken(accessToken, String.valueOf(expiresIn));
|
||||
map.put(ARGUMENT_KEY_RESULT_RET, TencentRetCode.RET_SUCCESS);
|
||||
map.put(ARGUMENT_KEY_RESULT_OPENID, openId);
|
||||
map.put(ARGUMENT_KEY_RESULT_ACCESS_TOKEN, accessToken);
|
||||
map.put(ARGUMENT_KEY_RESULT_EXPIRES_IN, expiresIn);
|
||||
map.put(ARGUMENT_KEY_RESULT_CREATE_AT, createAt);
|
||||
} else {
|
||||
map.put(ARGUMENT_KEY_RESULT_RET, TencentRetCode.RET_COMMON);
|
||||
map.put(ARGUMENT_KEY_RESULT_MSG, "openId or accessToken is null.");
|
||||
@ -216,8 +219,19 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
||||
|
||||
private void getUserInfo(MethodCall call, Result result) {
|
||||
if (tencent != null) {
|
||||
String openId = call.argument(ARGUMENT_KEY_OPENID);
|
||||
tencent.setOpenId(openId);
|
||||
String accessToken = call.argument(ARGUMENT_KEY_ACCESSTOKEN);
|
||||
int expiresIn = call.argument(ARGUMENT_KEY_EXPIRESIN);
|
||||
long createAt = call.argument(ARGUMENT_KEY_CREATEAT);
|
||||
tencent.setAccessToken(accessToken, String.valueOf(expiresIn - (System.currentTimeMillis() - createAt) / 1000));
|
||||
UserInfo info = new UserInfo(registrar.context().getApplicationContext(), tencent.getQQToken());
|
||||
info.getUserInfo(new IUiListener() {
|
||||
info.getUserInfo(userInfoListener);
|
||||
}
|
||||
result.success(null);
|
||||
}
|
||||
|
||||
private IUiListener userInfoListener = new IUiListener() {
|
||||
@Override
|
||||
public void onComplete(Object o) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
@ -257,10 +271,7 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
||||
public void onCancel() {
|
||||
// do nothing
|
||||
}
|
||||
});
|
||||
}
|
||||
result.success(null);
|
||||
}
|
||||
};
|
||||
|
||||
private void shareMood(MethodCall call, Result result) {
|
||||
if (tencent != null) {
|
||||
|
@ -53,6 +53,9 @@ class _HomeState extends State<Home> {
|
||||
StreamSubscription<TencentUserInfoResp> _userInfo;
|
||||
StreamSubscription<TencentShareResp> _share;
|
||||
|
||||
TencentLoginResp _loginResp;
|
||||
DateTime _loginDate;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@ -62,6 +65,8 @@ class _HomeState extends State<Home> {
|
||||
}
|
||||
|
||||
void _listenLogin(TencentLoginResp resp) {
|
||||
_loginDate = DateTime.now();
|
||||
_loginResp = resp;
|
||||
String content = 'login: ${resp.openid} - ${resp.accessToken}';
|
||||
_showTips('登录', content);
|
||||
}
|
||||
@ -117,7 +122,17 @@ class _HomeState extends State<Home> {
|
||||
ListTile(
|
||||
title: const Text('获取用户信息'),
|
||||
onTap: () {
|
||||
widget.tencent.getUserInfo();
|
||||
if (_loginDate != null && _loginResp != null &&
|
||||
_loginResp.ret == TencentResp.RET_SUCCESS) {
|
||||
if (DateTime.now().millisecondsSinceEpoch - _loginResp.createAt < _loginResp.expiresIn * 1000) {
|
||||
widget.tencent.getUserInfo(
|
||||
openId: _loginResp.openid,
|
||||
accessToken: _loginResp.accessToken,
|
||||
expiresIn: _loginResp.expiresIn,
|
||||
createAt: _loginResp.createAt,
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
|
@ -52,6 +52,10 @@ static NSString * const METHOD_ONSHARERESP = @"onShareResp";
|
||||
|
||||
static NSString * const ARGUMENT_KEY_APPID = @"appId";
|
||||
static NSString * const ARGUMENT_KEY_SCOPE = @"scope";
|
||||
static NSString * const ARGUMENT_KEY_OPENID = @"openId";
|
||||
static NSString * const ARGUMENT_KEY_ACCESSTOKEN = @"accessToken";
|
||||
static NSString * const ARGUMENT_KEY_EXPIRESIN = @"expiresIn";
|
||||
static NSString * const ARGUMENT_KEY_CREATEAT = @"createAt";
|
||||
static NSString * const ARGUMENT_KEY_SCENE = @"scene";
|
||||
static NSString * const ARGUMENT_KEY_TITLE = @"title";
|
||||
static NSString * const ARGUMENT_KEY_SUMMARY = @"summary";
|
||||
@ -68,6 +72,7 @@ static NSString * const ARGUMENT_KEY_RESULT_MSG = @"msg";
|
||||
static NSString * const ARGUMENT_KEY_RESULT_OPENID = @"openid";
|
||||
static NSString * const ARGUMENT_KEY_RESULT_ACCESS_TOKEN = @"access_token";
|
||||
static NSString * const ARGUMENT_KEY_RESULT_EXPIRES_IN = @"expires_in";
|
||||
static NSString * const ARGUMENT_KEY_RESULT_CREATE_AT = @"create_at";
|
||||
|
||||
static NSString * const SCHEME_FILE = @"file";
|
||||
|
||||
@ -120,6 +125,14 @@ static NSString * const SCHEME_FILE = @"file";
|
||||
}
|
||||
|
||||
-(void)getUserInfo:(FlutterMethodCall*)call result:(FlutterResult)result {
|
||||
NSString * openId = call.arguments[ARGUMENT_KEY_OPENID];
|
||||
NSString * accessToken = call.arguments[ARGUMENT_KEY_ACCESSTOKEN];
|
||||
NSNumber * expiresIn = call.arguments[ARGUMENT_KEY_EXPIRESIN];
|
||||
NSNumber * createAt = call.arguments[ARGUMENT_KEY_CREATEAT];
|
||||
NSTimeInterval secs = createAt.longLongValue / 1000.0 + expiresIn.longLongValue;
|
||||
[_oauth setOpenId:openId];
|
||||
[_oauth setAccessToken:accessToken];
|
||||
[_oauth setExpirationDate:[NSDate dateWithTimeIntervalSince1970:secs]];
|
||||
[_oauth getUserInfo];
|
||||
result(nil);
|
||||
}
|
||||
@ -258,10 +271,12 @@ static NSString * const SCHEME_FILE = @"file";
|
||||
NSString * openId = _oauth.openId;
|
||||
NSString * accessToken = _oauth.accessToken;
|
||||
long long expiresIn = ceil(_oauth.expirationDate.timeIntervalSinceNow);// 向上取整
|
||||
long long createAt = [[NSDate date] timeIntervalSince1970] * 1000.0;
|
||||
[dictionary setValue:[NSNumber numberWithInt:RET_SUCCESS] forKey:ARGUMENT_KEY_RESULT_RET];
|
||||
[dictionary setValue:openId forKey:ARGUMENT_KEY_RESULT_OPENID];
|
||||
[dictionary setValue:accessToken forKey:ARGUMENT_KEY_RESULT_ACCESS_TOKEN];
|
||||
[dictionary setValue:[NSNumber numberWithLongLong:expiresIn] forKey:ARGUMENT_KEY_RESULT_EXPIRES_IN];
|
||||
[dictionary setValue:[NSNumber numberWithLongLong:createAt] forKey:ARGUMENT_KEY_RESULT_CREATE_AT];
|
||||
} else {
|
||||
// 登录失败
|
||||
[dictionary setValue:[NSNumber numberWithInt:RET_COMMON] forKey:ARGUMENT_KEY_RESULT_RET];
|
||||
|
@ -14,9 +14,11 @@ class TencentLoginResp extends TencentResp {
|
||||
this.openid,
|
||||
this.accessToken,
|
||||
this.expiresIn,
|
||||
this.createAt,
|
||||
}) : super(ret: ret, msg: msg);
|
||||
|
||||
final String openid;
|
||||
final String accessToken;
|
||||
final int expiresIn;
|
||||
final int createAt;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ abstract class _$TencentLoginRespSerializer
|
||||
setMapValue(ret, 'openid', model.openid);
|
||||
setMapValue(ret, 'access_token', model.accessToken);
|
||||
setMapValue(ret, 'expires_in', model.expiresIn);
|
||||
setMapValue(ret, 'create_at', model.createAt);
|
||||
setMapValue(ret, 'ret', model.ret);
|
||||
setMapValue(ret, 'msg', model.msg);
|
||||
return ret;
|
||||
@ -29,7 +30,8 @@ abstract class _$TencentLoginRespSerializer
|
||||
openid: map['openid'] as String ?? getJserDefault('openid'),
|
||||
accessToken:
|
||||
map['access_token'] as String ?? getJserDefault('accessToken'),
|
||||
expiresIn: map['expires_in'] as int ?? getJserDefault('expiresIn'));
|
||||
expiresIn: map['expires_in'] as int ?? getJserDefault('expiresIn'),
|
||||
createAt: map['create_at'] as int ?? getJserDefault('createAt'));
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,10 @@ class Tencent {
|
||||
|
||||
static const String _ARGUMENT_KEY_APPID = 'appId';
|
||||
static const String _ARGUMENT_KEY_SCOPE = 'scope';
|
||||
static const String _ARGUMENT_KEY_OPENID = 'openId';
|
||||
static const String _ARGUMENT_KEY_ACCESSTOKEN = 'accessToken';
|
||||
static const String _ARGUMENT_KEY_EXPIRESIN = 'expiresIn';
|
||||
static const String _ARGUMENT_KEY_CREATEAT = 'createAt';
|
||||
static const String _ARGUMENT_KEY_SCENE = 'scene';
|
||||
static const String _ARGUMENT_KEY_TITLE = 'title';
|
||||
static const String _ARGUMENT_KEY_SUMMARY = 'summary';
|
||||
@ -117,8 +121,24 @@ class Tencent {
|
||||
return _channel.invokeMethod(_METHOD_LOGOUT);
|
||||
}
|
||||
|
||||
Future<void> getUserInfo() {
|
||||
return _channel.invokeMethod(_METHOD_GETUSERINFO);
|
||||
Future<void> getUserInfo({
|
||||
@required String openId,
|
||||
@required String accessToken,
|
||||
@required int expiresIn,
|
||||
@required int createAt,
|
||||
}) {
|
||||
assert(openId != null && openId.isNotEmpty);
|
||||
assert(accessToken != null && accessToken.isNotEmpty);
|
||||
assert(expiresIn != null && expiresIn > 0);
|
||||
return _channel.invokeMethod(
|
||||
_METHOD_GETUSERINFO,
|
||||
<String, dynamic>{
|
||||
_ARGUMENT_KEY_OPENID: openId,
|
||||
_ARGUMENT_KEY_ACCESSTOKEN: accessToken,
|
||||
_ARGUMENT_KEY_EXPIRESIN: expiresIn,
|
||||
_ARGUMENT_KEY_CREATEAT: createAt,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> shareMood({
|
||||
|
Reference in New Issue
Block a user