import { GUIDE_LOGIN_KEY } from '../constants/mock'
|
import { request } from '../utils/request'
|
|
let listenersRegistered = false
|
|
export function initializePush() {
|
// #ifdef APP-PLUS
|
registerPushListeners()
|
return registerPushClient()
|
// #endif
|
return Promise.resolve(false)
|
}
|
|
function registerPushClient(attempt = 0) {
|
const loginState = uni.getStorageSync(GUIDE_LOGIN_KEY)
|
if (!loginState || !loginState.token) return Promise.resolve(false)
|
const clientInfo = plus.push.getClientInfo()
|
const cid = clientInfo && clientInfo.clientid
|
if (!cid) {
|
if (attempt >= 5) return Promise.resolve(false)
|
return new Promise((resolve) => {
|
setTimeout(() => resolve(registerPushClient(attempt + 1)), 2000)
|
})
|
}
|
return request({
|
url: '/guide/push-device',
|
method: 'PUT',
|
data: {
|
cid,
|
platform: plus.os && plus.os.name ? plus.os.name : 'UNKNOWN'
|
}
|
}).then(() => true).catch(() => false)
|
}
|
|
function registerPushListeners() {
|
if (listenersRegistered) return
|
listenersRegistered = true
|
plus.push.addEventListener('click', (message) => {
|
const payload = parsePayload(message && message.payload)
|
if (!payload.targetUrl) return
|
uni.navigateTo({ url: payload.targetUrl })
|
})
|
}
|
|
function parsePayload(payload) {
|
if (!payload) return {}
|
if (typeof payload === 'object') return payload
|
try {
|
return JSON.parse(payload)
|
} catch (error) {
|
return {}
|
}
|
}
|