小友VPA基于多端架构,并开放了与终端无关的统一API,开发者可在Android & iOS原生开发、标准H5开发中访问这些API,灵活定制符合自身产品特性的业务需求。本章节描述如何在原生开发中使用小友VPA。
应用层接入小友VPA一般通过H5开发。本章节描述H5端通过调用小友VPA相关API的流程中,原生层如何与H5通信及回调。
智友与原生通讯机制:
示例代码
Android端调用
//设置传递打开小友的参数
JSONObject yrcParams = new JSONObject();
try {
yrcParams.put("domain", "");//设置域名 如日常环境:https://bip-daily.yyuap.com/iuap-aip-vpa/apiregister
yrcParams.put("appcode","" );//vpa定义的应用 如diwork
yrcParams.put("token", token);//VPA分配的鉴权参数
yrcParams.put("domainid", domainid);//VPA分配的鉴权参数
yrcParams.put("userid", userid);//用户id
yrcParams.put("tenantid", ""); //租户id
yrcParams.put("yhtAccessToken", yht_access_token);//友互通token
yrcParams.put("locale", "");//语种信息 如 中文:zh_CN
yrcParams.put("enterpriseid", enterpriseid);//友空间-空间id
yrcParams.put("uid", uid);//友空间-用户id
} catch (JSONException e) {
e.printStackTrace();
}
//打开小友界面,初始化参数为JSON字符串
XYWebViewActivity.openXiaoyou(context(),yrcParams.toString() );
/**
*添加小友回调监听,h5端调用插件notifyToYouzone方法,插件内部通过调用*XYMessageListener.callback把h5传过来的action和JSONObject参数交给原生处理
*/
XYWebViewActivity.setXyMessageListener(new XYMessageListener() {
@Override
public void callback(Context context, String action, JSONObject object, MessageHandleListener messageHandleListener) {
//action为vpa后台接口返回的卡片动作,object里包含了执行相应动作所需要的参数
if (action.equals(XYConfig.ROBOT_CONTACTS_CARD)) {
// 联系人卡片点击,查看友空间联系人详情
if (object != null) {
String memberId = object.optString("memberId");
...
}
} else if (action.equals(XYConfig.ROBOT_CONTACTS_CALL)) {
// 联系人打电话
if (object != null) {
String phoneNum = object.optString("phoneNum");
//调用拨打电话代码
}
} else if (action.equals(XYConfig.ROBOT_OPEN_WEB_APP)) {//"robot_open_web_app"
// 打开web应用
if (object != null) {
String url = object.optString("url");
boolean hideNavBar = object.optBoolean("hideNavBar", true);
//调用打开web应用代码
}
} else if (action.equals(XYConfig.OPEN_SIGNIN)) {
//调用打开移动考勤签到界面
} else{
...
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
原生界面回调给小友数据通过messageHandleListener的callback实现
JSONObject json = new JSONObject();
try {
json.put("params1", "");
json.put("params2", "");
json.put("params3","");
} catch (Exception e) {
}
//插件接收到原生传过来的参数后调用notifyToYouzone方法的回调传给前端h5处理
messageHandleListener.callback(json);
}
});
iOS端调用
#import <XiaoyouLight/XiaoyouLight.h>
//设置传递打开小友的参数
XYLUrlDefine *define = [XYLUrlDefine sharedConfig];
define.iDomain = @"";//设置域名 如日常环境:https://bip-daily.yyuap.com/iuap-aip-vpa/apiregister
define.iYtenantId = @"";//租户id
define.iDomainId = @"";//VPA分配的鉴权参数
define.iToken = @"";//VPA分配的鉴权参数
define.iUserID = @"";//用户id
define.iYHTToken = @"";//友互通token
define.iAppcode = @"";//vpa定义的应用 如diwork
define.iDomainId = @"";//VPA分配的鉴权参数
define.iEnterpriseid = @"";//友空间-空间id
define.iUid = @"";//友空间-用户id
//打开小友,设置代理
XiaoyouLightViewController *xiaoyouVC = [XiaoyouLightViewController windowContainer];
xiaoyouVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
xiaoyouVC.delegate = self;
[self presentViewController:xiaoyouVC animated:YES completion:nil];
//小友事件回调
- (void)xyl_viewController:(XiaoyouLightViewController *)viewController handleActionWithInfo:(NSDictionary<NSString *,id> *)info callback:(void (^)(XiaoyouLightActionStatus, NSDictionary *))callback {
NSString *action = info[XiaoyouLightActionName];//事件名称
id object = info[XiaoyouLightDataName];//回调内容
}