البدء

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

إنشاء نوع رسالة

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

لمزيد من التفاصيل، يُرجى الاطّلاع على لمحة عن الخصوصية والرسائل.

استيراد حزمة SDK

CocoaPods (الخيار المفضّل)

إنّ أسهل طريقة لاستيراد حزمة تطوير البرامج (SDK) إلى مشروع iOS هي استخدام CocoaPods. افتحملف Podfile الخاص بمشروعك وأضِف هذا السطر إلى استهداف تطبيقك:

pod 'GoogleUserMessagingPlatform'

بعد ذلك، نفِّذ الأمر التالي:

pod install --repo-update

إذا كنت حديث العهد باستخدام CocoaPods، اطّلِع على مقالة استخدام CocoaPods لمعرفة تفاصيل حول كيفية إنشاء ملفات Podfiles واستخدامها.

أداة إدارة حِزم Swift

تتوافق حزمة تطوير البرامج لمنصة UMP أيضًا مع أداة Swift Package Manager. اتّبِع الخطوات التالية لتحميل حزمة Swift.

  1. في Xcode، ثبِّت حزمة Swift الخاصة بحزمة تطوير البرامج (SDK) لمنصّة UMP من خلال الانتقال إلى ملف > إضافة حِزم....

  2. في الطلب الذي يظهر، ابحث عن حزمة Swift لـ UMP SDK في مستودع GitHub:

    https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git
    
  3. اختَر إصدار حزمة Swift الخاصة بحزمة تطوير البرامج (SDK) لمنصّة UMP الذي تريد استخدامه. بالنسبة إلى المشاريع الجديدة، ننصحك باستخدام الإصدار التالي.

بعد ذلك، يحلّ Xcode تبعيات الحزمة وينزّلها في الخلفية. لمعرفة المزيد من التفاصيل عن كيفية إضافة التبعيات الخاصة بالحِزم، يُرجى الاطّلاع على مقالة Apple.

التنزيل اليدوي

الطريقة الأخرى لاستيراد حزمة تطوير البرامج (SDK) هي إجراء ذلك يدويًا.

تنزيل حزمة SDK

بعد ذلك، اسحب إطار العمل إلى مشروع Xcode، مع التأكّد من اختيار نسخ العناصر إذا لزم الأمر.

يمكنك بعد ذلك تضمين إطار العمل في أي ملف تحتاجه باستخدام:

Swift

import UserMessagingPlatform

Objective-C

#include <UserMessagingPlatform/UserMessagingPlatform.h>

أضِف رقم تعريف التطبيق.

يمكنك العثور على رقم تعريف تطبيقك في واجهة مستخدم AdMob. أضِف المعرّف إلى Info.plist باستخدام مقتطف الرمز التالي:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>

للحصول على الموافقة، أكمِل الخطوات التالية:

  1. طلب أحدث معلومات موافقة المستخدم
  2. حمِّل نموذج موافقة وقدِّمه، إذا لزم الأمر.

عليك طلب تعديل معلومات موافقة المستخدم عند كل بدء لتطبيقك باستخدام requestConsentInfoUpdate(with:completionHandler:). يتحقّق هذا الطلب مما يلي:

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

تحميل نموذج رسالة الخصوصية وعرضها إذا لزم الأمر

بعد تلقّي أحدث حالة موافقة، اتصل بـ loadAndPresentIfRequired(from:) لتحميل أي نماذج مطلوبة لجمع موافقة المستخدم. بعد التحميل، تظهر النماذج على الفور.

يوضّح الرمز التالي كيفية طلب معلومات الموافقة الأحدث للمستخدم. إذا لزم الأمر، يتم تحميل الرمز وعرض نموذج رسالة الخصوصية:

Swift


// Requesting an update to consent information should be called on every app launch.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
  requestConsentError in
  guard requestConsentError == nil else {
    return consentGatheringComplete(requestConsentError)
  }

  Task { @MainActor in
    do {
      try await UMPConsentForm.loadAndPresentIfRequired(from: viewController)
      // Consent has been gathered.
      consentGatheringComplete(nil)
    } catch {
      consentGatheringComplete(error)
    }
  }
}

SwiftUI


// Requesting an update to consent information should be called on every app launch.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
  requestConsentError in
  guard requestConsentError == nil else {
    return consentGatheringComplete(requestConsentError)
  }

  Task { @MainActor in
    do {
      try await UMPConsentForm.loadAndPresentIfRequired(from: nil)
      // Consent has been gathered.
      consentGatheringComplete(nil)
    } catch {
      consentGatheringComplete(error)
    }
  }
}

