شارك بتعليقاتك، وساعد في تشكيل خارطة طريق SDK لإعلانات Google على الجوال. عليك المشاركة في الاستطلاع السنوي لحزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة لعام 2023 قبل إغلاقه في 5 أيار (مايو) 2023.

البدء

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

بموجب سياسة موافقة المستخدم في الاتحاد الأوروبي من Google، يجب الإفصاح عن معلومات معينة للمستخدمين في المنطقة الاقتصادية الأوروبية (EEA) والمملكة المتحدة والحصول على موافقتهم لاستخدام ملفات تعريف الارتباط أو غير ذلك من البيانات المحفوظة على أجهزتهم المحلية حيثما كان ذلك مطلوبًا قانونًا، وكذلك استخدام البيانات الشخصية (مثل AdID) لعرض الإعلانات. تعكس هذه السياسة متطلبات توجيه الاتحاد الأوروبي بشأن الخصوصية الإلكترونية واللائحة العامة لحماية البيانات (GDPR).

لدعم الناشرين في الوفاء بالتزاماتهم بموجب هذه السياسة، تقدّم Google حزمة تطوير البرامج (SDK) لمنصة رسائل المستخدم (UMP). تم تحديث حزمة تطوير البرامج (SDK) في UMP لدعم أحدث معايير مكتب الإعلانات التفاعلية (IAB). يمكن الآن التعامل بكل سهولة مع هذه التهيئات في AdMob الخصوصية والمراسلة.

المتطلبات الأساسية

أنواع رسائل المستخدم

يمكنك الاطّلاع على أنواع رسائل المستخدم للحصول على قائمة كاملة بالرسائل المسموح بها. للحصول على إرشادات محددة حول تنفيذ كل نوع من أنواع الرسائل، راجع شريط التنقل الأيمن.

التثبيت باستخدام Gradle

إذا كنت تستخدم الإصدار 19.8.0 من حزمة SDK لإعلانات Google على الأجهزة الجوّالة أو إصدارًا أحدث، يتم تضمين حزمة تطوير البرامج (SDK) في Google User Messaging Platform مع الحزمة. إذا كنت تستخدم إصدارًا سابقًا من SDK لإعلانات الجوّال، فاحرص على تضمين حزمة تطوير البرامج (SDK) في Google User Messaging Platform على موقع build.gradle لتطبيقك كما يلي:

dependencies {
    // This dependency is automatically included by Google Mobile Ads SDK 19.8.0
    // or higher.
    implementation 'com.google.android.ump:user-messaging-platform:2.0.0'
}

بعد إجراء التغييرات على build.gradle لتطبيقك، تأكد من مزامنة مشروعك مع ملفات Gradle.

بعد ذلك، اعثر على رقم تعريف تطبيقك وإضافته إلى 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">
        <!-- Sample app ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
        <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>

تحديد ما إذا كانت الرسالة بحاجة إلى العرض أم لا

يجب أن تطلب تحديثًا لمعلومات موافقة المستخدم في كل مرة يتم فيها تشغيل تطبيق، وذلك باستخدام requestConsentInfoUpdate() قبل تحميل نموذج. يمكن أن يحدد هذا ما إذا كان المستخدم بحاجة إلى تقديم موافقة إذا لم يكن قد فعل ذلك من قبل أو ما إذا كانت موافقته قد انتهت.

استخدِم المعلومات المخزَّنة في الكائن consentInformation عند تقديم النموذج عند الطلب.

في ما يلي مثال على كيفية التحقق من الحالة عند بدء تشغيل التطبيق:

لغة Java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

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 under age of consent. false means users are not under
        // age.
        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.
                }
            });
    }
}

Kotlin

Coming soon.

تحميل نموذج إذا كان متاحًا

قبل عرض نموذج، عليك أولاً تحديد ما إذا كان متاحًا. يمكن أن تكون النماذج غير المتاحة بسبب تفعيل المستخدم لميزة تتبُّع الإعلانات المحدودة أو إذا وضعت علامة عليها على أنها تحت سن الرشد.

للتحقق من توفّر نموذج، استخدِم the isConsentFormAvailable() method on the ConsentInformation instance الذي أنشأته سابقًا.

بعد ذلك، أضف طريقة برنامج تضمين لتحميل النموذج:

لغة Java

...
       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() {

    }
}

Kotlin

Coming soon.

لتحميل النموذج، استخدِم the static loadConsentForm() method on the UserMessagingPlatform class.

لغة Java

public void loadForm() {
    // Loads a consent form. Must be called on the main thread.
    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
            }
        }
    );
}

Kotlin

Coming soon.

مشاركة عرض النموذج إذا لزم الأمر

بعد تحديد مدى توفّر النموذج وتحميله، يمكنك استخدام show() الطريقة في ConsentForm المثيل لتقديم النموذج.

يمكنك استخدام consentInformation كائن من وقت سابق للتحقق من consent status تحديث طريقةloadForm() :

لغة Java

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 Error.
            }
        }
   );
}

Kotlin

Coming soon.

إذا كنت بحاجة إلى تنفيذ أي إجراءات بعد أن اختار المستخدم النموذج أو تجاهله، فضع هذا المنطق في معالج الإكمال أو معاودة الاتصال بالنموذج.

الاختبار

فرض منطقة جغرافية

توفر حزمة تطوير البرامج (SDK) لمنصّة Google User Messaging Platform (UMP) طريقة لاختبار سلوك تطبيقك كما لو كان الجهاز يقع في المنطقة الاقتصادية الأوروبية أو المملكة المتحدة باستخدام the setDebugGeography method on ConsentDebugSettings.Builder.

يجب تقديم المعرّف المجزأ لجهازك الاختباري في إعدادات تصحيح أخطاء التطبيق لاستخدام وظيفة تصحيح الأخطاء. في حال استدعاء requestConsentInfoUpdate() بدون ضبط هذه القيمة، سيسجِّل تطبيقك تجزئة رقم التعريف المطلوبة عند التشغيل.

لغة Java

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.
        }
    });

Kotlin

Coming soon.

باستخدام DebugGeography، لديك خيار فرض الموقع الجغرافي على أحد هذه الخيارات:

الموقع الجغرافي لتصحيح الأخطاء الوصف
DEBUG_GEOGRAPHY_DISABLED تم إيقاف تصحيح الأخطاء الجغرافي.
DEBUG_GEOGRAPHY_EEA يظهر الموقع الجغرافي كما في المنطقة الاقتصادية الأوروبية لأجهزة تصحيح الأخطاء.
DEBUG_GEOGRAPHY_NOT_EEA يظهر الموقع الجغرافي في المنطقة الاقتصادية الأوروبية لأجهزة تصحيح الأخطاء.

لاحظ أن إعدادات تصحيح الأخطاء تعمل فقط على أجهزة الاختبار. لا يلزم إضافة المحاكيات إلى قائمة أرقام تعريف الأجهزة نظرًا لأنه تم تمكين الاختبار بها بشكل افتراضي.

أثناء اختبار تطبيقك باستخدام حزمة تطوير البرامج (SDK) لمنصّة Google User Messaging Platform، قد يكون من المفيد إعادة ضبط حالة حزمة تطوير البرامج (SDK) بحيث يمكنك محاكاة تجربة التثبيت الأولى للمستخدم. وتوفّر حزمة تطوير البرامج (SDK) reset() الطريقة لتنفيذ ذلك.

لغة Java

consentInformation.reset();

Kotlin

consentInformation.reset()

عليك أيضًا الاتصال reset() إذا قرّرت إزالة حزمة تطوير البرامج (SDK) لمنصّة UMP بالكامل من مشروعك.