สร้างอะแดปเตอร์สัญญาณที่ปลอดภัย

เลือกแพลตฟอร์ม: Android iOS

สัญญาณที่ปลอดภัยคือข้อมูลที่เข้ารหัสซึ่งอุปกรณ์ของไคลเอ็นต์รวบรวมและแชร์กับผู้เสนอราคาที่เลือก หน้านี้จะแนะนำวิธีรวบรวมและส่งสัญญาณที่ปลอดภัยไปยัง Google Ad Manager โดยใช้ Interactive Media Ads (IMA) SDK

ก่อนเริ่มต้น

โปรดตรวจสอบว่าคุณมี IMA SDK สำหรับ iOS เวอร์ชัน 3.18.5 ขึ้นไปก่อนดำเนินการต่อ

สร้างอินเทอร์เฟซอะแดปเตอร์สัญญาณที่ปลอดภัย

หากต้องการรวบรวมและแสดงสัญญาณที่ปลอดภัย ให้สร้างคลาสที่ใช้ได้กับอินเทอร์เฟซต่อไปนี้

Objective-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

Swift

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 จะเริ่มต้นอะแดปเตอร์แต่ละรายการ 1 ครั้งโดยเรียกใช้เมธอดการเริ่มต้นของอะแดปเตอร์ ใช้เมธอดนี้เพื่อเริ่มการทำงานของการเข้ารหัส ตั้งค่าแคช หรือคำนวณสัญญาณล่วงหน้าซึ่งจะยังคงเหมือนเดิมในการเรียกใช้การรวบรวมสัญญาณทั้งหมด

ตัวอย่างต่อไปนี้แสดงการเริ่มต้นอะแดปเตอร์

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

Swift

...
@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 จะเรียกใช้เมธอดการรวบรวมสัญญาณแบบไม่พร้อมกัน เมธอดผู้รวบรวมสัญญาณเหล่านี้มีฟังก์ชันการเรียกกลับเพื่อส่งสัญญาณที่เข้ารหัสหรือรายงานข้อผิดพลาด

ตัวอย่างต่อไปนี้แสดงการรวบรวมสัญญาณที่ปลอดภัยผ่านฟังก์ชันการเรียกกลับ

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

Swift

...
  /**
  * 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 จะรวมเวอร์ชันอะแดปเตอร์ไว้ในคำขอโฆษณาแต่ละรายการและส่งเวอร์ชันดังกล่าวพร้อมกับสัญญาณที่ปลอดภัยในคำขอราคาเสนอ

ในคำขอราคาเสนอ คุณสามารถระบุรายละเอียดการเข้ารหัส การเข้ารหัส และการจัดรูปแบบที่อะแดปเตอร์ใช้เพื่อสร้างสัญญาณที่ปลอดภัยได้โดยอิงตามเวอร์ชันอะแดปเตอร์

ตัวอย่างต่อไปนี้แสดงการระบุเวอร์ชันอะแดปเตอร์

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

Swift

...
  /**
  * 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 หลายเวอร์ชันได้ โปรดตรวจสอบว่าคุณได้แสดงผลเวอร์ชันรันไทม์ของ SDK IMA SDK จะรวมเวอร์ชันรันไทม์ไว้กับเวอร์ชันอะแดปเตอร์ในคำขอโฆษณาแต่ละรายการ

ตัวอย่างต่อไปนี้แสดงการขอและแสดงผลเวอร์ชันรันไทม์ของ SDK

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

Swift

...
  /**
  * @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

หากต้องการให้ Google อนุญาตอะแดปเตอร์สำหรับการรวบรวมสัญญาณ คุณต้องลงทะเบียน ชื่อคลาส iOS กับ Google IMA SDK จะเริ่มต้นเฉพาะอะแดปเตอร์ที่คุณลงทะเบียนกับ Google

ตรวจสอบอะแดปเตอร์

หากต้องการตรวจสอบอะแดปเตอร์ ให้กรอกข้อมูลในส่วนต่อไปนี้

กำหนดค่าแอปพลิเคชันทดสอบ

กำหนดค่าแอปพลิเคชันทดสอบก่อนตรวจสอบอะแดปเตอร์ ทำตามขั้นตอนต่อไปนี้

  1. เพิ่ม IMA SDK ลงในโปรเจ็กต์ XCode

  2. เพิ่มอะแดปเตอร์สัญญาณที่ปลอดภัยลงในโปรเจ็กต์ XCode

ยืนยันสัญญาณ

หากต้องการยืนยันความยาวของสัญญาณที่ปลอดภัย ค่าที่เข้ารหัส เวอร์ชันอะแดปเตอร์ และเวอร์ชัน SDK โปรดติดต่อทีมสนับสนุนเพื่อแชร์บันทึกการเข้าชมที่บันทึกไว้

ดูตัวอย่างที่สมบูรณ์

ส่วนนี้แสดงตัวอย่างที่สมบูรณ์ของทุกขั้นตอนเพื่อให้คุณใช้อ้างอิงได้

Objective-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

Swift

@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
  }
}