Objective-C


// Requesting an update to consent information should be called on every app launch.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable requestConsentError) {
                           if (requestConsentError) {
                             consentGatheringComplete(requestConsentError);
                           } else {
                             [UMPConsentForm
                                 loadAndPresentIfRequiredFromViewController:viewController
                                                          completionHandler:^(
                                                              NSError
                                                                  *_Nullable loadAndPresentError) {
                                                            // Consent has been gathered.
                                                            consentGatheringComplete(
                                                                loadAndPresentError);
                                                          }];
                           }
                         }];

خيارات الخصوصية

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

التحقّق مما إذا كانت نقطة دخول خيارات الخصوصية مطلوبة

بعد استدعاء requestConsentInfoUpdate(with:completionHandler:)، تحقّق من UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus لتحديد ما إذا كانت نقطة دخول خيارات الخصوصية مطلوبة لتطبيقك:

Swift


var isPrivacyOptionsRequired: Bool {
  return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus == .required
}

Objective-C


- (BOOL)isPrivacyOptionsRequired {
  return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus ==
         UMPPrivacyOptionsRequirementStatusRequired;
}

إضافة عنصر مرئي إلى تطبيقك

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

Swift


self.privacySettingsButton.isEnabled =
  GoogleMobileAdsConsentManager.shared.isPrivacyOptionsRequired

Objective-C


strongSelf.privacySettingsButton.enabled =
    GoogleMobileAdsConsentManager.sharedInstance
        .isPrivacyOptionsRequired;

عرض نموذج خيارات الخصوصية

عندما يتفاعل المستخدم مع العنصر، اعرض نموذج خيارات الخصوصية:

Swift


try await UMPConsentForm.presentPrivacyOptionsForm(from: viewController)

SwiftUI


try await UMPConsentForm.presentPrivacyOptionsForm(from: nil)

Objective-C


[UMPConsentForm presentPrivacyOptionsFormFromViewController:viewController
                                          completionHandler:completionHandler];

طلب إدراج الإعلانات

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

  • بعد جمع الموافقة في الجلسة الحالية
  • بعد الاتصال بـ requestConsentInfoUpdate(with:completionHandler:) مباشرةً من المحتمل أنّه تم الحصول على الموافقة في الجلسة السابقة. من أفضل الممارسات المتعلّقة بالمُهلة عدم الانتظار حتى اكتمال عملية طلب إعادة الاتصال حتى تتمكّن من بدء تحميل الإعلانات في أقرب وقت ممكن بعد إطلاق تطبيقك.
.

في حال حدوث خطأ أثناء عملية جمع الموافقة، يجب التحقّق مما إذا كان بإمكانك طلب عرض الإعلانات. تستخدِم حزمة SDK لـ UMP حالة الموافقة من الجلسة السابقة.

يتحقّق الرمز البرمجي التالي ممّا إذا كان بإمكانك طلب الإعلانات أثناء عملية جمع الموافقة:

Swift


GoogleMobileAdsConsentManager.shared.gatherConsent(from: self) { [weak self] consentError in
  guard let self else { return }

  if let consentError {
    // Consent gathering failed.
    print("Error: \(consentError.localizedDescription)")
  }

  if GoogleMobileAdsConsentManager.shared.canRequestAds {
    self.startGoogleMobileAdsSDK()
  }
  // ...
}

// This sample attempts to load ads using consent obtained in the previous session.
if GoogleMobileAdsConsentManager.shared.canRequestAds {
  startGoogleMobileAdsSDK()
}

SwiftUI


GoogleMobileAdsConsentManager.shared.gatherConsent { consentError in
  if let consentError {
    // Consent gathering failed.
    print("Error: \(consentError.localizedDescription)")
  }

  // Check if you can request ads in `startGoogleMobileAdsSDK` before initializing the
  // Google Mobile Ads SDK.
  GoogleMobileAdsConsentManager.shared.startGoogleMobileAdsSDK()
  // ...
}

// This sample attempts to load ads using consent obtained in the previous session.
GoogleMobileAdsConsentManager.shared.startGoogleMobileAdsSDK()

Objective-C


