<script>
|
import { mapState } from 'vuex'
|
export default {
|
data() {
|
return {
|
locationTimer: null,
|
jpushModule: null
|
}
|
},
|
computed: {
|
...mapState(['userInfo', 'token'])
|
},
|
watch: {
|
token(newVal) {
|
if (newVal) {
|
this.startLocationPolling()
|
this.bindJPushAlias()
|
} else {
|
this.stopLocationPolling()
|
this.deleteJPushAlias()
|
}
|
}
|
},
|
onLaunch: function() {
|
this.initJPush()
|
this.checkAndStartLocationPolling()
|
},
|
onShow: function() {
|
console.log('App Show')
|
this.checkAndStartLocationPolling()
|
},
|
onHide: function() {
|
console.log('App Hide')
|
this.stopLocationPolling()
|
},
|
methods: {
|
initJPush() {
|
const jpushModule = uni.requireNativePlugin('JPush')
|
if (!jpushModule) {
|
console.log('极光推送插件未找到,请先安装插件')
|
return
|
}
|
this.jpushModule = jpushModule
|
|
jpushModule.init()
|
console.log('极光推送初始化成功')
|
|
jpushModule.setLoggerEnable(true)
|
|
jpushModule.addReceiveNotificationListener((result) => {
|
console.log('收到通知:', JSON.stringify(result))
|
const extras = result.extras || {}
|
if (extras.type === 'order') {
|
uni.$emit('jpush_order_notification', extras)
|
}
|
})
|
|
jpushModule.addReceiveOpenNotificationListener((result) => {
|
console.log('点击通知:', JSON.stringify(result))
|
const extras = result.extras || {}
|
if (extras.type === 'order') {
|
uni.navigateTo({
|
url: '/pages/order-detail/order-detail?id=' + extras.orderId
|
})
|
} else if (extras.type === 'message') {
|
uni.switchTab({
|
url: '/pages/message/message'
|
})
|
}
|
})
|
|
jpushModule.addReceiveMessageListener((result) => {
|
console.log('收到透传消息:', JSON.stringify(result))
|
})
|
|
jpushModule.getRegistrationID((res) => {
|
console.log('JPush RegistrationID:', res)
|
if (res && res.registerID) {
|
uni.setStorageSync('jpush_registration_id', res.registerID)
|
}
|
})
|
},
|
|
bindJPushAlias() {
|
if (!this.jpushModule || !this.token) return
|
const userId = this.$store.state.userInfo?.id || ''
|
if (userId) {
|
this.jpushModule.setAlias({
|
alias: String(userId),
|
sequence: Date.now()
|
}, (result) => {
|
console.log('设置极光别名成功:', JSON.stringify(result))
|
})
|
}
|
},
|
|
deleteJPushAlias() {
|
if (!this.jpushModule) return
|
this.jpushModule.deleteAlias({
|
sequence: Date.now()
|
}, (result) => {
|
console.log('删除极光别名成功:', JSON.stringify(result))
|
})
|
},
|
|
checkAndStartLocationPolling() {
|
if (this.token) {
|
this.startLocationPolling()
|
}
|
},
|
|
startLocationPolling() {
|
this.stopLocationPolling()
|
this.updateLocation()
|
this.locationTimer = setInterval(() => {
|
this.updateLocation()
|
}, 60000)
|
},
|
|
stopLocationPolling() {
|
if (this.locationTimer) {
|
clearInterval(this.locationTimer)
|
this.locationTimer = null
|
}
|
},
|
|
updateLocation() {
|
uni.getLocation({
|
type: 'gcj02',
|
success: (res) => {
|
this.$u.api.updateLocation({
|
latitude: res.latitude,
|
longitude: res.longitude
|
})
|
}
|
})
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
@import "uview-ui/index.scss";
|
</style>
|