یک آداپتور سیگنال امن ایجاد کنید، یک آداپتور سیگنال امن ایجاد کنید

سیگنال های ایمن داده های رمزگذاری شده ای هستند که دستگاه مشتری جمع آوری می کند و با پیشنهاد دهندگان منتخب به اشتراک می گذارد. این صفحه شما را در جمع آوری و ارسال سیگنال های ایمن به Google Ad Manager با استفاده از SDK تبلیغات رسانه های تعاملی (IMA) راهنمایی می کند.

قبل از شروع

قبل از ادامه، مطمئن شوید که IMA SDK برای iOS نسخه 3.18.5 یا بالاتر را دارید.

رابط آداپتور سیگنال ایمن را ایجاد کنید

برای جمع آوری و ارائه سیگنال های ایمن، کلاس هایی ایجاد کنید که رابط را پیاده سازی کنند:

هدف-C

  • MySecureSignalsAdapter.h :
#import <Foundation/Foundation.h>
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
/** An example implementation of Secure Signals adapter. */
@interface MySecureSignalsAdapter : NSObject <IMASecureSignalsAdapter>
@end
  • MySecureSignalsAdapter.m :
@implementation MySecureSignalsAdapter

  /**
* Default constructor with no arguments for IMA SDK to instantiate this class.
*/
- (instancetype)init {
  self = [super init];

  return self;
}
@end

سویفت

import Foundation
import GoogleInteractiveMediaAds

/** An example implementation of Secure Signals adapter. */
@objc(MySecureSignalsAdapter)
public class MySecureSignalsAdapter: IMASecureSignalsAdapter {
  /**
  * Default constructor with no arguments for IMA SDK to instantiate this class.
  */
  override init() {
    super.init()
  }
}

آداپتور را راه اندازی کنید

IMA SDK هر آداپتور را یک بار با فراخوانی روش اولیه آداپتور مقداردهی اولیه می کند. این روش را برای شروع هرگونه وابستگی رمزگذاری، راه‌اندازی حافظه پنهان یا از پیش محاسبه سیگنال‌هایی که در همه تماس‌های جمع‌آوری سیگنال یکسان باقی می‌مانند، اجرا کنید.

مثال زیر آداپتور را مقداردهی اولیه می کند:

هدف-C

...
@interface MySecureSignalsAdapter
@property(nonatomic) NSError *initError;
@end
...
/**
* Initialize your SDK and any dependencies.
* IMA SDK calls this function exactly once before signal collection.
*/
- (instancetype)init {
  self = [super init];
  @try {
    // Initialize your SDK and any dependencies.
    ...
  }
  @catch(NSException *exception) {
    // Build NSError to be passed by Signal Collector.
    _initError = ...;
  }
  return self;
}
...

سویفت

...
@objc(MySecureSignalsAdapter)
public class MySecureSignalsAdapter: IMASecureSignalsAdapter {
...
  private var initError

  override init() {
    super.init()

    do {
      // Initialize your SDK and any dependencies.
      ...
    } catch {
      // Build NSError to be passed by Signal Collector.
      self.initError = ...;
    }
  }
}

جمع آوری سیگنال

قبل از شروع درخواست تبلیغات، IMA SDK یک روش سیگنال جمع آوری را به صورت ناهمزمان فراخوانی می کند. این روش‌های جمع‌آوری سیگنال حاوی یک تابع تماس برای ارسال سیگنال‌های رمزگذاری‌شده یا گزارش خطا هستند.

مثال‌های زیر سیگنال‌های ایمن را از طریق تابع callback جمع‌آوری می‌کنند:

هدف-C

...
/**
* Invokes your SDK to collect, encrypt and pass the signal collection results to IMA SDK.
* IMA SDK calls this function before each ad request.
*
* @param completion A callback function to pass signal collection results to IMA SDK.
*/
- (void)collectSignalsWithCompletion:(IMASignalCompletionHandler)completion {
  // Output any initialization errors
  if (self.initError) {
    completion(nil, self.initError);
    return;
  }
  @try {
    // Collect and encrypt the signals.
    NSString *signals = ...
    // Pass the encrypted signals to IMA SDK.
    completion(signals, nil);
  }
  @catch(NSException *exception) {
    NSError *collectSignalError = ...;
    // Pass signal collection failures to IMA SDK.
    completion(nil, collectSignalError);
  }
}
...

سویفت

...
  /**
  * Invokes your SDK to collect, encrypt and pass the signal collection results to IMA SDK.
  * IMA SDK calls this function before each ad request.
  *
  * @param completion A callback function to pass signal collection results to IMA SDK.
  */
  public func collectSignals(completion: @escaping IMASignalCompletionHandler) {
    if (self.initError) {
      completion(nil, self.initError)
      return
    }

    do {
      // Collect and encrypt the signals.
      var signals = ...
      // Pass the encrypted signals to IMA SDK.
      completion(signals, nil)
    } catch {
      NSError collectSignalError = ...
      // Pass signal collection failures to IMA SDK.
      completion(nil, collectSignalError)
    }
  }
...

گزارش خطاها

