Skip to content

开放事件

zhaohengyu edited this page Jul 16, 2018 · 23 revisions

认证事件(AbsAuthEvent)

是否必须实现: 是

代码实践(伪代码):

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 字段, 用于网页内认证

初始化token接口

登录接口

触发方式:

SDK内部触发.

文件选择事件(AbsChooserEvent)

是否必须实现: 否

代码实践:

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()方法回传数据.

触发方式:

如果页面内有文件的选框, 点击选框触发.