सुरक्षित सिग्नल, एन्क्रिप्ट (सुरक्षित) किया गया डेटा होता है. इसे क्लाइंट डिवाइस इकट्ठा करता है और चुनिंदा बिडिंग सिस्टम के साथ शेयर करता है. इस पेज पर, इंटरैक्टिव मीडिया विज्ञापन (IMA) SDK टूल का इस्तेमाल करके, Google Ad Manager को सुरक्षित सिग्नल इकट्ठा करने और भेजने के बारे में बताया गया है.
शुरू करने से पहले
जारी रखने से पहले, पक्का करें कि आपके पास iOS v3.18.5 या इसके बाद के वर्शन के लिए IMA 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:
@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 टूल, अडैप्टर के शुरू करने के तरीके को कॉल करके, हर अडैप्टर को एक बार शुरू करता है. एन्क्रिप्शन की किसी भी डिपेंडेंसी को शुरू करने, कैश मेमोरी सेट अप करने या सिग्नल इकट्ठा करने वाले सभी कॉल में एक जैसे रहने वाले सिग्नल की पहले से गिनती करने के लिए, यह तरीका अपनाएं.
नीचे दिए गए उदाहरण में अडैप्टर को शुरू किया गया है:
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 का रनटाइम वर्शन दिखे. हर विज्ञापन अनुरोध में, 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 के साथ रजिस्टर किया जाता है.
अडैप्टर की पुष्टि करें
अडैप्टर की पुष्टि करने के लिए, नीचे दिए गए सेक्शन को पूरा करें:
टेस्ट ऐप्लिकेशन को कॉन्फ़िगर करना
अडैप्टर की पुष्टि करने से पहले, टेस्ट ऐप्लिकेशन को कॉन्फ़िगर करें. यहां दिया गया तरीका अपनाएं:
अपनी पॉड फ़ाइल में IMA SDK टूल जोड़ें:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '10' target "BasicExample" do pod 'GoogleAds-IMA-iOS-SDK', '~> 3.17.0' end
CocoaPods का इस्तेमाल करके IMA SDK इंस्टॉल करें. CocoaPods की मदद से IMA SDK टूल इंस्टॉल करने के निर्देशों के लिए, शुरू करें देखें.
अपने XCode प्रोजेक्ट में, अपना अडैप्टर, SDK टूल, और बचे हुए सभी बिल्ड डिपेंडेंसी जोड़ें.
सिग्नल की पुष्टि करना
सुरक्षित सिग्नल की लंबाई, एन्क्रिप्ट (सुरक्षित) की गई वैल्यू, आपके अडैप्टर के वर्शन, और 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
}
}