push.js 1.9 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2
import {
  invoke,
fxy060608's avatar
fxy060608 已提交
3 4
  publish
} from '../../bridge'
fxy060608's avatar
fxy060608 已提交
5 6 7
import {
  getAppAuthorizeSetting
} from '../device/get-app-authorize-setting'
fxy060608's avatar
fxy060608 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
let onPushing

let isListening = false

let unsubscribe = false

export function subscribePush (params, callbackId) {
  const clientInfo = plus.push.getClientInfo()
  if (clientInfo) {
    if (!isListening) {
      isListening = true
      plus.push.addEventListener('receive', msg => {
        if (onPushing && !unsubscribe) {
          publish('onPushMessage', {
            messageId: msg.__UUID__,
            data: msg.payload,
            errMsg: 'onPush:ok'
          })
        }
      })
    }
    unsubscribe = false
    clientInfo.errMsg = 'subscribePush:ok'
    return clientInfo
  } else {
    return {
34
      errMsg: 'subscribePush:fail 请确保当前运行环境已包含 push 模块'
fxy060608's avatar
fxy060608 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48
    }
  }
}

export function unsubscribePush (params) {
  unsubscribe = true
  return {
    errMsg: 'unsubscribePush:ok'
  }
}

export function onPush () {
  if (!isListening) {
    return {
49
      errMsg: 'onPush:fail 请先调用 uni.subscribePush'
fxy060608's avatar
fxy060608 已提交
50 51 52 53 54 55 56 57 58
    }
  }
  if (plus.push.getClientInfo()) {
    onPushing = true
    return {
      errMsg: 'onPush:ok'
    }
  }
  return {
59
    errMsg: 'onPush:fail 请确保当前运行环境已包含 push 模块'
fxy060608's avatar
fxy060608 已提交
60 61 62 63 64 65 66 67 68
  }
}

export function offPush (params) {
  onPushing = false
  return {
    errMsg: 'offPush:ok'
  }
}
fxy060608's avatar
fxy060608 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

export function createPushMessage (params, callbackId) {
  const setting = getAppAuthorizeSetting()
  if (setting.notificationAuthorized !== 'authorized') {
    return invoke(callbackId, {
      errMsg: 'createPushMessage:fail ' + setting.notificationAuthorized
    })
  }
  const options = Object.assign({}, params)
  delete options.content
  delete options.payload
  plus.push.createMessage(params.content, params.payload, options)
  invoke(callbackId, {
    errMsg: 'createPushMessage:ok'
  })
}