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