You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Mailchimp SDK:Android Release异常及结果回调实现问题

问题解答

一、Android端获取联系人创建/更新的最终结果

Mailchimp Android SDK的createOrUpdateContact是异步执行的,直接调用getStatusById只能获取当前队列状态(如QUEUED),无法拿到最终的成功/失败结果。你可以通过注册SdkCallback来监听任务状态变化,具体实现如下:

1. 实现SdkCallback接口

class MailchimpCallback : SdkCallback {
    override fun onSdkInitialized() {
        // SDK初始化完成的回调
    }

    override fun onTaskCompleted(taskId: String, taskResult: TaskResult) {
        // 任务完成时的回调,可获取最终结果
        when (taskResult) {
            is TaskResult.Success -> {
                // 联系人创建/更新成功,可通过taskId匹配发起任务时的UUID
            }
            is TaskResult.Failure -> {
                // 任务失败,获取错误信息
                val errorMessage = taskResult.error.message
            }
        }
    }
}

2. 注册回调到SDK

在初始化Mailchimp SDK后,注册自定义回调:

val configuration = MailchimpSdkConfiguration.Builder(appContext, sdkKey)
    .isAutoTaggingEnabled(true)
    .build()
Mailchimp.initialize(configuration)

// 注册回调
Mailchimp.sharedInstance().addSdkCallback(MailchimpCallback())

// 发起创建/更新联系人任务
val taskId = Mailchimp.sharedInstance().createOrUpdateContact(newContact)

当任务完成(成功或失败)时,onTaskCompleted方法会被触发,你就能拿到最终结果。

如果使用Kotlin协程,还可以封装成挂起函数等待结果:

suspend fun waitForContactResult(taskId: String): TaskResult {
    val deferred = CompletableDeferred<TaskResult>()
    val callback = object : SdkCallback {
        override fun onSdkInitialized() {}
        override fun onTaskCompleted(id: String, result: TaskResult) {
            if (id == taskId) {
                deferred.complete(result)
                Mailchimp.sharedInstance().removeSdkCallback(this)
            }
        }
    }
    Mailchimp.sharedInstance().addSdkCallback(callback)
    return deferred.await()
}

// 调用示例
CoroutineScope(Dispatchers.IO).launch {
    val taskId = Mailchimp.sharedInstance().createOrUpdateContact(newContact)
    val result = waitForContactResult(taskId)
    // 处理最终结果
}

二、Release模式无法创建联系人的原因及解决方法

Release模式失效最常见的原因是代码混淆导致Mailchimp SDK的类被错误混淆(Debug模式默认关闭混淆,因此能正常工作)。你需要在混淆规则文件(proguard-rules.pro)中添加以下规则:

# 保留Mailchimp SDK的所有类与方法
-keep class com.mailchimp.sdk.** { *; }
-dontwarn com.mailchimp.sdk.**

同时检查以下几点:

  • 确认AndroidManifest.xml已添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 检查Release模式下SDK初始化是否成功,可通过onSdkInitialized回调或日志确认。
  • 确认Release模式下没有限制第三方SDK的网络请求(如自定义网络拦截器、安全配置等)。

内容的提问来源于stack exchange,提问作者Zoltán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:12:26