const OPENINSTALL_APP_KEY = 'ag8spw'
|
const OPENINSTALL_WEB_SDK_URL = 'https://res.opstatistics.com/openinstall-ag8spw.js'
|
|
let openinstallSdkPromise = null
|
|
/**
|
* H5 环境下按需加载 openinstall Web SDK。
|
*/
|
const loadOpeninstallWebSdk = () => {
|
if (typeof window === 'undefined') {
|
return Promise.resolve(null)
|
}
|
if (window.OpenInstall) {
|
return Promise.resolve(window.OpenInstall)
|
}
|
if (openinstallSdkPromise) {
|
return openinstallSdkPromise
|
}
|
openinstallSdkPromise = new Promise((resolve, reject) => {
|
const script = document.createElement('script')
|
script.src = OPENINSTALL_WEB_SDK_URL
|
script.async = true
|
script.onload = () => {
|
if (window.OpenInstall) {
|
resolve(window.OpenInstall)
|
return
|
}
|
reject(new Error('openinstall sdk unavailable'))
|
}
|
script.onerror = () => reject(new Error('openinstall sdk load failed'))
|
document.head.appendChild(script)
|
})
|
return openinstallSdkPromise
|
}
|
|
/**
|
* 构造 openinstall 透传参数,保留当前页面关键信息。
|
*/
|
const buildOpeninstallData = (extraData = {}) => {
|
if (typeof window === 'undefined') {
|
return {
|
...extraData
|
}
|
}
|
const parsedParams = window.OpenInstall && typeof window.OpenInstall.parseUrlParams === 'function'
|
? window.OpenInstall.parseUrlParams()
|
: {}
|
return {
|
...(parsedParams || {}),
|
...extraData
|
}
|
}
|
|
/**
|
* H5 分享页通过 openinstall 执行唤醒或安装。
|
*/
|
export const wakeupOrInstallByOpeninstall = async (extraData = {}) => {
|
if (typeof window === 'undefined') {
|
return false
|
}
|
try {
|
const OpenInstall = await loadOpeninstallWebSdk()
|
if (!OpenInstall) {
|
return false
|
}
|
const wakeupData = buildOpeninstallData(extraData)
|
await new Promise((resolve, reject) => {
|
let readyHandled = false
|
try {
|
new OpenInstall({
|
appKey: OPENINSTALL_APP_KEY,
|
fastInstall: false,
|
onready: function () {
|
if (readyHandled) {
|
return
|
}
|
readyHandled = true
|
try {
|
this.wakeupOrInstall()
|
resolve(true)
|
} catch (error) {
|
reject(error)
|
}
|
}
|
}, wakeupData)
|
} catch (error) {
|
reject(error)
|
}
|
})
|
return true
|
} catch (error) {
|
console.log('H5 openinstall 拉起失败', error)
|
return false
|
}
|
}
|