একটি সুরক্ষিত সংকেত অ্যাডাপ্টার তৈরি করুন

সুরক্ষিত সংকেত হল এনকোড করা ডেটা যা একটি ক্লায়েন্ট ডিভাইস সংগ্রহ করে এবং নির্বাচিত বিডারদের সাথে শেয়ার করে। এই পৃষ্ঠাটি আপনাকে ইন্টারেক্টিভ মিডিয়া বিজ্ঞাপন (IMA) SDK ব্যবহার করে Google বিজ্ঞাপন পরিচালকের কাছে সুরক্ষিত সংকেত সংগ্রহ এবং পাঠানোর বিষয়ে গাইড করে।

আপনি শুরু করার আগে

চালিয়ে যাওয়ার আগে, নিশ্চিত করুন যে আপনার কাছে iOS v3.18.5 বা তার বেশির জন্য IMA 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 :
@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 অ্যাসিঙ্ক্রোনাসভাবে একটি সংগ্রহ সংকেত পদ্ধতিকে কল করে। এই সংকেত সংগ্রাহক পদ্ধতি এনক্রিপ্ট করা সংকেত পাস বা একটি ত্রুটি রিপোর্ট করার জন্য একটি কলব্যাক ফাংশন ধারণ করে।

নিম্নলিখিত উদাহরণগুলি কলব্যাক ফাংশনের মাধ্যমে সুরক্ষিত সংকেত সংগ্রহ করে:

উদ্দেশ্য-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 এর সাথে অ্যাডাপ্টারটি নিবন্ধন করুন৷

Google সংকেত সংগ্রহের জন্য অ্যাডাপ্টারকে অনুমোদন করার জন্য, আপনাকে অবশ্যই Google-এর সাথে iOS ক্লাসের নাম নিবন্ধন করতে হবে। 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. CocoaPods ব্যবহার করে IMA SDK ইনস্টল করুন। CocoaPods এর মাধ্যমে IMA SDK ইনস্টল করার নির্দেশাবলীর জন্য, শুরু করুন দেখুন।

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