mirror of
https://github.com/RxReader/tencent_kit.git
synced 2025-07-18 09:53:33 +08:00
优化获取用户信息函数
This commit is contained in:
@ -5,3 +5,7 @@
|
|||||||
## 0.1.0 - 2019.3.19
|
## 0.1.0 - 2019.3.19
|
||||||
|
|
||||||
* 规范 fake_tencent 代码
|
* 规范 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_APPID = "appId";
|
||||||
private static final String ARGUMENT_KEY_SCOPE = "scope";
|
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_SCENE = "scene";
|
||||||
private static final String ARGUMENT_KEY_TITLE = "title";
|
private static final String ARGUMENT_KEY_TITLE = "title";
|
||||||
private static final String ARGUMENT_KEY_SUMMARY = "summary";
|
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_OPENID = "openid";
|
||||||
private static final String ARGUMENT_KEY_RESULT_ACCESS_TOKEN = "access_token";
|
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_EXPIRES_IN = "expires_in";
|
||||||
|
private static final String ARGUMENT_KEY_RESULT_CREATE_AT = "create_at";
|
||||||
|
|
||||||
private static final String SCHEME_FILE = "file";
|
private static final String SCHEME_FILE = "file";
|
||||||
|
|
||||||
@ -152,8 +157,6 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
|||||||
}
|
}
|
||||||
|
|
||||||
private IUiListener loginListener = new IUiListener() {
|
private IUiListener loginListener = new IUiListener() {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onComplete(Object o) {
|
public void onComplete(Object o) {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
@ -165,14 +168,14 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
|||||||
if (ret == TencentRetCode.RET_SUCCESS) {
|
if (ret == TencentRetCode.RET_SUCCESS) {
|
||||||
String openId = !object.isNull(ARGUMENT_KEY_RESULT_OPENID) ? object.getString(ARGUMENT_KEY_RESULT_OPENID) : null;
|
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;
|
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)) {
|
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_RET, TencentRetCode.RET_SUCCESS);
|
||||||
map.put(ARGUMENT_KEY_RESULT_OPENID, openId);
|
map.put(ARGUMENT_KEY_RESULT_OPENID, openId);
|
||||||
map.put(ARGUMENT_KEY_RESULT_ACCESS_TOKEN, accessToken);
|
map.put(ARGUMENT_KEY_RESULT_ACCESS_TOKEN, accessToken);
|
||||||
map.put(ARGUMENT_KEY_RESULT_EXPIRES_IN, expiresIn);
|
map.put(ARGUMENT_KEY_RESULT_EXPIRES_IN, expiresIn);
|
||||||
|
map.put(ARGUMENT_KEY_RESULT_CREATE_AT, createAt);
|
||||||
} else {
|
} else {
|
||||||
map.put(ARGUMENT_KEY_RESULT_RET, TencentRetCode.RET_COMMON);
|
map.put(ARGUMENT_KEY_RESULT_RET, TencentRetCode.RET_COMMON);
|
||||||
map.put(ARGUMENT_KEY_RESULT_MSG, "openId or accessToken is null.");
|
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) {
|
private void getUserInfo(MethodCall call, Result result) {
|
||||||
if (tencent != null) {
|
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());
|
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
|
@Override
|
||||||
public void onComplete(Object o) {
|
public void onComplete(Object o) {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
@ -257,10 +271,7 @@ public class FakeTencentPlugin implements MethodCallHandler, PluginRegistry.Acti
|
|||||||
public void onCancel() {
|
public void onCancel() {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
}
|
|
||||||
result.success(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void shareMood(MethodCall call, Result result) {
|
private void shareMood(MethodCall call, Result result) {
|
||||||
if (tencent != null) {
|
if (tencent != null) {
|
||||||
|
@ -53,6 +53,9 @@ class _HomeState extends State<Home> {
|
|||||||
StreamSubscription<TencentUserInfoResp> _userInfo;
|
StreamSubscription<TencentUserInfoResp> _userInfo;
|
||||||
StreamSubscription<TencentShareResp> _share;
|
StreamSubscription<TencentShareResp> _share;
|
||||||
|
|
||||||
|
TencentLoginResp _loginResp;
|
||||||
|
DateTime _loginDate;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@ -62,6 +65,8 @@ class _HomeState extends State<Home> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _listenLogin(TencentLoginResp resp) {
|
void _listenLogin(TencentLoginResp resp) {
|
||||||
|
_loginDate = DateTime.now();
|
||||||
|
_loginResp = resp;
|
||||||
String content = 'login: ${resp.openid} - ${resp.accessToken}';
|
String content = 'login: ${resp.openid} - ${resp.accessToken}';
|
||||||
_showTips('登录', content);
|
_showTips('登录', content);
|
||||||
}
|
}
|
||||||
@ -117,7 +122,17 @@ class _HomeState extends State<Home> {
|
|||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('获取用户信息'),
|
title: const Text('获取用户信息'),
|
||||||
onTap: () {
|
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(
|
ListTile(
|
||||||
|
@ -52,6 +52,10 @@ static NSString * const METHOD_ONSHARERESP = @"onShareResp";
|
|||||||
|
|
||||||
static NSString * const ARGUMENT_KEY_APPID = @"appId";
|
static NSString * const ARGUMENT_KEY_APPID = @"appId";
|
||||||
static NSString * const ARGUMENT_KEY_SCOPE = @"scope";
|
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_SCENE = @"scene";
|
||||||
static NSString * const ARGUMENT_KEY_TITLE = @"title";
|
static NSString * const ARGUMENT_KEY_TITLE = @"title";
|
||||||
static NSString * const ARGUMENT_KEY_SUMMARY = @"summary";
|
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_OPENID = @"openid";
|
||||||
static NSString * const ARGUMENT_KEY_RESULT_ACCESS_TOKEN = @"access_token";
|
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_EXPIRES_IN = @"expires_in";
|
||||||
|
static NSString * const ARGUMENT_KEY_RESULT_CREATE_AT = @"create_at";
|
||||||
|
|
||||||
static NSString * const SCHEME_FILE = @"file";
|
static NSString * const SCHEME_FILE = @"file";
|
||||||
|
|
||||||
@ -120,6 +125,14 @@ static NSString * const SCHEME_FILE = @"file";
|
|||||||
}
|
}
|
||||||
|
|
||||||
-(void)getUserInfo:(FlutterMethodCall*)call result:(FlutterResult)result {
|
-(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];
|
[_oauth getUserInfo];
|
||||||
result(nil);
|
result(nil);
|
||||||
}
|
}
|
||||||
@ -258,10 +271,12 @@ static NSString * const SCHEME_FILE = @"file";
|
|||||||
NSString * openId = _oauth.openId;
|
NSString * openId = _oauth.openId;
|
||||||
NSString * accessToken = _oauth.accessToken;
|
NSString * accessToken = _oauth.accessToken;
|
||||||
long long expiresIn = ceil(_oauth.expirationDate.timeIntervalSinceNow);// 向上取整
|
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:[NSNumber numberWithInt:RET_SUCCESS] forKey:ARGUMENT_KEY_RESULT_RET];
|
||||||
[dictionary setValue:openId forKey:ARGUMENT_KEY_RESULT_OPENID];
|
[dictionary setValue:openId forKey:ARGUMENT_KEY_RESULT_OPENID];
|
||||||
[dictionary setValue:accessToken forKey:ARGUMENT_KEY_RESULT_ACCESS_TOKEN];
|
[dictionary setValue:accessToken forKey:ARGUMENT_KEY_RESULT_ACCESS_TOKEN];
|
||||||
[dictionary setValue:[NSNumber numberWithLongLong:expiresIn] forKey:ARGUMENT_KEY_RESULT_EXPIRES_IN];
|
[dictionary setValue:[NSNumber numberWithLongLong:expiresIn] forKey:ARGUMENT_KEY_RESULT_EXPIRES_IN];
|
||||||
|
[dictionary setValue:[NSNumber numberWithLongLong:createAt] forKey:ARGUMENT_KEY_RESULT_CREATE_AT];
|
||||||
} else {
|
} else {
|
||||||
// 登录失败
|
// 登录失败
|
||||||
[dictionary setValue:[NSNumber numberWithInt:RET_COMMON] forKey:ARGUMENT_KEY_RESULT_RET];
|
[dictionary setValue:[NSNumber numberWithInt:RET_COMMON] forKey:ARGUMENT_KEY_RESULT_RET];
|
||||||
|
@ -14,9 +14,11 @@ class TencentLoginResp extends TencentResp {
|
|||||||
this.openid,
|
this.openid,
|
||||||
this.accessToken,
|
this.accessToken,
|
||||||
this.expiresIn,
|
this.expiresIn,
|
||||||
|
this.createAt,
|
||||||
}) : super(ret: ret, msg: msg);
|
}) : super(ret: ret, msg: msg);
|
||||||
|
|
||||||
final String openid;
|
final String openid;
|
||||||
final String accessToken;
|
final String accessToken;
|
||||||
final int expiresIn;
|
final int expiresIn;
|
||||||
|
final int createAt;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ abstract class _$TencentLoginRespSerializer
|
|||||||
setMapValue(ret, 'openid', model.openid);
|
setMapValue(ret, 'openid', model.openid);
|
||||||
setMapValue(ret, 'access_token', model.accessToken);
|
setMapValue(ret, 'access_token', model.accessToken);
|
||||||
setMapValue(ret, 'expires_in', model.expiresIn);
|
setMapValue(ret, 'expires_in', model.expiresIn);
|
||||||
|
setMapValue(ret, 'create_at', model.createAt);
|
||||||
setMapValue(ret, 'ret', model.ret);
|
setMapValue(ret, 'ret', model.ret);
|
||||||
setMapValue(ret, 'msg', model.msg);
|
setMapValue(ret, 'msg', model.msg);
|
||||||
return ret;
|
return ret;
|
||||||
@ -29,7 +30,8 @@ abstract class _$TencentLoginRespSerializer
|
|||||||
openid: map['openid'] as String ?? getJserDefault('openid'),
|
openid: map['openid'] as String ?? getJserDefault('openid'),
|
||||||
accessToken:
|
accessToken:
|
||||||
map['access_token'] as String ?? getJserDefault('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;
|
return obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,10 @@ class Tencent {
|
|||||||
|
|
||||||
static const String _ARGUMENT_KEY_APPID = 'appId';
|
static const String _ARGUMENT_KEY_APPID = 'appId';
|
||||||
static const String _ARGUMENT_KEY_SCOPE = 'scope';
|
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_SCENE = 'scene';
|
||||||
static const String _ARGUMENT_KEY_TITLE = 'title';
|
static const String _ARGUMENT_KEY_TITLE = 'title';
|
||||||
static const String _ARGUMENT_KEY_SUMMARY = 'summary';
|
static const String _ARGUMENT_KEY_SUMMARY = 'summary';
|
||||||
@ -117,8 +121,24 @@ class Tencent {
|
|||||||
return _channel.invokeMethod(_METHOD_LOGOUT);
|
return _channel.invokeMethod(_METHOD_LOGOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> getUserInfo() {
|
Future<void> getUserInfo({
|
||||||
return _channel.invokeMethod(_METHOD_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({
|
Future<void> shareMood({
|
||||||
|
Reference in New Issue
Block a user