3.4.1原生中使用

原生应用中唤醒VPA

小友VPA基于多端架构,并开放了与终端无关的统一API,开发者可在Android & iOS原生开发、标准H5开发中访问这些API,灵活定制符合自身产品特性的业务需求。本章节描述如何在原生开发中使用小友VPA。

应用层接入小友VPA一般通过H5开发。本章节描述H5端通过调用小友VPA相关API的流程中,原生层如何与H5通信及回调。

通讯原理

智友与原生通讯机制:

  1. H5通过调用小友插件 notifyToYouzone 方法并传递原生执行相应动作(比如打卡、打开友空间聊天界面等)所需的参数
  2. action 参数为字符串类型,表示H5需要原生执行的某种动作
  3. data 参数类型为 JSON 对象,存放原生执行相应动作所需的参数
  4. 插件 notifyToYouzone 方法内接收到H5传递的参数后,将调用原生打开小友时注册的回调,同时注册原生触发小友插件的回调
  5. 插件接收到原生的回调后将参数传递给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];//回调内容

}
是否仍需要帮助? 请保持联络!
最后更新于 2024/04/24