如何基于ConsentForm创建实例?需提供Java及Kotlin实现方案
Google Consent SDK Android 授权表单完整实现方案
这里给你整理了基于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
相关产品推荐
相关产品推荐

