# 10、apiCloud对接
# (ios & android)通用
# h5代码实现
点击查看代码
function apiCloud(name, postMessageData = {}) {
return new Promise((resolve, reject) => {
let data = {
method: name,
data: postMessageData,
id: name + new Date().getTime()
}
try {
window[data.id] = res => {
delete window[data.id];
resolve(res);
}
} catch(e) {
reject(e);
}
api.sendEvent({
name: 'comm',
extra: JSON.stringify(data)
});
})
}
h5传给apicloud的json数据
{
"method":"jumpapp",
"data":{
"url":"https://www.baidu.com"
},
"id":"jumpapp1608612711261"
}
method: h5要调用apicloud的方法
data: method方法所需要的的参数
id: apicloud回调h5的方法名
例子:
apiCloud('jumpapp', {
url: 'https://www.baidu.com'
}).then(res => {
})
res为apicloud的回调值 对象格式
# apiCloud端代码实现
点击查看代码
api.openFrame({
name: 'detailframeweb',
url: 'https://www.baidu.com'
});
api.addEventListener({
name: 'comm'
}, function(ret, err) {
let res = ret.value;
switch(res.method) {
case "jumpapp":
//apicloud处理业务如: 打开app, 打开浏览器, 下载app, 获取用户设备信息等等
//回传给h5
let data = JSON.stringify({
method: res.method,
data: {},
id: res.id
})
let js = `(function(){${res.id}(${data})})()`;
console.log(js, data)
api.execScript({
frameName: 'detailframeweb',
script: js
});
break;
}
})
ret: h5传给apicloud的数据
value = {
"method":"jumpapp",
"data":{
"url":"https://www.baidu.com"
},
"id":"jumpapp1608612711261"
}
data: apicloud回传给h5的数据, 已js注入自执行函数的方式传给h5
{
method: 告诉h5是那个方法的回调
data: 回调给h5的具体数据
id: 回调函数的唯一id
}
注意事项:
1.api.openFrame函数中parasm参数的name值需要和api.execScript函数params的name值一致, 否则js会注入失败
2.回传给h5的data为一个对象格式的json字符串, 否则h5端则无法正确解析