From e87b1b0af23129747e29eb8130ee7942abab6eec Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Tue, 5 May 2026 21:40:50 +0800 Subject: [PATCH] =?UTF-8?q?refactor(push):=20=E9=87=8D=E6=9E=84=E5=B0=8F?= =?UTF-8?q?=E7=B1=B3=E6=8E=A8=E9=80=81=E9=9B=86=E6=88=90=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除轮询注册ID的逻辑,改用系统回调机制获取推送令牌 - 将广播接收器替换为小米官方PushMessageReceiver实现 - 添加完整的推送消息处理方法(注册结果、透传消息、通知点击等) - 删除硬编码的应用ID和密钥配置 - 移除过时的小米推送相关类引用和方法调用 - 更新应用配置以匹配生产环境参数 --- sample-app/build.gradle.kts | 15 ++++- .../java/com/xuqm/sdk/sample/XuqmSampleApp.kt | 2 +- .../com/xuqm/sdk/sample/data/api/DemoApi.kt | 2 +- .../xuqm/sdk/push/vendor/XiaomiPushService.kt | 20 ------- .../sdk/push/xiaomi/XuqmXiaomiPushReceiver.kt | 60 +++++++------------ 5 files changed, 37 insertions(+), 62 deletions(-) diff --git a/sample-app/build.gradle.kts b/sample-app/build.gradle.kts index 88b4f7f..ed74206 100644 --- a/sample-app/build.gradle.kts +++ b/sample-app/build.gradle.kts @@ -8,7 +8,7 @@ android { compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { - applicationId = "com.xuqm.demo" + applicationId = "cn.org.bjca.wcert.ywq" minSdk = libs.versions.minSdk.get().toInt() targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 @@ -16,11 +16,24 @@ android { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } + signingConfigs { + create("ywq") { + storeFile = file("/Users/xuqinmin/Projects/TrustProjects/YiwangxinApp/android/keystores/wsecx.keystore") + storePassword = "bjca123456" + keyAlias = "bjcawsecx" + keyPassword = "bjca123456" + } + } + buildTypes { release { isMinifyEnabled = false + signingConfig = signingConfigs.getByName("ywq") proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } + debug { + signingConfig = signingConfigs.getByName("ywq") + } } compileOptions { diff --git a/sample-app/src/main/java/com/xuqm/sdk/sample/XuqmSampleApp.kt b/sample-app/src/main/java/com/xuqm/sdk/sample/XuqmSampleApp.kt index c177e1b..2e2cb1b 100644 --- a/sample-app/src/main/java/com/xuqm/sdk/sample/XuqmSampleApp.kt +++ b/sample-app/src/main/java/com/xuqm/sdk/sample/XuqmSampleApp.kt @@ -13,7 +13,7 @@ class XuqmSampleApp : Application() { AppDependencies.init(this) XuqmSDK.initialize( context = this, - appKey = "ak_demo_chat", + appKey = "ak_c6fce237cae94ef5ab71fda6", logLevel = if (BuildConfig.DEBUG) LogLevel.DEBUG else LogLevel.WARN, ) runBlocking { diff --git a/sample-app/src/main/java/com/xuqm/sdk/sample/data/api/DemoApi.kt b/sample-app/src/main/java/com/xuqm/sdk/sample/data/api/DemoApi.kt index 6d66280..1b24074 100644 --- a/sample-app/src/main/java/com/xuqm/sdk/sample/data/api/DemoApi.kt +++ b/sample-app/src/main/java/com/xuqm/sdk/sample/data/api/DemoApi.kt @@ -12,7 +12,7 @@ import retrofit2.http.POST import retrofit2.http.PUT import retrofit2.http.Query -const val DEMO_APP_ID = "ak_demo_chat" +const val DEMO_APP_ID = "ak_c6fce237cae94ef5ab71fda6" data class DemoResponse( val code: Int = 0, diff --git a/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/XiaomiPushService.kt b/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/XiaomiPushService.kt index fc3ad93..e3a07b7 100644 --- a/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/XiaomiPushService.kt +++ b/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/XiaomiPushService.kt @@ -4,7 +4,6 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Bundle import android.util.Log -import com.xuqm.sdk.push.PushSDK import com.xuqm.sdk.push.model.PushVendor import com.xuqm.sdk.push.model.PushVendorConfig @@ -41,7 +40,6 @@ class XiaomiPushService : PushVendorInterface { String::class.java, ).invoke(null, context, appId, appKey) Log.i(TAG, "Xiaomi push registration requested") - pollRegId(context, miPushClass) } else { Log.w(TAG, "Xiaomi appId/appKey not configured, skipping registration") } @@ -61,24 +59,6 @@ class XiaomiPushService : PushVendorInterface { } } - private fun pollRegId(context: Context, miPushClass: Class<*>) { - Thread { - repeat(8) { - val regId = runCatching { - miPushClass.getMethod("getRegId", Context::class.java) - .invoke(null, context) as? String - }.getOrNull() - if (!regId.isNullOrBlank()) { - PushSDK.updateNativePushToken(context, vendor, regId) - Log.i(TAG, "Xiaomi push token acquired") - return@Thread - } - Thread.sleep(1000) - } - Log.w(TAG, "Xiaomi push token not ready after registration") - }.start() - } - companion object { private const val TAG = "XiaomiPushService" } diff --git a/sdk-push/src/main/java/com/xuqm/sdk/push/xiaomi/XuqmXiaomiPushReceiver.kt b/sdk-push/src/main/java/com/xuqm/sdk/push/xiaomi/XuqmXiaomiPushReceiver.kt index 8c3c05f..bf1407e 100644 --- a/sdk-push/src/main/java/com/xuqm/sdk/push/xiaomi/XuqmXiaomiPushReceiver.kt +++ b/sdk-push/src/main/java/com/xuqm/sdk/push/xiaomi/XuqmXiaomiPushReceiver.kt @@ -1,57 +1,39 @@ package com.xuqm.sdk.push.xiaomi -import android.content.BroadcastReceiver import android.content.Context -import android.content.Intent import android.util.Log +import com.xiaomi.mipush.sdk.MiPushCommandMessage +import com.xiaomi.mipush.sdk.MiPushMessage +import com.xiaomi.mipush.sdk.PushMessageReceiver import com.xuqm.sdk.push.PushSDK import com.xuqm.sdk.push.model.PushVendor -class XuqmXiaomiPushReceiver : BroadcastReceiver() { +class XuqmXiaomiPushReceiver : PushMessageReceiver() { - override fun onReceive(context: Context, intent: Intent?) { - if (intent == null) return - val appContext = context.applicationContext - val regId = extractRegId(intent) - if (!regId.isNullOrBlank()) { - runCatching { - PushSDK.updateNativePushToken(appContext, PushVendor.XIAOMI, regId) - }.onFailure { error -> - Log.w(TAG, "Unable to persist Xiaomi push token: ${error.message}") - } + override fun onReceiveRegisterResult(context: Context, message: MiPushCommandMessage) { + if (message.resultCode != 0L) { + Log.w(TAG, "Xiaomi push registration failed: code=${message.resultCode} reason=${message.reason}") return } + val regId = message.commandArguments?.firstOrNull()?.takeIf { it.isNotBlank() } ?: return + Log.i(TAG, "Xiaomi push registered: regId=$regId") runCatching { - PushSDK.refreshNativePushToken(appContext, PushVendor.XIAOMI) + PushSDK.updateNativePushToken(context.applicationContext, PushVendor.XIAOMI, regId) }.onFailure { error -> - Log.d(TAG, "Xiaomi push callback ignored before SDK init: ${error.message}") + Log.w(TAG, "Unable to persist Xiaomi push token: ${error.message}") } } - private fun extractRegId(intent: Intent): String? { - val extras = intent.extras ?: return null - for (key in extras.keySet()) { - val value = extras.get(key) ?: continue - if (value is String && key.contains("reg", ignoreCase = true)) { - return value.takeIf { it.isNotBlank() } - } - if (value.javaClass.name == "com.xiaomi.mipush.sdk.MiPushCommandMessage") { - val resultCode = runCatching { - value.javaClass.getMethod("getResultCode").invoke(value) as? Long - }.getOrNull() - val command = runCatching { - value.javaClass.getMethod("getCommand").invoke(value) as? String - }.getOrNull() - val arguments = runCatching { - @Suppress("UNCHECKED_CAST") - value.javaClass.getMethod("getCommandArguments").invoke(value) as? List - }.getOrNull() - if ((resultCode == null || resultCode == 0L) && command.equals("register", ignoreCase = true)) { - return arguments?.firstOrNull { it.isNotBlank() } - } - } - } - return null + override fun onReceivePassThroughMessage(context: Context, message: MiPushMessage) { + Log.d(TAG, "Xiaomi pass-through message received: ${message.content}") + } + + override fun onNotificationMessageClicked(context: Context, message: MiPushMessage) { + Log.d(TAG, "Xiaomi notification clicked: ${message.title}") + } + + override fun onCommandResult(context: Context, message: MiPushCommandMessage) { + Log.d(TAG, "Xiaomi command result: ${message.command} code=${message.resultCode}") } companion object {