-
Notifications
You must be signed in to change notification settings - Fork 29
开放事件
zhaohengyu edited this page Jul 16, 2018
·
23 revisions
是否必须实现: 是
代码实践(伪代码):
final static int REQUEST_CODE_LOGIN= 0x11;
mView.subscribe(new AbsAuthEvent() {
/**
* @param needLogin 标识当需要的认证信息类型.
* needLogin为true: 需要带有用户角色的认证信息, 可以通过请求有赞服务端的登录(login)接口获取;
* needLogin为false: 无需用户角色的认证信息, 既可通过初始化(initToken)接口获取也可通过登录(login)接口获取认证信息.
*/
@Override
public void call(View view, boolean needLogin) {
//伪代码
if(AppUserManager.isLogin()){ //判断App内的用户是否登录
//调用login接口, 获取数据, 组装成YouzanToken, 回传给 mView.sync()
} else if (needLogin){
Intent intent = new Intent(YouzanActivity.this, LoginActivity.class);
startActivityForResult(intent, REQUEST_CODE_LOGIN);
} else {
//调用initToken接口, 获取数据, 组装成YouzanToken, 回传给 mView.sync()
}
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
if(requestCode == REQUEST_CODE_LOGIN){
//调用login接口, 获取数据, 组装成YouzanToken, 回传给 mView.sync()
//若未登录,则回调:
//if (!mView.syncNot()) {
// onBackpressed();
//}
}
}
//处理文件选择
mView.receiveFile(requestCode, data);
}
}
说明:
认证是SDK接入流程中最为重要的部分, 也是最复杂部分, 希望开发者能仔细浏览文档.
当访问的页面需要新的认证信息时(之前未认证过或者认证信息过期), 该事件会被回调.
开发者需按照代码实践中的建议实现编码(制作参考根据实际情况调整), 从服务端获取到认证信息后拼装成YouzanToken
对象后调用sync()方法回传给SDK来完成整个操作.
其中, YouzanToken
的数据模型:
字段 | 说明 |
---|---|
accessToken | 有赞服务端返回的access_token 字段, 用于网络接口认证 |
cookieKey | 有赞服务端返回的cookie_key 字段, 用于网页内认证 |
cookieValue | 有赞服务端返回的cookie_value 字段, 用于网页内认证 |
触发方式:
SDK内部触发.
是否必须实现: 否
代码实践:
mView.subscribe(new AbsChooserEvent() {
@Override
public void call(View view, Intent intent, int requestCode) throws ActivityNotFoundException {
startActivityForResult(intent, requestCode);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
//...
mView.receiveFile(requestCode, data);
}
}
说明:
事件被回调表示SDK内发起了一个文件选择的请求, 之后开发者需要调用receiveFile()方法回传数据.
触发方式:
如果页面内有文件的选框, 点击选框触发.