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") - } - } }