کسب رضایت با بستر پیام‌رسانی کاربر

پیش نیازها

بخوانید که چگونه الزامات IAB بر پیام‌های رضایت اتحادیه اروپا تأثیر می‌گذارد .

مقدمه

تحت خط‌مشی رضایت کاربر اتحادیه اروپا Google، شما باید اطلاعات مشخصی را برای کاربران خود در منطقه اقتصادی اروپا (EEA) همراه با بریتانیا انجام دهید و رضایت آنها را برای استفاده از کوکی‌ها یا سایر فضای ذخیره‌سازی محلی، در صورت نیاز قانونی، و استفاده از داده‌های شخصی کسب کنید ( مانند AdID) برای ارائه تبلیغات. این سیاست منعکس کننده الزامات دستورالعمل حریم خصوصی الکترونیک اتحادیه اروپا و مقررات عمومی حفاظت از داده ها (GDPR) است.

برای حمایت از ناشران در انجام وظایف خود تحت این خط‌مشی، Google پلتفرم پیام‌رسانی کاربر (UMP) SDK را ارائه می‌دهد که جایگزین کیت توسعه نرم‌افزار رضایت منبع باز قبلی می‌شود. UMP SDK برای پشتیبانی از آخرین استانداردهای IAB به روز شده است. ما همچنین فرآیند راه‌اندازی فرم‌های رضایت و فهرست کردن شرکای تبلیغاتی را ساده کرده‌ایم. همه این پیکربندی‌ها اکنون می‌توانند به راحتی درAdMob Privacy & Messaging مدیریت شوند.

بهترین روش این است که هر بار که کاربر برنامه شما را راه اندازی می کند، یک فرم بارگیری کنید، حتی اگر تشخیص دهید رضایت لازم نیست، به طوری که در صورتی که کاربر بخواهد تنظیمات رضایت خود را تغییر دهد، فرم آماده نمایش باشد.

این راهنما نحوه نصب SDK، پیاده سازی راه حل های IAB و فعال کردن ویژگی های تست را به شما آموزش می دهد.

با Gradle نصب کنید

کتابخانه را در build.gradle برنامه خود قرار دهید:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.google.android.ump:user-messaging-platform:2.0.0'
}

فراموش نکنید که Gradle را پس از پایان همگام سازی کنید.

شناسه برنامه را به AndroidManifest.xmlاضافه کنید

با دنبال کردن دستورالعمل‌های مرکز راهنمایی ، شناسه برنامه خود را دریافت کنید.

شناسه برنامه خود را به AndroidManifest.xmlخود اضافه کنید:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.rewardedinterstitialexample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="YOUR-APP-ID"/>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

با استفاده از SDK

SDK برای استفاده به صورت خطی طراحی شده است. مراحل استفاده از SDK عبارتند از:

  1. آخرین اطلاعات رضایت را درخواست کنید.
  2. بررسی کنید که آیا رضایت لازم است یا خیر.
  3. بررسی کنید که آیا فرمی در دسترس است یا خیر و اگر چنین است فرمی را بارگیری کنید.
  4. فرم را ارائه دهید.
  5. راهی برای تغییر رضایت کاربران ارائه دهید.

توصیه می شود در هر راه اندازی برنامه درخواست به روز رسانی اطلاعات رضایت دهید. این مشخص می کند که آیا کاربر شما نیاز به ارائه رضایت دارد یا خیر.

جاوا

import android.os.Bundle;
import com.google.android.ump.ConsentForm;
import com.google.android.ump.ConsentInformation;
import com.google.android.ump.ConsentRequestParameters;
import com.google.android.ump.FormError;
import com.google.android.ump.UserMessagingPlatform;

public class MainActivity extends AppCompatActivity {
  private ConsentInformation consentInformation;
  private ConsentForm consentForm;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Set tag for underage of consent. Here false means users are not underage.
    ConsentRequestParameters params = new ConsentRequestParameters
        .Builder()
        .setTagForUnderAgeOfConsent(false)
        .build();

    consentInformation = UserMessagingPlatform.getConsentInformation(this);
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        new ConsentInformation.OnConsentInfoUpdateSuccessListener() {
          @Override
          public void onConsentInfoUpdateSuccess() {
            // The consent information state was updated.
            // You are now ready to check if a form is available.
          }
        },
        new ConsentInformation.OnConsentInfoUpdateFailureListener() {
          @Override
          public void onConsentInfoUpdateFailure(FormError formError) {
            // Handle the error.
          }
        });
  }
}

کاتلین

import android.os.Bundle
import com.google.android.ump.*

class MainActivity : AppCompactActivity() {
  private lateinit var consentInformation: ConsentInformation
  private var consentForm: ConsentForm? = null

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Set tag for underage of consent. Here false means users are not underage.
    val params = ConsentRequestParameters.Builder()
        .setTagForUnderAgeOfConsent(false)
        .build()

    consentInformation = UserMessagingPlatform.getConsentInformation(this)
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        {
          // The consent information state was updated.
          // You are now ready to check if a form is available.
        },
        { formError ->
          // Handle the error.
        }
    )
  }
}