[GoogleMobileAdsConsentManager.sharedInstance
    gatherConsentFromConsentPresentationViewController:self
                              consentGatheringComplete:^(NSError *_Nullable consentError) {
                                if (consentError) {
                                  // Consent gathering failed.
                                  NSLog(@"Error: %@", consentError.localizedDescription);
                                }

                                __strong __typeof__(self) strongSelf = weakSelf;
                                if (!strongSelf) {
                                  return;
                                }

                                if (GoogleMobileAdsConsentManager.sharedInstance.canRequestAds) {
                                  [strongSelf startGoogleMobileAdsSDK];
                                }
                                // ...
                              }];

// This sample attempts to load ads using consent obtained in the previous session.
if (GoogleMobileAdsConsentManager.sharedInstance.canRequestAds) {
  [self startGoogleMobileAdsSDK];
}

يُعدّ الرمز التالي حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة بعد جمع موافقة المستخدِم:

Swift


private func startGoogleMobileAdsSDK() {
  DispatchQueue.main.async {
    guard !self.isMobileAdsStartCalled else { return }

    self.isMobileAdsStartCalled = true

    // Initialize the Google Mobile Ads SDK.
    GADMobileAds.sharedInstance().start()

    if self.isViewDidAppearCalled {
      self.loadBannerAd()
    }
  }
}

SwiftUI


/// Method to initialize the Google Mobile Ads SDK. The SDK should only be initialized once.
func startGoogleMobileAdsSDK() {
  guard canRequestAds, !isMobileAdsStartCalled else { return }

  isMobileAdsStartCalled = true

  // Initialize the Google Mobile Ads SDK.
  GADMobileAds.sharedInstance().start()
}

Objective-C


- (void)startGoogleMobileAdsSDK {
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    // Initialize the Google Mobile Ads SDK.
    [GADMobileAds.sharedInstance startWithCompletionHandler:nil];
    [self loadBannerAd];
  });
}

الاختبار

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

  1. تواصل هاتفيًا مع " requestConsentInfoUpdate(with:completionHandler:)".
  2. راجِع إخراج السجلّ بحثًا عن رسالة مشابهة للمثال التالي، والتي تعرِض معرّف جهازك وكيفية إضافته كجهاز اختبار:

    <UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
    
  3. انسخ رقم تعريف جهاز الاختبار إلى الحافظة.

  4. عدِّل الرمز لاستدعاء UMPDebugSettings().testDeviceIdentifiers وإدخال قائمة بأرقام تعريف الأجهزة الاختبارية.

    Swift

    let parameters = UMPRequestParameters()
    let debugSettings = UMPDebugSettings()
    
    debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
    parameters.debugSettings = debugSettings
    
    // Include the UMPRequestParameters in your consent request.
    UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
        with: parameters,
        completionHandler: { error in
          // ...
        })
    

    Objective-C

    UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
    UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];
    
    debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
    parameters.debugSettings = debugSettings;
    
    // Include the UMPRequestParameters in your consent request.
    [UMPConsentInformation.sharedInstance
        requestConsentInfoUpdateWithParameters:parameters
                            completionHandler:^(NSError *_Nullable error){
                              // ...
    }];
    

فرض موقع جغرافي

توفّر حزمة تطوير البرامج (SDK) لمنصّة UMP طريقة لاختبار سلوك تطبيقك كما لو كان الجهاز يقع في مناطق مختلفة، مثل المنطقة الاقتصادية الأوروبية أو المملكة المتحدة، باستخدام geography. يُرجى العِلم أنّ إعدادات تصحيح الأخطاء لا تعمل إلا على الأجهزة الاختبارية.

Swift

let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings()

debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
debugSettings.geography = .EEA
parameters.debugSettings = debugSettings

// Include the UMPRequestParameters in your consent request.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    with: parameters,
    completionHandler: { error in
      // ...
    })

Objective-C

UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];

debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
debugSettings.geography = UMPDebugGeographyEEA;
parameters.debugSettings = debugSettings;

// Include the UMPRequestParameters in your consent request.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable error){
                           // ...
}];

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

Swift

UMPConsentInformation.sharedInstance.reset()

Objective-C

[UMPConsentInformation.sharedInstance reset];

أمثلة على GitHub

يمكنك الاطّلاع على مثال كامل لدمج حزمة تطوير البرامج (SDK) لمنصّة UMP الذي تمت الإشارة إليه في هذه الصفحة على