برای برقراری ارتباط با کاربرانی که از کلاس آداپتور شما استفاده می کنند، تمام خطاها را در طول جمع آوری سیگنال گزارش کنید و آنها را به پاسخ تماس گیرنده سیگنال ارسال کنید. این فرآیند مشکلاتی را که در حین ادغام آداپتور شما با برنامه ها رخ می دهد عیب یابی می کند.

خطاهایی که ممکن است ظاهر شوند به شرح زیر است:

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

نسخه آداپتور را مشخص کنید

در گردش کار خود، مطمئن شوید که نسخه آداپتور را مشخص کرده اید. IMA SDK شامل نسخه آداپتور شما در هر درخواست آگهی می‌شود و آنها را با سیگنال‌های ایمن در یک درخواست پیشنهاد ارسال می‌کند.

در درخواست پیشنهاد، بر اساس نسخه آداپتور، می‌توانید جزئیات رمزگذاری، رمزگذاری و قالب‌بندی را که آداپتور برای ایجاد سیگنال‌های امن استفاده می‌کند، شناسایی کنید.

مثال زیر نسخه آداپتور را مشخص می کند:

هدف-C

...
/**
* Specifies this adapter's version.
*/
static NSInteger const VersionMajor = 1;
static NSInteger const VersionMinor = 0;
static NSInteger const VersionPatch = 1;
...
/**
* @return The version of this adapter.
*         IMA SDK calls this function before each ad request.
*/
+ (IMAVersion *)adapterVersion {
  // The version of the SecureSignals Adapter.
  IMAVersion *adapterVersion = [[IMAVersion alloc] init];
  adapterVersion.majorVersion = VersionMajor;
  adapterVersion.minorVersion = VersionMinor;
  adapterVersion.patchVersion = VersionPatch;
  return adapterVersion;
}
...

سویفت

...
  /**
  * Specifies this adapter's version.
  */
  static let VersionMajor = 1;
  static let VersionMinor = 0;
  static let VersionPatch = 1;
...
  /**
  * @return The version of this adapter.
  *         IMA SDK calls this function before each ad request.
  */
  public static func adapterVersion() -> IMAVersion {
    let adapterVersion = IMAVersion()
    adapterVersion.majorVersion = self.VersionMajor
    adapterVersion.minorVersion = self.VersionMinor
    adapterVersion.patchVersion = self.VersionPatch
    return adapterVersion
  }
...

نسخه زمان اجرا SDK را برگردانید

می‌توانید آداپتور خود را طوری طراحی کنید که با چندین نسخه از SDK کار کند. برای اینکه آداپتور با چندین نسخه کار کند، مطمئن شوید که نسخه زمان اجرا SDK را برگردانید. در هر درخواست تبلیغات، IMA SDK شامل نسخه زمان اجرا با نسخه آداپتور می شود.

نمونه های زیر نسخه زمان اجرا SDK را درخواست کرده و برمی گرداند:

هدف-C

...
/**
* @return The version of your SDK that this adapter is depending on.
*         IMA SDK calls this function before each ad request.
*/
+ (IMAVersion *)adSDKVersion {
  // Request the version from your SDK and convert to an IMAVersion.
  int mySDKVersion[3] = ...

  IMAVersion *adSDKVersion = [[IMAVersion alloc] init];
  adSDKVersion.majorVersion = mySDKVersion[0];
  adSDKVersion.minorVersion = mySDKVersion[1];
  adSDKVersion.patchVersion = mySDKVersion[2];

  return adSDKVersion;
}
...

سویفت

...
  /**
  * @return The version of your SDK that this adapter is depending on.
  *         IMA SDK calls this function before each ad request.
  */
public static func adSDKVersion() -> IMAVersion {
    // Request the version from your SDK and convert to an IMAVersion.
    let mySDKVersion = ...

    let adSDKVersion = IMAVersion()
    adSDKVersion.majorVersion = mySDKVersion[0]
    adSDKVersion.minorVersion = mySDKVersion[1]
    adSDKVersion.patchVersion = mySDKVersion[2]
    return adSDKVersion
  }
...

آداپتور را در گوگل ثبت کنید

برای اینکه Google به آداپتور برای جمع آوری سیگنال مجوز دهد، باید نام کلاس iOS را در Google ثبت کنید. IMA SDK فقط آداپتورهایی را که در Google ثبت نام کرده‌اید، مقداردهی اولیه می‌کند.

آداپتور را اعتبار سنجی کنید

برای تأیید اعتبار آداپتور، بخش های زیر را تکمیل کنید:

برنامه آزمایشی را پیکربندی کنید

قبل از تأیید اعتبار آداپتور، برنامه آزمایشی را پیکربندی کنید. مراحل زیر را کامل کنید:

  1. IMA SDK را به فایل پاد خود اضافه کنید:

    source 'https://github.com/CocoaPods/Specs.git'
    platform :ios, '10'
    target "BasicExample" do
      pod 'GoogleAds-IMA-iOS-SDK', '~> 3.17.0'
    end
    
  2. IMA SDK را با استفاده از CocoaPods نصب کنید. برای دستورالعمل‌های نصب IMA SDK از طریق CocoaPods، به شروع به کار مراجعه کنید.

  3. در پروژه XCode خود، آداپتور، SDK، و وابستگی‌های ساخت باقی‌مانده‌ای را که اضافه کرده‌اید اضافه کنید.