در صورت موجود بودن فرم را بارگیری کنید

وقتی مشخص کردید که از یک کاربر رضایت می‌خواهید، گام بعدی این است که تعیین کنید آیا یک فرم در دسترس است یا خیر.

دلایل مختلفی وجود دارد که یک فرم ممکن است در دسترس نباشد، مانند:

  • کاربر ردیابی تبلیغات محدودی را فعال کرده است.
  • شما کاربر را زیر سن رضایت تگ کردید.

برای بررسی اینکه آیا یک فرم در دسترس است، از isConsentFormAvailable() در نمونه ConsentInformation استفاده کنید. یک روش wrapper برای بارگیری فرم اضافه کنید:

جاوا

...
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        new ConsentInformation.OnConsentInfoUpdateSuccessListener() {
          @Override
          public void onConsentInfoUpdateSuccess() {
            // The consent information state was updated.
            // You are now ready to check if a form is available.
            if (consentInformation.isConsentFormAvailable()) {
              loadForm();
            }
          }
        },
        new ConsentInformation.OnConsentInfoUpdateFailureListener() {
          @Override
          public void onConsentInfoUpdateFailure(FormError formError) {
            // Handle the error.
          }
        });
}

public void loadForm() {

}

کاتلین

...
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        {
          // The consent information state was updated.
          // You are now ready to check if a form is available.
          if (consentInformation.isConsentFormAvailable) {
            loadForm()
          }
        },
        { formError ->
          // Handle the error.
        }
    )
}

private fun loadForm() {

}

برای بارگذاری فرم از loadConsentForm() استاتیک در کلاس UserMessagingPlatform استفاده می کنید. این متد فقط باید از thread اصلی فراخوانی شود. loadForm() خود را به این صورت تغییر دهید:

جاوا

public void loadForm() {
  UserMessagingPlatform.loadConsentForm(
      this, new UserMessagingPlatform.OnConsentFormLoadSuccessListener() {
        @Override
        public void onConsentFormLoadSuccess(ConsentForm consentForm) {
          MainActivity.this.consentForm = consentForm;
        }
      },
      new UserMessagingPlatform.OnConsentFormLoadFailureListener() {
        @Override
        public void onConsentFormLoadFailure(FormError formError) {
          // Handle the error.
        }
      });
}

کاتلین

private fun loadForm() {
  UserMessagingPlatform.loadConsentForm(
      this,
      { consentForm ->
        this.consentForm = consentForm
      },
      { formError ->
        // Handle the error.
      }
  )
}

در صورت نیاز فرم را ارائه دهید

برای ارائه فرم، از متد show() در نمونه ConsentForm استفاده کنید. شما باید تعیین کنید که آیا کاربر قبل از ارائه فرم به رضایت نیاز دارد یا خیر. برای بررسی اینکه آیا رضایت لازم است، getConsentStatus() را در شیء ConsentInformation بررسی کنید که یک عدد از نوع ConsentInformation.ConsentStatus را برمی گرداند. چهار مقدار ممکن وجود دارد:

  • ConsentStatus.UNKNOWN : وضعیت رضایت نامشخص.
  • ConsentStatus.REQUIRED : رضایت کاربر مورد نیاز است اما هنوز کسب نشده است.
  • ConsentStatus.NOT_REQUIRED : رضایت کاربر لازم نیست. به عنوان مثال، کاربر در EEA یا انگلستان نیست.
  • ConsentStatus.OBTAINED : رضایت کاربر به دست آمده است. شخصی سازی تعریف نشده است.

loadForm() خود را به این صورت تغییر دهید:

جاوا

public void loadForm() {
  UserMessagingPlatform.loadConsentForm(
      this, new UserMessagingPlatform.OnConsentFormLoadSuccessListener() {
        @Override
        public void onConsentFormLoadSuccess(ConsentForm consentForm) {
          MainActivity.this.consentForm = consentForm;
          if (consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.REQUIRED) {
            consentForm.show(
                MainActivity.this,
                    new ConsentForm.OnConsentFormDismissedListener() {
                      @Override
                      public void onConsentFormDismissed(@Nullable FormError formError) {
                        // Handle dismissal by reloading form.
                        loadForm();
                      }
                    });
          }
        }
      },
      new UserMessagingPlatform.OnConsentFormLoadFailureListener() {
        @Override
        public void onConsentFormLoadFailure(FormError formError) {
          // Handle the error.
        }
      });
}

کاتلین

private fun loadForm() {
  UserMessagingPlatform.loadConsentForm(
      this,
      { consentForm ->
        this.consentForm = consentForm
        if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.REQUIRED) {
          consentForm.show(this) { formError ->
            // Handle dismissal by reloading form.
            loadForm()
          }
        }
      },
      { formError ->
        // Handle the error.
      }
  )
}

اگر رضایت لازم نیست، می توانید به فرم ارجاع دهید تا کاربر شما بتواند وضعیت رضایت خود را تغییر دهد.

آزمایش کردن

جغرافی اجباری

