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

如何基于ConsentForm创建实例?需提供Java及Kotlin实现方案

这里给你整理了基于Google Consent SDK实现授权表单的完整代码方案,包含Java和Kotlin版本,还补充了关键的实现细节和注意事项:

第一步:添加依赖

首先确保在你的app/build.gradle中引入Consent SDK依赖(建议使用最新版本):

dependencies {
    implementation 'com.google.android.ads.consent:consent-library:1.0.6'
}

Java 完整实现

下面是包含表单构建、加载、显示及回调处理的完整代码:

import com.google.android.ads.consent.ConsentForm;
import com.google.android.ads.consent.ConsentFormListener;
import com.google.android.ads.consent.ConsentStatus;
import com.google.android.ads.consent.ConsentInformation;
import android.content.Context;
import android.net.Uri;
import android.content.SharedPreferences;

public class ConsentHandler {
    private final Context mContext;
    private final Uri mPrivacyPolicyUri;
    private ConsentForm mConsentForm;

    public ConsentHandler(Context context, String privacyPolicyUrl) {
        this.mContext = context;
        this.mPrivacyPolicyUri = Uri.parse(privacyPolicyUrl);
        // 开发阶段添加测试设备ID,强制显示表单
        ConsentInformation.getInstance(mContext).addTestDevice("YOUR_TEST_DEVICE_ID");
    }

    // 检查并显示授权表单
    public void checkAndShowConsentForm() {
        // 先判断是否需要显示表单(GDPR合规地区)
        if (ConsentInformation.getInstance(mContext).isRequestLocationInEeaOrUnknown()) {
            loadConsentForm();
        } else {
            // 非合规地区,直接使用个性化广告
            saveConsentStatus(ConsentStatus.PERSONALIZED);
        }
    }

    // 构建并加载表单
    private void loadConsentForm() {
        mConsentForm = new ConsentForm.Builder(mContext, mPrivacyPolicyUri)
                .withListener(new ConsentFormListener() {
                    @Override
                    public void onConsentFormLoaded() {
                        // 表单加载完成后立即显示
                        if (mConsentForm != null) {
                            mConsentForm.show();
                        }
                    }

                    @Override
                    public void onConsentFormOpened() {
                        // 表单已打开,可记录日志或更新UI状态
                    }

                    @Override
                    public void onConsentFormClosed(ConsentStatus consentStatus, Boolean userPrefersAdFree) {
                        // 保存用户选择的状态
                        saveConsentStatus(consentStatus);

                        // 处理无广告选项(如果启用了withAdFreeOption)
                        if (userPrefersAdFree != null && userPrefersAdFree) {
                            // 跳转至内购页面或处理无广告逻辑
                        }
                    }

                    @Override
                    public void onConsentFormError(String errorDescription) {
                        // 表单加载失败,默认使用非个性化广告
                        saveConsentStatus(ConsentStatus.NON_PERSONALIZED);
                    }
                })
                .withPersonalizedAdsOption()
                .withNonPersonalizedAdsOption()
                // 可选:添加无广告付费选项
                // .withAdFreeOption()
                .build();

        mConsentForm.load();
    }

    // 持久化保存用户授权状态
    private void saveConsentStatus(ConsentStatus status) {
        SharedPreferences prefs = mContext.getSharedPreferences("ConsentPrefs", Context.MODE_PRIVATE);
        prefs.edit().putString("consent_status", status.name()).apply();
    }
}

Kotlin 完整实现

对应Kotlin版本的简洁实现:

import com.google.android.ads.consent.ConsentForm
import com.google.android.ads.consent.ConsentFormListener
import com.google.android.ads.consent.ConsentStatus
import com.google.android.ads.consent.ConsentInformation
import android.content.Context
import android.net.Uri
import android.content.SharedPreferences

class ConsentHandler(private val context: Context, privacyPolicyUrl: String) {
    private val privacyPolicyUri = Uri.parse(privacyPolicyUrl)
    private var consentForm: ConsentForm? = null

    init {
        // 开发阶段添加测试设备ID
        ConsentInformation.getInstance(context).addTestDevice("YOUR_TEST_DEVICE_ID")
    }

    fun checkAndShowConsentForm() {
        if (ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown()) {
            loadConsentForm()
        } else {
            saveConsentStatus(ConsentStatus.PERSONALIZED)
        }
    }

    private fun loadConsentForm() {
        consentForm = ConsentForm.Builder(context, privacyPolicyUri)
            .withListener(object : ConsentFormListener() {
                override fun onConsentFormLoaded() {
                    consentForm?.show()
                }

                override fun onConsentFormOpened() {
                    // 表单打开后的处理逻辑
                }

                override fun onConsentFormClosed(consentStatus: ConsentStatus, userPrefersAdFree: Boolean?) {
                    saveConsentStatus(consentStatus)
                    userPrefersAdFree?.takeIf { it }?.run {
                        // 处理无广告选项逻辑
                    }
                }

                override fun onConsentFormError(errorDescription: String?) {
                    saveConsentStatus(ConsentStatus.NON_PERSONALIZED)
                }
            })
            .withPersonalizedAdsOption()
            .withNonPersonalizedAdsOption()
            // .withAdFreeOption() // 可选:启用无广告选项
            .build()

        consentForm?.load()
    }

    private fun saveConsentStatus(status: ConsentStatus) {
        val prefs = context.getSharedPreferences("ConsentPrefs", Context.MODE_PRIVATE)
        prefs.edit().putString("consent_status", status.name).apply()
    }
}

关键注意事项

  • 隐私政策URL:必须是可公开访问的有效链接,否则表单无法正常加载
  • 状态持久化:用户的选择需要保存到本地,下次启动应用时直接读取,避免重复显示表单
  • 测试模式:开发时添加测试设备ID,可以强制显示表单进行调试
  • GDPR判断:SDK提供的isRequestLocationInEeaOrUnknown()方法可以判断用户是否在合规地区,仅在该地区需要显示表单

内容的提问来源于stack exchange,提问作者Yuba Sin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:04:11