Google की ईयू उपयोगकर्ता की सहमति से जुड़ी नीति के तहत, आपको यूके के साथ-साथ यूरोपियन इकनॉमिक एरिया (ईईए) में मौजूद अपने उपयोगकर्ताओं को कुछ जानकारी देनी होगी. साथ ही, जहां कानूनी तौर पर ज़रूरी है, वहां कुकी या अन्य लोकल स्टोरेज का इस्तेमाल करने और विज्ञापन दिखाने के लिए निजी डेटा (जैसे AdID) का इस्तेमाल करने के लिए उनकी सहमति लेनी होगी. इस नीति में ईयू के ई-निजता निर्देश और सामान्य डेटा से जुड़े सुरक्षा कानून (जनरल डेटा प्रोटेक्शन रेगुलेशन) की ज़रूरी शर्तें बताई गई हैं.
इस नीति के तहत पब्लिशर को अपनी ज़िम्मेदारियां पूरी करने में मदद करने के लिए, Google उपयोगकर्ता मैसेज सेवा प्लैटफ़ॉर्म (UMP) SDK टूल उपलब्ध कराता है. UMP SDK टूल को अपडेट किया गया है, ताकि वह नए IAB स्टैंडर्ड के साथ काम कर सके. ये सभी कॉन्फ़िगरेशन अब AdMob निजता और मैसेज सेवा में आसानी से मैनेज किए जा सकते हैं.
ज़रूरी शर्तें
- शुरुआती निर्देश वाली प्रक्रिया पूरी करें
- अगर जीडीपीआर से जुड़ी ज़रूरी शर्तों पर काम किया जा रहा है, तो यह लेख पढ़ें: IAB की ज़रूरी शर्तें, ईयू के सहमति जताने वाले मैसेज पर कैसे असर डालती हैं
मैसेज का टाइप बनाएं
किसी एक उपयोगकर्ता मैसेज के उपलब्ध टाइप की मदद से उपयोगकर्ता मैसेज बनाएं अपने AdMob खाते के निजता और मैसेज सेवा टैब में. UMP SDK टूल, आपके प्रोजेक्ट में सेट AdMob ऐप्लिकेशन आईडी से बनाए गए उपयोगकर्ता का मैसेज दिखाने की कोशिश करता है. अगर आपके ऐप्लिकेशन के लिए कोई मैसेज कॉन्फ़िगर नहीं किया गया है, तो SDK टूल गड़बड़ी दिखाता है.
ज़्यादा जानकारी के लिए, निजता और मैसेज सेवा के बारे में जानकारी देखें.
SDK टूल इंपोर्ट करें
CocoaPods (पसंदीदा)
UMP SDK टूल को, Google Mobile Ads SDK पॉड की डिपेंडेंसी के तौर पर शामिल किया गया है. यह Google Mobile Ads SDK के 7.64.0 वर्शन से शुरू होता है.
किसी iOS प्रोजेक्ट में SDK टूल इंपोर्ट करने का सबसे आसान तरीका है, CocoaPods का इस्तेमाल करना. अपने प्रोजेक्ट की Podfile खोलें और इस लाइन को अपने ऐप्लिकेशन के टारगेट में जोड़ें:
pod 'Google-Mobile-Ads-SDK'
इसके बाद, यह निर्देश दें:
pod install --repo-update
अगर CocoaPods का इस्तेमाल पहले कभी नहीं किया जा सकता, तो Podfiles बनाने और इस्तेमाल करने के तरीके के बारे में जानने के लिए, CocoaPods का इस्तेमाल करना लेख पढ़ें.
मैन्युअल तरीके से डाउनलोड करें
SDK टूल को इंपोर्ट करने का एक और तरीका है, इसे मैन्युअल तरीके से इंपोर्ट करना.
इसके बाद, फ़्रेमवर्क को अपने Xcode प्रोजेक्ट में खींचें और छोड़ें. साथ ही, पक्का करें कि आपने अगर ज़रूरी हो, तो आइटम कॉपी करें को चुना हो.
इसके बाद, इस्तेमाल की जा सकने वाली किसी भी फ़ाइल में फ़्रेमवर्क शामिल किया जा सकता है:
Swift
import UserMessagingPlatform
Objective-C
#include <UserMessagingPlatform/UserMessagingPlatform.h>
सहमति की जानकारी पाने का अनुरोध
आपको requestConsentInfoUpdateWithParameters:completionHandler:
का इस्तेमाल करके, हर ऐप्लिकेशन लॉन्च के समय उपयोगकर्ता की सहमति की जानकारी को अपडेट करने का अनुरोध करना चाहिए. इससे तय होता है कि
अगर आपके उपयोगकर्ता ने सहमति नहीं दी है या
उसकी सहमति खत्म हो गई है, तो उसे सहमति देने की ज़रूरत होगी.
यहां एक उदाहरण दिया गया है कि viewDidLoad()
तरीके में, UIViewController
की मदद से स्टेटस कैसे देखा जा सकता है.
Swift
override func viewDidLoad() {
super.viewDidLoad()
// Create a UMPRequestParameters object.
let parameters = UMPRequestParameters()
// Set tag for under age of consent. false means users are not under age
// of consent.
parameters.tagForUnderAgeOfConsent = false
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// TODO: Load and present the consent form.
}
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
// Create a UMPRequestParameters object.
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
// Set tag for under age of consent. NO means users are not under age
// of consent.
parameters.tagForUnderAgeOfConsent = NO;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
// TODO: Load and present the consent form.
}];
}
ज़रूरत पड़ने पर सहमति फ़ॉर्म लोड करें और पेश करें
अहम जानकारी: UMP SDK टूल के 2.1.0 या इसके बाद के वर्शन पर यहां दिए गए एपीआई काम करते हैं.सहमति की अप-टू-डेट स्थिति मिलने के बाद,UMPConsentForm
क्लास को
loadAndPresentIfRequiredFromViewController:completionHandler:
कॉल करके सहमति फ़ॉर्म लोड करें. अगर
सहमति की स्थिति ज़रूरी है, तो SDK टूल एक फ़ॉर्म लोड करता है और उसे तुरंत
दिए गए फ़ॉर्म से view controllerदिखाता है. फ़ॉर्म खारिज होने के बाद, completion handler
कहा जाता है . अगर सहमति की ज़रूरत नहीं है, तो completion handler
तुरंत कॉल कर दिया जाता है.
Swift
override func viewDidLoad() {
super.viewDidLoad()
// Create a UMPRequestParameters object.
let parameters = UMPRequestParameters()
// Set tag for under age of consent. false means users are not under age
// of consent.
parameters.tagForUnderAgeOfConsent = false
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
UMPConsentForm.loadAndPresentIfRequired(from: self) {
[weak self] loadAndPresentError in
guard let self else { return }
if let consentError = loadAndPresentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// Consent has been gathered.
}
}
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
// Create a UMPRequestParameters object.
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
// Set tag for under age of consent. NO means users are not under age
// of consent.
parameters.tagForUnderAgeOfConsent = NO;
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
if (loadAndPresentError) {
// Consent gathering failed.
NSLog(@"Error: %@", loadAndPresentError.localizedDescription);
return;
}
// Consent has been gathered.
}];
}];
}
अगर उपयोगकर्ता के चुने गए विकल्प या फ़ॉर्म को खारिज करने के बाद आपको कोई कार्रवाई करनी है, तो इस लॉजिक को अपने फ़ॉर्म के लिए completion handler में रखें.
विज्ञापन जोड़ने का अनुरोध करें
अपने ऐप्लिकेशन में विज्ञापनों का अनुरोध करने से पहले, देख लें कि आपने UMPConsentInformation.sharedInstance.canRequestAds
का इस्तेमाल करने वाले
उपयोगकर्ता की सहमति ली है या नहीं. सहमति लेते समय जांच करने के लिए दो जगहें हैं:
- मौजूदा सेशन में सहमति लेने के बाद.
-
requestConsentInfoUpdateWithParameters:completionHandler:
को कॉल करने के तुरंत बाद. ऐसा हो सकता है कि सहमति पिछले सेशन में ली गई हो. इंतज़ार के समय का सबसे सही तरीका यह है कि हमारा सुझाव है कि आप कॉलबैक के पूरा होने का इंतज़ार न करें, ताकि ऐप्लिकेशन लॉन्च होते ही विज्ञापन लोड करना शुरू किया जा सके.
अगर सहमति पाने की प्रोसेस के दौरान कोई गड़बड़ी होती है, तब भी आपको विज्ञापनों का अनुरोध करना चाहिए. UMP SDK टूल, पिछले सेशन से मिली सहमति की स्थिति का इस्तेमाल करता है.
Swift
class ViewController: UIViewController {
// Use a boolean to initialize the Google Mobile Ads SDK and load ads once.
private var isMobileAdsStartCalled = false
override func viewDidLoad() {
super.viewDidLoad()
// Create a UMPRequestParameters object.
let parameters = UMPRequestParameters()
// Set tag for under age of consent. false means users are not under age
// of consent.
parameters.tagForUnderAgeOfConsent = false
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
UMPConsentForm.loadAndPresentIfRequired(from: self) {
[weak self] loadAndPresentError in
guard let self else { return }
if let consentError = loadAndPresentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// Consent has been gathered.
if UMPConsentInformation.sharedInstance.canRequestAds {
self.startGoogleMobileAdsSDK()
}
}
}
// Check if you can initialize the Google Mobile Ads SDK in parallel
// while checking for new consent information. Consent obtained in
// the previous session can be used to request ads.
if UMPConsentInformation.sharedInstance.canRequestAds {
startGoogleMobileAdsSDK()
}
}
private func startGoogleMobileAdsSDK() {
DispatchQueue.main.async {
guard !self.isMobileAdsStartCalled else { return }
self.isMobileAdsStartCalled = true
// Initialize the Google Mobile Ads SDK.
GADMobileAds.sharedInstance().start()
// TODO: Request an ad.
// GADInterstitialAd.load(...)
}
}
}
Objective-C
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Create a UMPRequestParameters object.
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
// Set tag for under age of consent. NO means users are not under age
// of consent.
parameters.tagForUnderAgeOfConsent = NO;
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
if (loadAndPresentError) {
// Consent gathering failed.
NSLog(@"Error: %@", loadAndPresentError.localizedDescription);
return;
}
// Consent has been gathered.
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
if (UMPConsentInformation.sharedInstance.canRequestAds) {
[strongSelf startGoogleMobileAdsSDK];
}
}];
}];
// Check if you can initialize the Google Mobile Ads SDK in parallel
// while checking for new consent information. Consent obtained in
// the previous session can be used to request ads.
if (UMPConsentInformation.sharedInstance.canRequestAds) {
[self startGoogleMobileAdsSDK];
}
}
- (void)startGoogleMobileAdsSDK {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Initialize the Google Mobile Ads SDK.
[GADMobileAds.sharedInstance startWithCompletionHandler:nil];
// TODO: Request an ad.
// [GADInterstitialAd loadWithAdUnitID...];
});
}
निजता के विकल्प
कुछ सहमति फ़ॉर्म के लिए, उपयोगकर्ता को किसी भी समय अपनी सहमति में बदलाव करने की ज़रूरत होती है. अगर ज़रूरी हो, तो निजता के विकल्प वाला बटन लागू करने के लिए, नीचे दिया गया तरीका अपनाएं.
इसके लिए:
- कोई यूज़र इंटरफ़ेस (यूआई) एलिमेंट लागू करें, जैसे कि अपने ऐप्लिकेशन के सेटिंग पेज में मौजूद बटन. यह निजता से जुड़े विकल्पों वाला फ़ॉर्म ट्रिगर कर सकता है.
- जानकारी
loadAndPresentIfRequiredFromViewController:completionHandler:
पूरी होने के बाद, यह तय करें कि निजता से जुड़े विकल्पों वाला फ़ॉर्म दिखाने के लिए, यूज़र इंटरफ़ेस (यूआई) एलिमेंट को दिखाना है या नहीं.privacyOptionsRequirementStatus
- जब कोई उपयोगकर्ता आपके यूज़र इंटरफ़ेस (यूआई) एलिमेंट से इंटरैक्ट करता है, तब फ़ॉर्म दिखाने के लिए
presentPrivacyOptionsFormFromViewController:completionHandler:
पर कॉल करें, ताकि उपयोगकर्ता किसी भी समय अपने निजता विकल्पों को अपडेट कर सके.
नीचे दिए गए उदाहरण में, UIBarButtonItem
से निजता के विकल्प वाले फ़ॉर्म को दिखाने का तरीका बताया गया है.
Swift
@IBOutlet weak var privacySettingsButton: UIBarButtonItem!
var isPrivacyOptionsRequired: Bool {
return UMPConsentInformation.shared.privacyOptionsRequirementStatus == .required
}
override func viewDidLoad() {
// ...
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
// ...
UMPConsentForm.loadAndPresentIfRequired(from: self) {
//...
// Consent has been gathered.
// Show the button if privacy options are required.
self.privacySettingsButton.isEnabled = isPrivacyOptionsRequired
}
}
// ...
}
// Present the privacy options form when a user interacts with the
// privacy settings button.
@IBAction func privacySettingsTapped(_ sender: UIBarButtonItem) {
UMPConsentForm.presentPrivacyOptionsForm(from: self) {
[weak self] formError in
guard let self, let formError else { return }
// Handle the error.
}
}
Objective-C
@interface ViewController ()
@property(weak, nonatomic) IBOutlet UIBarButtonItem *privacySettingsButton;
@end
- (BOOL)isPrivacyOptionsRequired {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus ==
UMPPrivacyOptionsRequirementStatusRequired;
}
- (void)viewDidLoad {
// ...
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable requestConsentError) {
// ...
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
// ...
// Consent has been gathered.
// Show the button if privacy options are required.
strongSelf.privacySettingsButton.enabled = isPrivacyOptionsRequired;
}];
}];
}
// Present the privacy options form when a user interacts with your
// privacy settings button.
- (IBAction)privacySettingsTapped:(UIBarButtonItem *)sender {
[UMPConsentForm presentPrivacyOptionsFormFromViewController:self
completionHandler:^(NSError *_Nullable formError) {
if (formError) {
// Handle the error.
}
}];
}
टेस्ट करना
अगर आप डेवलप करने के दौरान अपने ऐप्लिकेशन के इंटिग्रेशन को टेस्ट करना चाहते हैं, तो अपने टेस्ट डिवाइस को प्रोग्राम के हिसाब से रजिस्टर करने के लिए नीचे दिया गया तरीका अपनाएं.
-
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 टूल की मदद से, आपके ऐप्लिकेशन के काम करने के तरीके की जांच की जा सकती है. इससे आपको यह समझने में मदद मिलती है कि डिवाइस, the debugGeography
property of type UMPDebugGeography
on UMPDebugSettings
का इस्तेमाल करके ईईए या यूके में मौजूद है. ध्यान दें कि
डीबग सेटिंग सिर्फ़ टेस्ट डिवाइसों पर काम करती है.
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 | Objective-C