UMP SDK راهی برای آزمایش رفتار برنامه شما ارائه می‌کند که گویی دستگاه در منطقه اقتصادی اروپا با استفاده از روش setDebugGeography() در ConsentDebugSettings.Builder قرار دارد.

برای استفاده از قابلیت اشکال زدایی باید شناسه هش شده دستگاه آزمایشی خود را در تنظیمات اشکال زدایی برنامه خود ارائه دهید. اگر درخواست requestConsentInfoUpdate() را بدون تنظیم این مقدار فراخوانی کنید، برنامه شما هنگام اجرا هش شناسه مورد نیاز را ثبت خواهد کرد.

جاوا

ConsentDebugSettings debugSettings = new ConsentDebugSettings.Builder(this)
    .setDebugGeography(ConsentDebugSettings
        .DebugGeography
        .DEBUG_GEOGRAPHY_EEA)
    .addTestDeviceHashedId("TEST-DEVICE-HASHED-ID")
    .build();

ConsentRequestParameters params = new ConsentRequestParameters
    .Builder()
    .setConsentDebugSettings(debugSettings)
    .build();

consentInformation = UserMessagingPlatform.getConsentInformation(this);
consentInformation.requestConsentInfoUpdate(
    this,
    params,
    new ConsentInformation.OnConsentInfoUpdateSuccessListener() {
      @Override
      public void onConsentInfoUpdateSuccess() {
        // The consent information state was updated.
        // You are now ready to check if a form is available.
      }
    },
    new ConsentInformation.OnConsentInfoUpdateFailureListener() {
      @Override
      public void onConsentInfoUpdateFailure(FormError formError) {
        // Handle the error.
      }
    });

کاتلین

val debugSettings = ConsentDebugSettings.Builder(this)
    .setDebugGeography(ConsentDebugSettings
        .DebugGeography
        .DEBUG_GEOGRAPHY_EEA)
    .addTestDeviceHashedId("TEST-DEVICE-HASHED-ID")
    .build()

val params = ConsentRequestParameters
    .Builder()
    .setConsentDebugSettings(debugSettings)
    .build()

consentInformation = UserMessagingPlatform.getConsentInformation(this)
consentInformation.requestConsentInfoUpdate(
    this,
    params,
    {
      // The consent information state was updated.
      // You are now ready to check if a form is available.
    },
    { formError ->
      // Handle the error.
    }
  )

برای اینکه SDK را مجبور کنید با دستگاه طوری رفتار کند که گویی در EEA یا بریتانیا نیست، از DebugGeography.DEBUG_GEOGRAPHY_NOT_EEA استفاده کنید. توجه داشته باشید که تنظیمات اشکال زدایی فقط در دستگاه های آزمایشی کار می کند. شبیه سازها نیازی به اضافه شدن به لیست شناسه دستگاه ندارند زیرا آزمایش را به طور پیش فرض فعال کرده اند.

در آزمایش برنامه خود با UMP SDK، ممکن است بازنشانی وضعیت SDK برای شما مفید باشد تا بتوانید اولین تجربه نصب کاربر را شبیه سازی کنید. SDK روش reset را برای انجام این کار ارائه می دهد.

جاوا

consentInformation.reset();

کاتلین

consentInformation.reset()

تأخیر اندازه‌گیری برنامه (اختیاری)

به طور پیش‌فرض، Google Mobile Ads SDK اندازه‌گیری برنامه را راه‌اندازی می‌کند و بلافاصله پس از شروع برنامه، داده‌های رویداد در سطح کاربر را به Google ارسال می‌کند.این رفتار مقداردهی اولیه تضمین می‌کند که می‌توانید معیارهای کاربر AdMob را بدون ایجاد تغییرات اضافی در کد فعال کنید.

با این حال، اگر برنامه شما قبل از ارسال این رویدادها به رضایت کاربر نیاز دارد، می‌توانید اندازه‌گیری برنامه را تا زمانی که صریحاً SDK تبلیغات تلفن همراه را مقداردهی اولیه کنید یا آگهی بارگیری کنید به تأخیر بیاندازید.

برای به تاخیر انداختن اندازه‌گیری برنامه، <meta-data> زیر را در AndroidManifest.xml خود اضافه کنید.

<manifest>
     <application>
        <!-- Delay app measurement until MobileAds.initialize() is called. -->
        <meta-data
            android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
            android:value="true"/>
    </application>
</manifest>

پادرمیانی

اگر از میانجی‌گری استفاده می‌کنید، باید بر اساس چارچوب رضایتی که برای استفاده در برنامه خود انتخاب می‌کنید، رضایت شرکای میانجی‌گری خود را به گونه‌ای متفاوت مدیریت کنید. Google از چارچوب رضایت IAB پشتیبانی می کند اما همچنین به شما امکان می دهد راه حل رضایت سفارشی خود را داشته باشید. در زیر جزئیات مربوط به نحوه رسیدگی به میانجیگری در هر یک از این گزینه ها آمده است.درباره راه حل رضایت ما بیشتر بیاموزید .