Google User Messaging Platform (UMP) SDK टूल, निजता और मैसेज सेवा के लिए एक टूल है. इससे आपको निजता के विकल्प मैनेज करने में मदद मिलती है. ज़्यादा जानकारी के लिए, निजता और मैसेज सेवा के बारे में जानकारी देखें. UMP SDK टूल के साथ काम करने वाले IMA को, Objective-C या Swift UMP सैंपल ऐप्लिकेशन में देखा जा सकता है.
मैसेज टाइप बनाना
अपने Ad Manager खाते के निजता और मैसेज सेवा टैब में जाकर, उपयोगकर्ता मैसेज के उपलब्ध टाइप में से किसी एक का इस्तेमाल करके, उपयोगकर्ता मैसेज बनाएं. UMP SDK टूल, आपके प्रोजेक्ट में सेट किए गए इंटरैक्टिव मीडिया विज्ञापन ऐप्लिकेशन आईडी से बनाया गया निजता मैसेज दिखाने की कोशिश करता है.
ज़्यादा जानकारी के लिए, निजता और मैसेज सेवा के बारे में जानकारी देखें.
SDK टूल इंपोर्ट करना
UMP SDK टूल को IMA SDK टूल की डिपेंडेंसी के तौर पर शामिल नहीं किया गया है. इसलिए, आपको इसे खुद जोड़ना होगा.
CocoaPods (इसका इस्तेमाल करना सबसे सही है)
SDK टूल को iOS प्रोजेक्ट में इंपोर्ट करने का सबसे आसान तरीका, CocoaPods का इस्तेमाल करना है. अपने प्रोजेक्ट की Podfile खोलें और अपने ऐप्लिकेशन के टारगेट में यह लाइन जोड़ें:
pod 'GoogleUserMessagingPlatform'
इसके बाद, यह कमांड चलाएं:
pod install --repo-update
अगर आपने पहले कभी CocoaPods का इस्तेमाल नहीं किया है, तो Podfile बनाने और इस्तेमाल करने के तरीके के बारे में जानने के लिए, CocoaPods का इस्तेमाल करना लेख पढ़ें.
Swift Package Manager
UMP SDK टूल, Swift Package Manager के साथ भी काम करता है. Swift पैकेज इंपोर्ट करने के लिए, यह तरीका अपनाएं.
Xcode में, फ़ाइल > पैकेज जोड़ें... पर जाकर, UMP SDK Swift पैकेज इंस्टॉल करें.
इसके बाद, दिखने वाले प्रॉम्प्ट में UMP SDK टूल के Swift पैकेज का GitHub रिपॉज़िटरी खोजें:
https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git
UMP SDK टूल के उस Swift पैकेज का वर्शन चुनें जिसका इस्तेमाल करना है. नए प्रोजेक्ट के लिए, हमारा सुझाव है कि आप अगले मेजर वर्शन तक का इस्तेमाल करें.
इसके बाद, Xcode आपके पैकेज की डिपेंडेंसी को हल करता है और उन्हें बैकग्राउंड में डाउनलोड करता है. पैकेज की डिपेंडेंसी जोड़ने के तरीके के बारे में ज़्यादा जानने के लिए, Apple का लेख देखें.
ऐप्लिकेशन आईडी जोड़ना
अपना ऐप्लिकेशन आईडी,
Ad Manager यूज़र इंटरफ़ेस (यूआई) में देखा जा सकता है.
इस कोड स्निपेट की मदद से, अपने Info.plist
में आईडी जोड़ें:
<key>UMPApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
सहमति लेना
सहमति लेने के लिए, यह तरीका अपनाएं:
- उपयोगकर्ता की हाल ही की सहमति की जानकारी का अनुरोध.
- अगर ज़रूरी हो, तो सहमति फ़ॉर्म लोड करें और उसे दिखाएं.
सहमति की जानकारी का अनुरोध करना
आपको
requestConsentInfoUpdateWithParameters:completionHandler:
का इस्तेमाल करके, ऐप्लिकेशन के हर लॉन्च पर उपयोगकर्ता की सहमति की जानकारी को अपडेट करने का अनुरोध करना चाहिए. इस अनुरोध में इन चीज़ों की जांच की जाती है:
- क्या सहमति लेना ज़रूरी है. उदाहरण के लिए, पहली बार सहमति लेना ज़रूरी है या सहमति के लिए पहले लिए गए फ़ैसले की समयसीमा खत्म हो गई है.
- क्या निजता विकल्पों के एंट्री पॉइंट की ज़रूरत है. निजता से जुड़े कुछ मैसेज दिखाने के लिए, ऐप्लिकेशन को यह ज़रूरी है कि वे उपयोगकर्ताओं को निजता के विकल्पों में किसी भी समय बदलाव करने की अनुमति दें.
अगर ज़रूरी हो, तो निजता से जुड़े मैसेज का फ़ॉर्म लोड और दिखाएं
सहमति का सबसे अप-टू-डेट स्टेटस मिलने के बाद, उपयोगकर्ता की सहमति इकट्ठा करने के लिए ज़रूरी फ़ॉर्म लोड करने के लिए,
loadAndPresentIfRequiredFromViewController:completionHandler:
को कॉल करें. लोड होने के बाद, फ़ॉर्म तुरंत दिखने लगते हैं.
नीचे दिए गए कोड में, उपयोगकर्ता की सहमति से जुड़ी नई जानकारी का अनुरोध करने का तरीका बताया गया है. अगर ज़रूरी हो, तो कोड लोड होता है और निजता मैसेज फ़ॉर्म दिखाता है:
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)
}
UMPConsentForm.loadAndPresentIfRequired(from: consentFormPresentationviewController) {
loadAndPresentError in
// Consent has been gathered.
consentGatheringComplete(loadAndPresentError)
}
}
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);
}];
}
}];
निजता के विकल्प
निजता से जुड़े कुछ मैसेज फ़ॉर्म, पब्लिशर के रेंडर किए गए निजता विकल्पों के एंट्री पॉइंट से दिखाए जाते हैं. इससे उपयोगकर्ता, निजता के विकल्पों को कभी भी मैनेज कर सकते हैं. इस बारे में ज़्यादा जानने के लिए कि निजता के विकल्पों के एंट्री पॉइंट पर, आपके उपयोगकर्ताओं को कौनसा मैसेज दिखता है, उपयोगकर्ताओं के लिए उपलब्ध मैसेज टाइप देखें.
देखें कि निजता विकल्पों के एंट्री पॉइंट की ज़रूरत है या नहीं
requestConsentInfoUpdateWithParameters:completionHandler:
को कॉल करने के बाद,
UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus
को चुनकर यह पता लगाएं कि आपके ऐप्लिकेशन के लिए, निजता के विकल्पों का एंट्री पॉइंट ज़रूरी है या नहीं:
Swift
var isPrivacyOptionsRequired: Bool {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus == .required
}
Objective-C
- (BOOL)areGDPRConsentMessagesRequired {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus ==
UMPPrivacyOptionsRequirementStatusRequired;
}
अपने ऐप्लिकेशन में कोई दिखने वाला एलिमेंट जोड़ना
अगर निजता के विकल्पों का एंट्री पॉइंट ज़रूरी है, तो अपने ऐप्लिकेशन में एक ऐसा यूज़र इंटरफ़ेस (यूआई) एलिमेंट जोड़ें जो दिखता हो और जिससे इंटरैक्ट किया जा सकता हो. यह एलिमेंट, निजता के विकल्पों वाला फ़ॉर्म दिखाता हो. अगर निजता एंट्री पॉइंट की ज़रूरत नहीं है, तो अपने यूज़र इंटरफ़ेस (यूआई) एलिमेंट को न दिखने और इंटरैक्ट न किए जा सकने के लिए कॉन्फ़िगर करें.
Swift
self.privacySettingsButton.isEnabled = ConsentManager.shared.isPrivacyOptionsRequired
Objective-C
// Set up the privacy options button to show the UMP privacy form.
// Check ConsentInformation.getPrivacyOptionsRequirementStatus
// to see the button should be shown or hidden.
strongSelf.privacySettingsButton.hidden =
!ConsentManager.sharedInstance.areGDPRConsentMessagesRequired;
निजता के विकल्पों का फ़ॉर्म दिखाना
जब उपयोगकर्ता आपके एलिमेंट से इंटरैक्ट करता है, तो निजता के विकल्पों वाला फ़ॉर्म दिखाएं:
Swift
UMPConsentForm.presentPrivacyOptionsForm(
from: viewController, completionHandler: completionHandler)
Objective-C
[UMPConsentForm presentPrivacyOptionsFormFromViewController:viewController
completionHandler:completionHandler];
विज्ञापन जोड़ने का अनुरोध करें
अपने ऐप्लिकेशन में विज्ञापन दिखाने का अनुरोध करने से पहले, देख लें कि आपने
UMPConsentInformation.sharedInstance.canRequestAds
का इस्तेमाल करके, उपयोगकर्ता से सहमति ली है या नहीं. सहमति लेते समय, इन दो जगहों पर जाकर देखें:
- मौजूदा सेशन में सहमति मिलने के बाद.
requestConsentInfoUpdateWithParameters:completionHandler:
को कॉल करने के तुरंत बाद. ऐसा हो सकता है कि पिछले सेशन में सहमति मिल गई हो. हमारा सुझाव है कि आप कॉलबैक के पूरा होने का इंतज़ार न करें. यह इंतज़ार करने का सबसे अच्छा तरीका है, ताकि आपके ऐप्लिकेशन के लॉन्च होने के बाद, विज्ञापन जल्द से जल्द लोड होने लगें.
अगर सहमति लेने की प्रोसेस के दौरान कोई गड़बड़ी होती है, तो भी आपको यह देखना चाहिए कि विज्ञापनों का अनुरोध किया जा सकता है या नहीं. UMP SDK टूल, पिछले सेशन की सहमति की स्थिति का इस्तेमाल करता है.
नीचे दिया गया कोड यह जांच करता है कि सहमति लेने की प्रोसेस के दौरान, विज्ञापन दिखाने का अनुरोध किया जा सकता है या नहीं:
Swift
ConsentManager.shared.gatherConsent(from: self) { [weak self] consentError in
guard let self else { return }
if let consentError {
// Consent gathering failed. This sample loads ads using
// consent obtained in the previous session.
print("Error: \(consentError.localizedDescription)")
}
// ...
}
Objective-C
[ConsentManager.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 (ConsentManager.sharedInstance.canRequestAds) {
[strongSelf setupAdsLoader];
}
}];
// This sample attempts to load ads using consent obtained in the previous session.
if (ConsentManager.sharedInstance.canRequestAds) {
[self setupAdsLoader];
}
[self setUpContentPlayer];
}
- (IBAction)onPlayButtonTouch:(id)sender {
[self requestAds];
self.playButton.hidden = YES;
}
#pragma mark Content Player Setup
- (void)setUpContentPlayer {
// Load AVPlayer with path to our content.
NSURL *contentURL = [NSURL URLWithString:kTestAppContentUrl_MP4];
self.contentPlayer = [AVPlayer playerWithURL:contentURL];
// Create a player layer for the player.
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.contentPlayer];
// Size, position, and display the AVPlayer.
playerLayer.frame = self.videoView.layer.bounds;
[self.videoView.layer addSublayer:playerLayer];
// Set up our content playhead and contentComplete callback.
self.contentPlayhead = [[IMAAVPlayerContentPlayhead alloc] initWithAVPlayer:self.contentPlayer];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contentDidFinishPlaying:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:self.contentPlayer.currentItem];
}
#pragma mark SDK Setup
- (void)setupAdsLoader {
self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:nil];
self.adsLoader.delegate = self;
}
- (void)requestAds {
// Create an ad display container for ad rendering.
IMAAdDisplayContainer *adDisplayContainer =
[[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
viewController:self
companionSlots:nil];
// Create an ad request with our ad tag, display container, and optional user context.
IMAAdsRequest *request = [[IMAAdsRequest alloc] initWithAdTagUrl:kTestAppAdTagUrl
adDisplayContainer:adDisplayContainer
contentPlayhead:self.contentPlayhead
userContext:nil];
[self.adsLoader requestAdsWithRequest:request];
}
- (void)contentDidFinishPlaying:(NSNotification *)notification {
// Make sure we don't call contentComplete as a result of an ad completing.
if (notification.object == self.contentPlayer.currentItem) {
[self.adsLoader contentComplete];
}
}
#pragma mark AdsLoader Delegates
- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
// Grab the instance of the IMAAdsManager and set ourselves as the delegate.
self.adsManager = adsLoadedData.adsManager;
self.adsManager.delegate = self;
// Create ads rendering settings to tell the SDK to use the in-app browser.
IMAAdsRenderingSettings *adsRenderingSettings = [[IMAAdsRenderingSettings alloc] init];
adsRenderingSettings.linkOpenerPresentingController = self;
// Initialize the ads manager.
[self.adsManager initializeWithAdsRenderingSettings:adsRenderingSettings];
}
- (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {
// Something went wrong loading ads. Log the error and play the content.
NSLog(@"Error loading ads: %@", adErrorData.adError.message);
[self.contentPlayer play];
}
#pragma mark AdsManager Delegates
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
// When the SDK notified us that ads have been loaded, play them.
if (event.type == kIMAAdEvent_LOADED) {
[adsManager start];
}
}
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdError:(IMAAdError *)error {
// Something went wrong with the ads manager after ads were loaded. Log the error and play the
// content.
NSLog(@"AdsManager error: %@", error.message);
[self.contentPlayer play];
}
- (void)adsManagerDidRequestContentPause:(IMAAdsManager *)adsManager {
// The SDK is going to play ads, so pause the content.
[self.contentPlayer pause];
}
- (void)adsManagerDidRequestContentResume:(IMAAdsManager *)adsManager {
// The SDK is done playing ads (at least for now), so resume the content.
[self.contentPlayer play];
}
@end
उपयोगकर्ता की सहमति मिलने के बाद, यह कोड IMA DAI SDK टूल को सेट अप करता है:
Swift
private func requestAds() {
// Create ad display container for ad rendering.
let adDisplayContainer = IMAAdDisplayContainer(
adContainer: videoView, viewController: self, companionSlots: nil)
// Create an ad request with our ad tag, display container, and optional user context.
let request = IMAAdsRequest(
adTagUrl: ViewController.testAppAdTagURL,
adDisplayContainer: adDisplayContainer,
contentPlayhead: contentPlayhead,
userContext: nil)
adsLoader.requestAds(with: request)
}
Objective-C
- (void)setupAdsLoader {
self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:nil];
self.adsLoader.delegate = self;
}
टेस्ट करना
अगर आपको ऐप्लिकेशन डेवलप करने के दौरान, उसमें इंटिग्रेशन की जांच करनी है, तो प्रोग्राम के हिसाब से अपने टेस्ट डिवाइस को रजिस्टर करने के लिए यह तरीका अपनाएं. ऐप्लिकेशन को रिलीज़ करने से पहले, टेस्ट डिवाइस आईडी सेट करने वाले कोड को हटाना न भूलें.
requestConsentInfoUpdateWithParameters:completionHandler:
पर कॉल करें.लॉग आउट में, नीचे दिए गए उदाहरण से मिलते-जुलते मैसेज देखें. इसमें आपका डिवाइस आईडी और उसे टेस्ट डिवाइस के तौर पर जोड़ने का तरीका दिखता है:
<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
अपने टेस्ट डिवाइस का आईडी, क्लिपबोर्ड पर कॉपी करें.
अपने कोड में बदलाव करके,
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){ // ... }];
किसी देश या इलाके के लिए ज़रूरी शर्तें तय करना
UMP SDK टूल की मदद से, अपने ऐप्लिकेशन के व्यवहार की जांच की जा सकती है. ऐसा करने के लिए,
UMPDebugGeography
का इस्तेमाल करके, यह मानना होगा कि डिवाइस ईईए या यूके जैसे अलग-अलग इलाकों में है. ध्यान दें कि डीबग सेटिंग सिर्फ़ टेस्ट डिवाइसों पर काम करती हैं.
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){
// ...
}];
सहमति की स्थिति रीसेट करना
UMP SDK टूल की मदद से अपने ऐप्लिकेशन की जांच करते समय, SDK टूल की स्थिति को रीसेट करना मददगार हो सकता है. इससे, उपयोगकर्ता के ऐप्लिकेशन इंस्टॉल करने के अनुभव को सिम्युलेट किया जा सकता है.
SDK टूल, ऐसा करने के लिए reset
तरीका उपलब्ध कराता है.
Swift
UMPConsentInformation.sharedInstance.reset()
Objective-C
[UMPConsentInformation.sharedInstance reset];
GitHub पर मौजूद उदाहरण
इस पेज पर बताए गए UMP SDK टूल के इंटिग्रेशन का पूरा उदाहरण देखें. इसके लिए, Swift UmpExample और Objective-C UmpExample देखें.