From d7fe714e69892d79a7d4c1a892b1b7c3310e1c8f Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 21 May 2026 12:45:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(sdk-core):=20XuqmSDK.initialize()=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20serverUrl=20=E5=8F=82=E6=95=B0=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=A7=81=E6=9C=89=E5=8C=96=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 传入 serverUrl 后 SDK 自动完成: - 配置所有服务端点(controlBaseUrl/fileBaseUrl/imApiBaseUrl/imWsUrl/pushBaseUrl/updateBaseUrl) - 通过反射调用 LicenseSDK.initialize() 注入私有化 appKey 和 baseUrl - wss/ws scheme 自动根据 https/http 推导 App 侧只需: XuqmSDK.initialize(context, appKey, serverUrl = "https://your-server.com", logLevel = WARN) Co-Authored-By: Claude Sonnet 4.6 --- .../src/main/java/com/xuqm/sdk/XuqmSDK.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt index 655e94e..51f4c2a 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt @@ -30,6 +30,7 @@ object XuqmSDK { fun initialize( context: Context, appKey: String, + serverUrl: String? = null, logLevel: LogLevel = LogLevel.WARN, ) { val applicationContext = context.applicationContext @@ -48,6 +49,35 @@ object XuqmSDK { initializedAppKey = appKey initialized = true } + serverUrl?.takeIf { it.isNotBlank() }?.let { configurePrivateServer(context, appKey, it) } + } + + private fun configurePrivateServer(context: Context, appKey: String, serverUrl: String) { + val base = serverUrl.trimEnd('/') + "/" + val wsBase = serverUrl.trimEnd('/') + .replace("https://", "wss://") + .replace("http://", "ws://") + configureServiceEndpoints( + ServiceEndpoints( + controlBaseUrl = base, + fileBaseUrl = base, + imApiBaseUrl = base, + imWsUrl = "$wsBase/ws/im", + pushBaseUrl = base, + updateBaseUrl = base, + ) + ) + // Initialize LicenseSDK via reflection — sdk-core cannot depend on sdk-license + runCatching { + val clazz = Class.forName("com.xuqm.sdk.license.LicenseSDK") + val instance = clazz.getField("INSTANCE").get(null) + val method = clazz.methods.firstOrNull { m -> + m.name == "initialize" && + m.parameterTypes.size == 4 && + m.parameterTypes[3] == String::class.java + } + method?.invoke(instance, context.applicationContext, appKey, null, base) + } } fun configureServiceEndpoints(endpoints: ServiceEndpoints) {