سیگنال ها را بررسی کنید

برای تأیید طول سیگنال امن، مقدار رمزگذاری شده، نسخه آداپتور شما؛ و نسخه SDK خود، با پشتیبانی تماس بگیرید تا گزارش ترافیک گرفته شده را به اشتراک بگذارید.

نمونه های کامل را مرور کنید

این بخش نمونه کامل تمام مراحل و در دسترس برای مرجع شما را نشان می دهد.

هدف-C

  • MySecureSignalsAdapter.h :
#import <Foundation/Foundation.h>
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>

/** An example implementation of Secure Signals adapter. */
@interface MySecureSignalsAdapter : NSObject <IMASecureSignalsAdapter>
@end
  • MySecureSignalsAdapter.m :
#import "path/to/MyExampleSecureSignalsAdapter.h"

@interface MySecureSignalsAdapter
@property(nonatomic) NSError *initError;
@end

static NSInteger const VersionMajor = 1;
static NSInteger const VersionMinor = 0;
static NSInteger const VersionPatch = 1;

@implementation MySecureSignalsAdapter
/**
* Initialize your SDK and any dependencies.
* IMA SDK calls this function exactly once before signal collection.
*/
- (instancetype)init {
  self = [super init];
  @try {
    // Initialize your SDK and any dependencies.
    ...
  }
  @catch(NSException *exception) {
    // Build NSError to be passed by Signal Collector.
    _initError = ...;
  }
  return self;
}
/**
* Invokes your SDK to collect, encrypt and pass the signal collection results to IMA SDK.
* IMA SDK calls this function before each ad request.
*
* @param completion A callback function to pass signal collection results to IMA SDK.
*/
- (void)collectSignalsWithCompletion:(IMASignalCompletionHandler)completion {
  if (self.initError) {
    completion(nil, self.initError);
    return;
  }
  @try {
    // Collect and encrypt the signals.
    NSString *signals = ...
    // Pass the encrypted signals to IMA SDK.
    completion(signals, nil);
  }
  @catch(NSException *exception) {
    NSError *collectSignalError = ...;
    // Pass signal collection failures to IMA SDK.
    completion(nil, collectSignalError);
  }
}
/**
* @return The version of this adapter.
*         IMA SDK calls this function before each ad request.
*/
+ (IMAVersion *)adapterVersion {
  // The version of the SecureSignals Adapter.
  IMAVersion *adapterVersion = [[IMAVersion alloc] init];
  adapterVersion.majorVersion = VersionMajor;
  adapterVersion.minorVersion = VersionMinor;
  adapterVersion.patchVersion = VersionPatch;
  return adapterVersion;
}

/**
  * @return The version of your SDK that this adapter depends on.
  *         IMA SDK calls this function before each ad request.
  */
+ (IMAVersion *)adSDKVersion {
  // Request the version from your SDK and convert to an IMAVersion.
  int mySDKVersion[3] = ...

  IMAVersion *adSDKVersion = [[IMAVersion alloc] init];
  adSDKVersion.majorVersion = mySDKVersion[0];
  adSDKVersion.minorVersion = mySDKVersion[1];
  adSDKVersion.patchVersion = mySDKVersion[2];

  return adSDKVersion;
}

@end

سویفت

@objc(MySecureSignalsAdapter)
public class MySecureSignalsAdapter: IMASecureSignalsAdapter {
  static let VersionMajor = 1;
  static let VersionMinor = 0;
  static let VersionPatch = 1;

  private var initError

  override init() {
    super.init()

    do {
      // Initialize your SDK and any dependencies.
      ...
    } catch {
      // Build NSError to be passed by Signal Collector.
      self.initError = ...;
    }
  }

  public func collectSignals(completion: @escaping IMASignalCompletionHandler) {
    if (self.initError) {
      completion(nil, self.initError)
      return
    }

    do {
      // Collect and encrypt the signals.
      var signals = ...
      // Pass the encrypted signals to IMA SDK.
      completion(signals, nil)
    } catch {
      NSError collectSignalError = ...
      // Pass signal collection failures to IMA SDK.
      completion(nil, collectSignalError)
    }      
  }

  public static func adapterVersion() -> IMAVersion {
    let adapterVersion = IMAVersion()
    adapterVersion.majorVersion = self.VersionMajor
    adapterVersion.minorVersion = self.VersionMinor
    adapterVersion.patchVersion = self.VersionPatch
    return adapterVersion
  }

  public static func adSDKVersion() -> IMAVersion {
    // Request the version from your SDK and convert to an IMAVersion.
    let mySDKVersion = ...

    let adSDKVersion = IMAVersion()
    adSDKVersion.majorVersion = mySDKVersion[0]
    adSDKVersion.minorVersion = mySDKVersion[1]
    adSDKVersion.patchVersion = mySDKVersion[2]
    return adSDKVersion
  }
}