From b6f401dd0a9d9bfb6c11c07cdcaab967eabb8af1 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 29 四月 2026 17:50:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
app/App.vue | 223 ++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 176 insertions(+), 47 deletions(-)
diff --git a/app/App.vue b/app/App.vue
index 237c93d..20b66e5 100644
--- a/app/App.vue
+++ b/app/App.vue
@@ -4,7 +4,12 @@
data() {
return {
locationTimer: null,
- jpushModule: null
+ jpushModule: null,
+ jpushListenersBound: false,
+ jpushRegistrationTimer: null,
+ jpushAliasRetryTimer: null,
+ jpushRegistrationRetryCount: 0,
+ jpushAliasRetryCount: 0
}
},
computed: {
@@ -14,15 +19,17 @@
token(newVal) {
if (newVal) {
this.startLocationPolling()
- this.bindJPushAlias()
+ this.bindJPushAlias(true)
} else {
this.stopLocationPolling()
+ this.clearJPushRetryTimers()
this.deleteJPushAlias()
}
}
},
onLaunch: function() {
this.initJPush()
+ this.ensureJPushAliasOnLaunch()
this.checkAndStartLocationPolling()
this.checkAppUpdate()
},
@@ -36,72 +43,192 @@
},
methods: {
initJPush() {
- const jpushModule = uni.requireNativePlugin('JPush')
+ // #ifdef APP-PLUS
+ if (this.jpushModule) {
+ this.retryGetRegistrationID()
+ return
+ }
+
+ const jpushModule = uni.requireNativePlugin('JG-JPush')
if (!jpushModule) {
console.log('鏋佸厜鎺ㄩ�佹彃浠舵湭鎵惧埌锛岃鍏堝畨瑁呮彃浠�')
return
}
this.jpushModule = jpushModule
- jpushModule.init()
+ try {
+ jpushModule.setLoggerEnable(false)
+ jpushModule.init()
+ } catch (error) {
+ console.log('鏋佸厜鎺ㄩ�佸垵濮嬪寲澶辫触:', error)
+ return
+ }
console.log('鏋佸厜鎺ㄩ�佸垵濮嬪寲鎴愬姛')
- jpushModule.setLoggerEnable(true)
+ if (!this.jpushListenersBound) {
+ jpushModule.addReceiveNotificationListener((result) => {
+ console.log('鏀跺埌閫氱煡:', JSON.stringify(result))
+ const extras = this.normalizeJPushExtras(result && result.extras)
+ if (extras.type === 'order') {
+ uni.$emit('jpush_order_notification', extras)
+ }
+ })
- 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 = this.normalizeJPushExtras(result && result.extras)
+ if (extras.type === 'order' && extras.orderId) {
+ uni.navigateTo({
+ url: '/pages/order-detail/order-detail?id=' + extras.orderId
+ })
+ } else if (extras.type === 'message') {
+ uni.switchTab({
+ url: '/pages/message/message'
+ })
+ }
+ })
- 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.addReceiveMessageListener((result) => {
- console.log('鏀跺埌閫忎紶娑堟伅:', JSON.stringify(result))
- })
+ this.jpushListenersBound = true
+ }
- jpushModule.getRegistrationID((res) => {
- console.log('JPush RegistrationID:', res)
- if (res && res.registerID) {
- uni.setStorageSync('jpush_registration_id', res.registerID)
- }
- })
+ this.retryGetRegistrationID()
+ if (this.token) {
+ this.bindJPushAlias(true)
+ }
+ // #endif
},
- 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))
- })
+ ensureJPushAliasOnLaunch() {
+ // #ifdef APP-PLUS
+ if (this.token) {
+ this.bindJPushAlias(true)
+ }
+ // #endif
+ },
+
+ clearJPushRetryTimers() {
+ if (this.jpushRegistrationTimer) {
+ clearTimeout(this.jpushRegistrationTimer)
+ this.jpushRegistrationTimer = null
+ }
+ if (this.jpushAliasRetryTimer) {
+ clearTimeout(this.jpushAliasRetryTimer)
+ this.jpushAliasRetryTimer = null
}
},
- deleteJPushAlias() {
+ normalizeJPushExtras(extras) {
+ if (!extras) return {}
+ if (typeof extras === 'string') {
+ try {
+ return JSON.parse(extras)
+ } catch (error) {
+ return {}
+ }
+ }
+ return extras
+ },
+
+ isJPushActionSuccess(result) {
+ if (!result) return false
+ const successCodes = [0, '0']
+ return successCodes.includes(result.code) || successCodes.includes(result.errCode)
+ },
+
+ retryGetRegistrationID(forceRetry = false) {
+ // #ifdef APP-PLUS
if (!this.jpushModule) return
+
+ if (forceRetry) {
+ this.jpushRegistrationRetryCount = 0
+ }
+
+ if (this.jpushRegistrationTimer) {
+ clearTimeout(this.jpushRegistrationTimer)
+ this.jpushRegistrationTimer = null
+ }
+
+ this.jpushModule.getRegistrationID((res) => {
+ console.log('JPush RegistrationID:', res)
+ if (res && res.registerID) {
+ uni.setStorageSync('jpush_registration_id', res.registerID)
+ this.jpushRegistrationRetryCount = 0
+ return
+ }
+
+ if (this.jpushRegistrationRetryCount >= 5) {
+ console.log('澶氭鑾峰彇 RegistrationID 澶辫触锛屽仠姝㈤噸璇�')
+ return
+ }
+
+ this.jpushRegistrationRetryCount += 1
+ this.jpushRegistrationTimer = setTimeout(() => {
+ this.retryGetRegistrationID()
+ }, 1500)
+ })
+ // #endif
+ },
+
+ bindJPushAlias(forceRetry = false) {
+ // #ifdef APP-PLUS
+ if (!this.token) return
+ if (!this.jpushModule) {
+ this.initJPush()
+ return
+ }
+ const userId = this.$store.state.userInfo?.id || ''
+ if (!userId) return
+
+ if (forceRetry) {
+ this.jpushAliasRetryCount = 0
+ }
+
+ if (this.jpushAliasRetryTimer) {
+ clearTimeout(this.jpushAliasRetryTimer)
+ this.jpushAliasRetryTimer = null
+ }
+
+ this.jpushModule.setAlias({
+ alias: String(userId),
+ sequence: Date.now()
+ }, (result) => {
+ if (this.isJPushActionSuccess(result)) {
+ console.log('璁剧疆鏋佸厜鍒悕鎴愬姛:', JSON.stringify(result))
+ this.jpushAliasRetryCount = 0
+ return
+ }
+
+ console.log('璁剧疆鏋佸厜鍒悕澶辫触:', JSON.stringify(result))
+ if (this.jpushAliasRetryCount >= 3) {
+ return
+ }
+
+ this.jpushAliasRetryCount += 1
+ this.jpushAliasRetryTimer = setTimeout(() => {
+ this.bindJPushAlias()
+ }, 2000)
+ })
+ // #endif
+ },
+
+ deleteJPushAlias() {
+ // #ifdef APP-PLUS
+ if (!this.jpushModule) return
+ this.clearJPushRetryTimers()
this.jpushModule.deleteAlias({
sequence: Date.now()
}, (result) => {
- console.log('鍒犻櫎鏋佸厜鍒悕鎴愬姛:', JSON.stringify(result))
+ if (this.isJPushActionSuccess(result)) {
+ console.log('鍒犻櫎鏋佸厜鍒悕鎴愬姛:', JSON.stringify(result))
+ } else {
+ console.log('鍒犻櫎鏋佸厜鍒悕澶辫触:', JSON.stringify(result))
+ }
})
+ // #endif
},
checkAndStartLocationPolling() {
@@ -150,6 +277,7 @@
},
checkAppUpdate() {
+ // #ifdef APP-PLUS
this.$u.api.getApiVersion({ type: 0 }).then(res => {
if (res.code === 200 && res.data) {
const localVersionCode = plus.runtime.versionCode
@@ -176,6 +304,7 @@
}
}
})
+ // #endif
}
}
}
@@ -183,4 +312,4 @@
<style lang="scss">
@import "uview-ui/index.scss";
-</style>
\ No newline at end of file
+</style>
--
Gitblit v1.9.3