| | |
| | | <script> |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | | data() { |
| | | return { |
| | | locationTimer: null, |
| | | jpushModule: null |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | ...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) => { |
| | | console.log(res) |
| | | this.$u.api.updateLocation({ |
| | | latitude: res.latitude, |
| | | longitude: res.longitude |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |