From e6fcdefacd37b6aa0e926f148fbac9d3470d3b5a Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 25 Jun 2026 18:36:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(push):=20=E4=BF=AE=E5=A4=8D=20VIVO=20push?= =?UTF-8?q?=20initialize=20=E8=B0=83=E7=94=A8=E5=A4=B1=E8=B4=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PushClient.initialize() 无参版本为 private,v4.x SDK 公开方法为 initialize(PushConfig)。通过反射构建 PushConfig.Builder().build() 后调用正确的公开方法。同时移除已废弃的 persistRegId()——v4.x SDK 的 regId 通过 onReceiveRegId 回调异步返回,不再提供同步 getRegId()。 Co-Authored-By: Claude Sonnet 4.6 --- .../xuqm/sdk/push/vendor/VivoPushService.kt | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/VivoPushService.kt b/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/VivoPushService.kt index 4e02441..ff49ad2 100644 --- a/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/VivoPushService.kt +++ b/sdk-push/src/main/java/com/xuqm/sdk/push/vendor/VivoPushService.kt @@ -2,7 +2,6 @@ package com.xuqm.sdk.push.vendor import android.content.Context import android.util.Log -import com.xuqm.sdk.push.PushSDK import com.xuqm.sdk.push.model.PushVendor import com.xuqm.sdk.push.model.PushVendorConfig import java.lang.reflect.Proxy @@ -38,7 +37,18 @@ class VivoPushService : PushVendorInterface { val pushClientClass = Class.forName("com.vivo.push.PushClient") val instance = pushClientClass.getMethod("getInstance", Context::class.java) .invoke(null, context) - pushClientClass.getMethod("initialize").invoke(instance) + + // v4.x SDK: initialize(PushConfig) — the no-arg overload is private + val builderClass = Class.forName("com.vivo.push.PushConfig\$Builder") + val builder = builderClass.getConstructor().newInstance() + runCatching { + builderClass.getMethod("agreePrivacyStatement", Boolean::class.javaPrimitiveType) + .invoke(builder, true) + } + val pushConfig = builderClass.getMethod("build").invoke(builder) + val pushConfigClass = Class.forName("com.vivo.push.PushConfig") + pushClientClass.getMethod("initialize", pushConfigClass).invoke(instance, pushConfig) + val listenerClass = Class.forName("com.vivo.push.IPushActionListener") val listener = Proxy.newProxyInstance( listenerClass.classLoader, @@ -47,19 +57,14 @@ class VivoPushService : PushVendorInterface { if (method.name == "onStateChanged") { val state = args?.firstOrNull() as? Int if (state == 0) { - persistRegId(context, pushClientClass, instance) + Log.i(TAG, "Vivo push turnOnPush success, awaiting onReceiveRegId callback") } else { - Log.w(TAG, "Vivo push turnOnPush state=$state") + Log.e(TAG, "Vivo push turnOnPush failed: state=$state") } } null } - runCatching { - pushClientClass.getMethod("turnOnPush", listenerClass) - .invoke(instance, listener) - }.onFailure { - persistRegId(context, pushClientClass, instance) - } + pushClientClass.getMethod("turnOnPush", listenerClass).invoke(instance, listener) Log.i(TAG, "Vivo push registration requested") }.onFailure { error -> Log.e(TAG, "Vivo push registration failed: ${error.message}") @@ -81,18 +86,4 @@ class VivoPushService : PushVendorInterface { companion object { private const val TAG = "VivoPushService" } - - private fun persistRegId( - context: Context, - pushClientClass: Class<*>, - instance: Any, - ) { - val regId = runCatching { - pushClientClass.getMethod("getRegId").invoke(instance) as? String - }.getOrNull() - if (!regId.isNullOrBlank()) { - PushSDK.updateNativePushToken(context, vendor, regId) - Log.i(TAG, "Vivo push token acquired") - } - } }