Récemment, j'ai reçu une demande d'accès aux exigences de Google Admob (RGPD).
Le Règlement Général sur la Protection des Données (RGPD) est une nouvelle loi européenne sur la protection des données entrée en vigueur en mai 2018. Bien que le RGPD soit un règlement européen, de nombreuses entités non européennes qui utilisent des services de publicité en ligne seront également concernées. Selon la politique de consentement des utilisateurs de l'UE de Google , certaines informations doivent être divulguées aux utilisateurs de l'Espace économique européen (EEE) et du Royaume-Uni, ainsi que l'utilisation de données personnelles (telles que AdID) pour diffuser des annonces. Cette politique reflète les exigences de la directive européenne ePrivacy et du règlement général sur la protection des données (RGPD). Afin que les fournisseurs se conforment à cette politique, le SDK User Messaging Platform (UMP) est fourni pour prendre en charge les normes IAB. Interactive Advertising Bureau, en abrégé IAB.
1.Introduisez la bibliothèque
dependencies {
implementation 'com.google.android.ump:user-messaging-platform:2.1.0'
implementation 'com.google.android.gms:play-services-ads:22.2.0'
}
2. Configuration Build.gradle dans le répertoire racine du projet
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
3. Ajoutez l'ID de l'application Admob à l' AndroidManifest.xml
ID du fichier du projet et obtenez le propre ID de l'application dans la console Google.
<manifest>
<application>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>
</manifest>
4. Si votre application utilise le SDK Google Mobile Ads 20.4.0 ou supérieur, vous pouvez ignorer cette étape, car le SDK déclarera automatiquement l'autorisation com.google.android.gms.permission.AD_ID
et pourra y accéder lorsque l'identifiant publicitaire sera disponible.
Pour les applications utilisant le SDK Google Mobile Ads version 20.3.0 ou antérieure et ciblant Android 13, vous devez ajouter l'accès au SDK Google Mobile Ads à l'identifiant publicitaire dans votre com.google.android.gms.permission.AD_ID
fichier. AndroidManifest.xml
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
5. Le code demande d'obtenir les dernières informations de sollicitation d'avis des utilisateurs, vérifie si le formulaire est disponible et, si tel est le cas, charge le formulaire.
// UMP 接入 实例化 ConsentForm 和 ConsentInformation
private static ConsentForm mConsentForm;
private static ConsentInformation mConsentInformation;
ConsentRequestParameters params = new ConsentRequestParameters
.Builder()
.setTagForUnderAgeOfConsent(false)
.build();
mConsentInformation = UserMessagingPlatform.getConsentInformation(mContext);
//requestConsentInfoUpdate 请求最新的同意信息
mConsentInformation.requestConsentInfoUpdate((Activity) mContext, params, new ConsentInformation.OnConsentInfoUpdateSuccessListener() {
@Override
public void onConsentInfoUpdateSuccess() {
// 同意信息更新成功,isConsentFormAvailable 检测表单是否可用
if(mConsentInformation.isConsentFormAvailable()){
LogD(" ~ 表单可用加载并展示 ~ ");
//loadAndShowConsentFormIfRequired 加载用户意见征求表单并展示
UserMessagingPlatform.loadAndShowConsentFormIfRequired((Activity) mContext, new ConsentForm.OnConsentFormDismissedListener() {
@Override
public void onConsentFormDismissed(@Nullable FormError formError) {
if (null != formError) {
// 表单加载失败或者无法显示
Log.w(LOG_TAG, "loadAndShowError" + String.format("%s: %s",
formError.getErrorCode(),
formError.getMessage()));
}
// canRequestAds 检查是否已征得用户同意
Log.e(LOG_TAG, "征得同意" + mConsentInformation.canRequestAds());
}
});
}
}
}, new ConsentInformation.OnConsentInfoUpdateFailureListener() {
@Override
public void onConsentInfoUpdateFailure(@NonNull FormError formError) {
// 当同意信息更新失败时调用。
if(null != formError){
Log.w(LOG_TAG, "presentForm requestConsentInfoUpdate--->"+String.format("%s: %s",
formError.getErrorCode(),
formError.getMessage()));
}
}
});
6. Créez un message RGPD pour l'application (admob le crée en arrière-plan, notre éditeur se charge de le créer)
7. Le retrait des avis des utilisateurs est une exigence du plan de sollicitation d'avis des utilisateurs « Confidentialité et messagerie ». Vous devez donc fournir un bouton dans le menu de l'application et leur réafficher le message de consentement de l'utilisateur.
UserMessagingPlatform.loadConsentForm((Activity) mContext, new UserMessagingPlatform.OnConsentFormLoadSuccessListener() {
@Override
public void onConsentFormLoadSuccess(@NonNull ConsentForm consentForm) {
Log.d(LOG_TAG, "onConsentFormLoadSuccess: " + mConsentInformation.getConsentStatus());
mConsentForm = consentForm;
mConsentForm.show((Activity) mContext, new ConsentForm.OnConsentFormDismissedListener() {
@Override
public void onConsentFormDismissed(@Nullable FormError formError) {
if (null != formError) {
Log.d(LOG_TAG, "onConsentFormDismissed: " + formError.getErrorCode() + "--->" + formError.getMessage());
}
}
});
}
}, new UserMessagingPlatform.OnConsentFormLoadFailureListener() {
@Override
public void onConsentFormLoadFailure(@NonNull FormError formError) {
// Handle the error.
if (null != formError) {
Log.w(LOG_TAG, "loadForm onConsentFormLoadFailure--->" + String.format("%s: %s",
formError.getErrorCode(),
formError.getMessage()));
}
}
});
Résumer
- ① Chargez le formulaire à chaque fois que l'utilisateur démarre l'application afin qu'il puisse être affiché lorsque l'utilisateur souhaite modifier ses paramètres de consentement.
-
② Affichez le formulaire lorsque l'utilisateur sélectionne le lien correspondant dans le menu de l'application.
-
Remarque : étant donné que nous sommes connectés à la plate-forme d'agrégation tierce Applovin, il n'y a pas de publicité initiale dans l'application.
Testé :
S'il appartient à l'Union européenne, le premier package d'installation affichera le formulaire, puis cliquera sur le bouton pour afficher le formulaire à chaque fois ;
S'il n'appartient pas à l'Union européenne, le package d'installation initiale n'affichera pas le formulaire et le bouton du formulaire n'a pas besoin d'être affiché. Le bouton détermine s'il faut afficher en fonction de ConsentStatus.NOT_REQUIRED ;
if (null == mConsentInformation) {
mConsentInformation = UserMessagingPlatform.getConsentInformation(mContext);
}
Log.d(LOG_TAG, " isSupportGDPR ConsentStatus: " + mConsentInformation.getConsentStatus());
/**
* 表单四种状态:
* ①ConsentStatus.UNKNOWN 未知的同意状态
* ②ConsentStatus.REQUIRED 需要但尚未获得用户同意
* ③ConsentStatus.NOT_REQUIRED:不需要用户同意。例如,用户不在欧洲经济区或英国
* ④ConsentStatus.OBTAINED:已获得用户同意。个性化未定义。
*/
if (mConsentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.NOT_REQUIRED) {
//不展示按钮
} else {
//展示按钮
}