act-soloop-js-bridge
Version:
H5与即录soloop App交互工具库
227 lines (222 loc) • 6.42 kB
JavaScript
import HeytapJsApi from '@oppo/lib-heytap-jsapi';
window.HeytapJsApi = HeytapJsApi;
const getQueryString = (name, searchString) => {
var paramsStr = searchString || window.location.search || '';
paramsStr = paramsStr.replace(/\?/g, '&'); //若有过多?号造成异常,则替换
if (paramsStr) {
let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
let r = paramsStr.match(reg);
if (r != null) return decodeURI(r[2]);
return null;
}
return null;
};
/**
* 获取app信息 ok
* @return {Promise<Object>} App信息对象
* @return {Promise<Object>} package_name App包名
* @return {Promise<Object>} version_code App版本号
* @return {Promise<Object>} version_name App版本名
*
*/
function getAppInfo() {
console.log('getAppInfo', 'start');
return HeytapJsApi.invoke({
name: 'common.app_info',
data: {}
})
.then((res) => {
console.log('app_info', res);
return res.data;
})
.catch((err) => {
console.log('err :', err);
return Promise.reject(err);
});
}
/**
* 获取设备openId
* @return {Promise<String>} 设备openId
*/
function getOpenId() {
return HeytapJsApi.invoke({
name: 'account.open_id',
data: {}
})
.then((res) => {
console.log('open_id', res);
if (res.data) {
return res.data.open_id;
} else {
return Promise.reject('无法获取到open_id');
}
})
.catch((err) => {
console.log('err :', err);
return Promise.reject(err);
});
}
/**
* 是否在App内
* @return {Promise<Boolean>} 是否在App内
*/
async function isInApp(packageName = 'com.coloros.videoeditor') {
let res = false;
let appInfo = await getAppInfo().catch(() => {
return {};
});
if (appInfo.package_name === packageName) {
res = true;
}
return res;
}
/**
* 获取设备信息 ok
* @return {Promise<Object>} 设备信息对象
* @return {Promise<Object>} language 语言
* @return {Promise<Object>} time_zone 时区
* @return {Promise<Object>} country 国家
* @return {Promise<Object>} system_version 系统版本
* @return {Promise<Object>} brand 品牌
* @return {Promise<Object>} model 设备型号
*/
function getDeviceInfo() {
return HeytapJsApi.invoke({
name: 'common.device_info',
data: {}
})
.then((res) => {
console.log('device_info', res);
return res.data;
})
.catch((err) => {
console.log('err :', err);
return Promise.reject(err);
});
}
/**
* 获取设备所有信息 ok
* @return {Promise<Object>} 设备信息对象
* @return {Promise<Object>} language 语言
* @return {Promise<Object>} time_zone 时区
* @return {Promise<Object>} country 国家
* @return {Promise<Object>} system_version 系统版本
* @return {Promise<Object>} brand 品牌
* @return {Promise<Object>} model 设备型号
* @return {Promise<Object>} openId 设备号,可用于替代imei,需要用户授权
*/
async function getAllDeviceInfo() {
let deviceInfo = await getDeviceInfo().catch(() => false);
let openId = await getOpenId().catch(() => false);
// openId可能为空字符串
if (deviceInfo && openId !== false) {
return {
...deviceInfo,
openId
};
} else {
return Promise.reject('获取设备信息失败');
}
}
// ok轻提示
function toast(message, duration = 2000) {
HeytapJsApi.invoke({
name: 'common.toast',
data: {
message,
duration
}
});
}
/**
* 获取用户信息 ok
* @return {Promise<Object>} 用户信息对象
* @return {Promise<Object>} isLogin 是否登陆
* @return {Promise<Object>} ssoid 用户账号
* @return {Promise<Object>} country 国家
* @return {Promise<Object>} token 用户令牌
*/
function getUserInfo() {
return HeytapJsApi.invoke({
name: 'account.user_info',
data: {}
})
.then((res) => {
console.log('user_info', res);
if (res.code === 0 && res.data) {
return res.data;
} else {
return Promise.reject(res.data);
}
})
.catch((err) => {
console.log('err :', err);
return Promise.reject(err);
});
}
/**
* 用户是否登陆 ok
* @return {Promise<Boolean>} 用户是否登陆
*/
async function isLogin() {
let userInfo = await getUserInfo().catch(() => {
return {};
});
return !!userInfo.isLogin;
}
/**
* 用户登陆 ok
* @return {Promise<Object>} 用户是否登陆
* @return {Promise<Object>} isLogin 用户是否登陆
* @return {Promise<Object>} ssoid 用户账号
* @return {Promise<Object>} country 用户国家
*/
function doLogin() {
return HeytapJsApi.invoke({
name: 'account.login',
data: {}
})
.then((res) => {
console.log('login', res);
if (res.code === 0 && res.data) {
return res.data;
} else {
return Promise.reject(res.data);
}
})
.catch((err) => {
console.log('err :', err);
return Promise.reject(err);
});
}
// ok 在即录App中打开任意指定的web页面,默认当前页面
function openAppWebPage(urlStr) {
let href = urlStr || window.location.href;
let title = getQueryString('title', href);
window.location.href = `oaps://soloop/web?u=${encodeURIComponent(href)}&t=${title}`;
}
// ok 打开soloop 视频制作界面
function openAppVideoEditor() {
window.location.href = 'hap://soloop/materialpicker';
}
// 打开积分商城
function openAppMall() {
HeytapJsApi.invoke({
name: 'mall.point_mall',
data: {}
});
}
export default {
isInApp,
getDeviceInfo,
getAppInfo,
getUserInfo,
getOpenId,
getAllDeviceInfo,
isLogin,
doLogin,
openAppWebPage,
openAppVideoEditor,
openAppMall,
toast
};