子应用接入文档

1、消息列表

上面是SAAS消息版子应用嵌入界面,当我们点击上图中的提醒、待办事项或者未完成工作区域都将进入子应用或打开新页面,换句话就是子应用的入口。这三项是子应用预设好的消息入口,通过统一接口实现。

取用户已授权可用子应用列表

用户通过uexEMM.login登录emm后会返回这个用户已授权可用子应用appList,appList中包含app的appId。

获取子应用msgList

我们规定统一规则获取每一个子应用对外提供的msgList(如同上图显示的三项入口)。规则如下: 请求接口:租户简称+'.'+appId+".saas.appcan.cn/emoa/message" 请求参数:tenantId(租户Id),accessToken(emm登录返回的token) 请求方式:post 返回数据:

{
 "status" : "000",
 "msg" : {
  "list" : [{
    "createdAt" : "2016-04-08 15:59:00",
    "title" : "方法反反复复反复反复",
    "total" : 38,
    "url" : {
     "appId" : "EMOA",
     "action" : "openwindow",
     "param" : {
      "data" : "todoList.html"
     }
    },
    "icon" : "https://42.96.172.127:18443/oaapp/icon/todo1.png",
    "header" : "未完成工作"
   }, {
    "title" : "苏荣秋的请假申请单!",
    "createdAt" : "2016-04-20 16:38",
    "total" : 104,
    "url" : {
     "appId" : "EMOA",
     "action" : "openwindow",
     "param" : {
      "data" : "todealList.html"
     }
    },
    "icon" : "https://42.96.172.127:18443/oaapp/icon/todo.png",
    "header" : "待办事项"
   }, {
    "title" : "地铁7号线完成地铁7号线完成",
    "createdAt" : "2016-04-26 14:26:12",
    "total" : 34,
    "url" : {
     "appId" : "EMOA",
     "action" : "openwindow",
     "param" : {
      "data" : "remindList.html"
     }
    },
    "icon" : "https://42.96.172.127:18443/oaapp/icon/remind.png",
    "header" : "提醒"
   }
  ]
 }
}

上面返回的数据中url下action可以处理不同情况:

  • 1) openwindow 打开普通窗口,打开预置在app中的网页代码,param下的data是要启动的页面
  • 2) Web 打开web页面
  • 3) appcanWidget 启动widget子应用,子应用的appId,在此子应用下param下的data是要跳转到的指定页面

注:在上述这个子应用中,在这个接口中我们还将子应用的登录写到了里面。

 

2、应用列表

上面是应用列表显示页面,这里可以进入应用并打开应用功能清单页面。在这里我们通过uexAppStoreMgr插件进行处理。

初始化uexAppStoreMgr插件
uexAppStoreMgr.open(storeIp);//storeIp为emm提供的应用商店地址,

此地址如果不在代码中写死也可以在协同开发上的打包开关设置,uexAppStoreMgr插件提供获取此配置的地址方法 具体方法如下:

uexAppStoreMgr.cbGetAppStoreHost = function(a,b,c){
    //C为协同开发上配置的地址   
} 
uexAppStoreMgr.getAppStoreHost();

目前的saas版的正益工作是写死的应用商店地址。

获取应用列表
uexAppStoreMgr.cbGetAppList = function(mid,type,data){
//返回应用的列表信息,包括类型,是否已安装、版本等信息,此处添加处理代码即可,通常通知显示应用的页面显示此应用列表
}
var dataJson={"type":"searchAppList","key":""};//获取所有的应用,当type为installAppFromAllList时是获取已安装的应用
uexAppStoreMgr.getAppList(JSON.stringify(dataJson));
应用启动或者下载

uexAppStoreMgr提供方法loadwidget,此方法会自动处理widget和native类型的应用,如果没下载将自动进行下载,如果已下载,native类型的将自动启动,widget类型的可以在loadwidget的回调方法中启动widget。代码如下:

uexAppStoreMgr.cbLoadWidget = function(a, b, c) {
var obj = JSON.parse(c);
var status = obj.status;
//根据status的不同处理代码
if (status == 0) {
    } else if (status == 1) {
        appcan.window.openToast('正在打开');
        opening = 1;

        uexWidget.cbStartWidget = function(opId, dataType, data) {
                opening = 0;
                appcan.window.closeToast();
            }
        uexWidget.startWidget(obj.data.appId, '10', '', 参数,     '250', obj.data.appKey);
       } else if (status ==  2) {
        uexAppStoreMgr.loadWidget(obj.data);
}
}
  1. uexAppStoreMgr.loadWidget(json);//json为获取列表时每条数据的json串,直接传入即可。

如果未安装将进行下载,下载有回调,可以提示用户

uexAppStoreMgr.onStartDownload = function(){
        uexAppStoreMgr.cbGetProgress = function(a, b, c) {           

            //此处c为下载的进度    
        }
}

由于应用的类型还有一种是web类型的,如果此种类型可自行处理,如打开新窗口,在新窗口中打开浮动窗口,浮动窗口的url为web地址。

3、子应用docker访问规则

mas等子应用的服务都在docker中,这些服务对外提供统一的域名规则:

租户简称+"."+appId+".saas.appcan.cn/

根据此规则,我们就可以将子应用saas化访问。

还需要帮助吗? 联系我们
最新更新 8th Jul 2021