कस्टम इवेंट की मदद से, Ad Manager मीडिएशन का इस्तेमाल करने वाले पब्लिशर, तीसरे पक्ष के ऐसे विज्ञापन नेटवर्क के लिए वॉटरफ़ॉल मीडिएशन जोड़ सकते हैं जो काम करने वाले विज्ञापन नेटवर्क में से एक नहीं है. इस गाइड में, Unity प्रोजेक्ट में Android और iOS के लिए बनाए गए मौजूदा कस्टम इवेंट का इस्तेमाल करने का तरीका बताया गया है.
ज़रूरी शर्तें
आगे बढ़ने से पहले, यह काम करें:
सेट अप करें Google Mobile Ads Unity Plugin. आपके Unity ऐप्लिकेशन में, Google Mobile Ads Unity प्लगिन पहले से इंपोर्ट होना चाहिए.
Android और iOS के लिए, कस्टम इवेंट अडैप्टर पहले से बने होने चाहिए. कस्टम इवेंट अडैप्टर बनाने के लिए, कस्टम इवेंट से जुड़ी हमारी गाइड देखें जो Android और iOS पर उपलब्ध हैं.
कस्टम इवेंट तय करना
मीडिएशन में कस्टम इवेंट को शामिल करने के लिए, Ad Manager के वेब इंटरफ़ेस में कस्टम इवेंट तय करना ज़रूरी है. अपने Android और iOS, दोनों के मीडिएशन ग्रुप में एक कस्टम इवेंट जोड़ें.
| पैरामीटर भरने का तरीका | |
|---|---|
| क्लास का नाम (iOS) |
iOS के लिए, उस क्लास का नाम डालें जो कस्टम इवेंट को लागू करती है. अगर आपकी क्लास Swift में लागू की गई है, तो आपको क्लास के नाम से पहले उसके ऐप्लिकेशन / फ़्रेमवर्क मॉड्यूल का नाम जोड़ना होगा. जैसे, अगर आपके प्रोजेक्ट में एक से ज़्यादा टारगेट हैं या प्रोजेक्ट का नाम, टारगेट के नाम से अलग है, तो टारगेट का नाम डालना ज़रूरी है. टारगेट का नाम डालने पर, यह इस तरह दिखेगा: |
| क्लास का नाम (Android) | Android के लिए, पक्का करें कि Class Name के लिए आपने जो वैल्यू दी है वह
Android के लिए पूरी तरह क्वालिफ़ाइड क्लास का नाम हो. जैसे, com.google.ads.mediation.sample.customevent.SampleCustomEvent.
|
| लेबल | इवेंट के लिए कोई यूनीक नाम डालें. |
| पैरामीटर | अगर आपको अपने कस्टम इवेंट में स्ट्रिंग आर्ग्युमेंट पास करना है. जैसे, विज्ञापन यूनिट आईडी. |
कस्टम इवेंट लाइब्रेरी इंपोर्ट करना
कस्टम इवेंट को सही तरीके से काम करने के लिए, उनमें अतिरिक्त लाइब्रेरी शामिल करनी पड़ सकती हैं. उदाहरण के लिए, आपको ये लाइब्रेरी शामिल करनी पड़ सकती हैं:
- Android के लिए, तीसरे पक्ष का SDK टूल
- Android के लिए, तीसरे पक्ष का कस्टम इवेंट
- iOS के लिए, तीसरे पक्ष का विज्ञापन SDK टूल
- iOS के लिए, तीसरे पक्ष का कस्टम इवेंट
लाइब्रेरी के टाइप
Android या iOS का कोड, Unity प्रोजेक्ट में कई तरीकों से इंपोर्ट किया जा सकता है. इनमें ये तरीके शामिल हैं:
- Unity के लिए, External Dependency Manager का इस्तेमाल करके, पहले से बने Android या iOS के आर्टफ़ैक्ट इंपोर्ट करना
- AAR प्लगिन और Android लाइब्रेरी इंपोर्ट करना
- Java और Kotlin की सोर्स फ़ाइलें इंपोर्ट करना
- iOS की सोर्स फ़ाइलें और स्टैटिक लाइब्रेरी इंपोर्ट करना
आपके इस्तेमाल की जाने वाली लाइब्रेरी को जिस तरह से पैकेज किया गया है उसके हिसाब से, आपको हर लाइब्रेरी के लिए अलग-अलग इंपोर्ट की रणनीति की ज़रूरत पड़ सकती है. हर विकल्प के बारे में ज़्यादा जानकारी, बाद में दी गई है.
(सुझाया गया) पहले से बने Android या iOS के आर्टफ़ैक्ट इंपोर्ट करना
Unity के लिए, External Dependency Manager for Unity का इस्तेमाल करके, Maven या CocoaPods से पहले से बने आर्टफ़ैक्ट इंपोर्ट करें. यह प्लगिन, GoogleMobileAds प्लगिन के साथ शामिल है.
मौजूदा आर्टफ़ैक्ट इंपोर्ट करने के लिए, इंपोर्ट तय करने वाली कॉन्फ़िगरेशन फ़ाइल बनाएं. फ़ाइल के नाम और पाथ के लिए ये ज़रूरी शर्तें हैं:
- फ़ाइल,
/Editor/फ़ोल्डर में मौजूद होनी चाहिए. - फ़ाइल का नाम,
Dependencies.xmlसे खत्म होना चाहिए.
उदाहरण के लिए, AdPub नाम के किसी काल्पनिक विज्ञापन नेटवर्क के लिए, कस्टम इवेंट के अडैप्टर इंपोर्ट करने के लिए, यह फ़ाइल बनाएं:
Assets/AdPub/Editor/AdPubDependencies.xml
इसके बाद, AdPubDependencies.xml फ़ाइल में अपनी डिपेंडेंसी तय करें. इंपोर्ट को कॉन्फ़िगर करने के नियम,
Unity के लिए External Dependency Manager का इस्तेमाल शुरू करना
लेख में देखे जा सकते हैं. यहां दिए गए कोड स्निपेट में, "AdPub" नाम के किसी काल्पनिक विज्ञापन नेटवर्क के लिए, Android और iOS SDK टूल के साथ-साथ कस्टम इवेंट लाइब्रेरी शामिल हैं.
Assets/AdPub/Editor/AdPubDependencies.xml
<dependencies>
<androidPackages>
<androidPackage spec="com.adpub.android:adpub-sdk:1.0.0" />
<androidPackage spec="com.adpub.android:adpub-custom-event:1.0.0">
<repositories>
<repository>https://repo.maven.apache.org/maven2/</repository>
<repository>https://dl.google.com/dl/android/maven2/</repository>
</repositories>
</androidPackage>
</androidPackages>
<iosPods>
<iosPod name="AdPubSDK" version="1.0" />
<iosPod name="AdPubCustomEvent" version="1.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>
</iosPod>
</iosPods>
</dependencies>
अगर आपके कस्टम इवेंट आर्टफ़ैक्ट में, ज़रूरी विज्ञापन नेटवर्क SDK टूल पर पहले से ही कोई डिपेंडेंसी है, तो आपको SDK टूल की डिपेंडेंसी साफ़ तौर पर तय करने की ज़रूरत नहीं है: उदाहरण
External Dependency Manager, कॉन्फ़िगरेशन में होने वाले बदलावों पर नज़र रखता है और डिपेंडेंसी को हल करता है. मेन्यू के इस कमांड का इस्तेमाल करके, मैन्युअल तरीके से भी डिपेंडेंसी को हल किया जा सकता है:
Assets > External Dependency Manager > Android Resolver > Force Resolve
AAR प्लगिन और Android लाइब्रेरी इंपोर्ट करना
Unity, *.aar फ़ाइलें और Android लाइब्रेरी प्रोजेक्ट, दोनों को इंपोर्ट करने की सुविधा देता है. अगर
आपका Android कस्टम इवेंट इस तरह से पैकेज किया गया है, तो अपने Unity प्रोजेक्ट में उन फ़ाइलों को शामिल करने के तरीके के बारे में जानने के लिए, AAR प्लगिन और Android
लाइब्रेरी लेख देखें.
Java और Kotlin की सोर्स फ़ाइलें इंपोर्ट करना
Unity 2018.2 या इसके बाद के वर्शन में, अगर आपके Android कस्टम इवेंट कोड में कंपाइल न की गई *.java या *.kt फ़ाइलें शामिल हैं, तो प्लगिन के तौर पर Java या Kotlin की सोर्स फ़ाइलों
का इस्तेमाल किया जा सकता है.
iOS की सोर्स फ़ाइलें और स्टैटिक लाइब्रेरी इंपोर्ट करना
Unity, *.framework आर्टफ़ैक्ट, *.h, और *.m सोर्स फ़ाइलों के साथ काम करता है. iOS के आर्टफ़ैक्ट और सोर्स फ़ाइलें इंपोर्ट करने के बारे में जानकारी, नेटिव
प्लगइन के लिए Unity's गाइड में दी गई है.
विज्ञापन जांचने वाले टूल की मदद से, कस्टम इवेंट की जांच करना
विज्ञापन जांचने वाले टूल का इस्तेमाल करके, यह जांच की जा सकती है कि कस्टम इवेंट को आपके ऐप्लिकेशन में सही तरीके से इंपोर्ट किया गया है या नहीं. विज्ञापन जांचने वाले टूल को सिर्फ़ जेस्चर की मदद से या कम से कम कोड का इस्तेमाल करके प्रोग्राम के ज़रिए खोला जा सकता है.
(ज़रूरी नहीं) C# स्क्रिप्ट से, तीसरे पक्ष के SDK टूल के नेटिव तरीके कॉल करना
तीसरे पक्ष के विज्ञापन नेटवर्क के SDK टूल के लिए, खास ज़रूरतें हो सकती हैं. इसके लिए, Android या iOS के तरीकों को सीधे तौर पर कॉल करना पड़ सकता है. इन तरीकों को सीधे तौर पर कॉल करने की प्रोसेस इस तरह है:
- प्लैटफ़ॉर्म क्लाइंट के लिए, एक सामान्य इंटरफ़ेस तय करना
- ऐसे प्लैटफ़ॉर्म के लिए डिफ़ॉल्ट क्लाइंट लागू करना जो काम नहीं करते
- Android के तरीकों को कॉल करने के लिए, Android क्लाइंट लागू करना
- iOS के तरीकों को कॉल करने के लिए, iOS क्लाइंट लागू करना
- iOS और Android क्लाइंट के बीच, शर्तों के हिसाब से स्विच करने के लिए, क्लाइंट फ़ैक्ट्री लागू करना
- तीसरे पक्ष के विज्ञापन नेटवर्क के SDK टूल की सभी सुविधाओं को ऐक्सेस करने के लिए, एक एपीआई तय करना
यहां दिए गए सेक्शन में, यह दिखाया गया है कि C# एपीआई में, "AdPub" नाम के किसी काल्पनिक विज्ञापन नेटवर्क के लिए, इन चरणों को कैसे लागू किया जाता है. इस एपीआई की मदद से, Android और iOS के तरीकों को कॉल किया जा सकता है:
Android
package com.adpub.android;
public class AdPubSdk
{
public static void setHasUserConsent(boolean hasUserConsent);
}
iOS
@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end
प्लैटफ़ॉर्म क्लाइंट के लिए, एक सामान्य इंटरफ़ेस तय करना
IAdPubClient इंटरफ़ेस बनाएं. इसमें एक ऐसा तरीका शामिल करें जो Android और iOS के बुनियादी एपीआई को दिखाता हो.
Assets/AdPub/Common/IAdPubClient.cs
namespace AdPub.Common
{
public interface IAdPubClient
{
///<summary>
/// Sets a flag indicating if the app has user consent for advertisement.
///</summary>
void SetHasUserConsent(bool hasUserConsent);
}
}
ऐसे प्लैटफ़ॉर्म के लिए डिफ़ॉल्ट क्लाइंट तय करना जो काम नहीं करते
IAdPubClient इंटरफ़ेस को लागू करने वाली DefaultClient क्लास बनाएं. यह क्लास सिर्फ़ तरीके के नाम को लॉग करती है. Unity एडिटर और Android या iOS के अलावा, सभी प्लैटफ़ॉर्म के लिए इस तरीके का इस्तेमाल करें.
Assets/AdPub/Common/DefaultClient.cs
namespace AdPub.Common
{
public class DefaultClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
Debug.Log("SetHasUserConsent was called.");
}
}
}
iOS प्लैटफ़ॉर्म क्लाइंट लागू करना
iOS पर, IAdPubClient इंटरफ़ेस को लागू करने वाली iOSAdPubClient क्लास बनाएं. इस तरीके में, iOS की AdPubSdk क्लास में setHasUserConsent() तरीके को कॉल करने के लिए,
InteropServices का इस्तेमाल किया जाता है.
Assets/AdPub/Platforms/iOS/iOSAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on iOS.
#if UNITY_IOS
// Reference InteropServices to include the DLLImportAttribute type.
using System.Runtime.InteropServices;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class iOSAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
GADUAdPubSetHasUserConsent(hasUserConsent);
}
[DllImport("__Internal")]
internal static extern void GADUAdPubSetHasUserConsent(bool hasUserConsent);
}
}
#endif
इसके बाद, ऊपर तय किया गया GADUAdPubSetHasUserConsent() तरीका लागू करें. Unity से तरीके को कॉल करने और AdPubSDK को लागू करने के लिए, C method
GADUAdPubSetHasUserConsent() के साथ AdPubClientBridge.m बनाएं.
AdPubClientBridge iOS की सोर्स फ़ाइल है. इसे
Plugins/iOS फ़ोल्डर में रखना होगा. इसके बारे में जानकारी, नेटिव प्लगिन के लिए Unity's गाइड में दी गई है.
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
Android प्लैटफ़ॉर्म क्लाइंट लागू करना
Android पर, IAdPubClient इंटरफ़ेस को लागू करने वाली AndroidAdPubCient क्लास बनाएं. इस तरीके में, Android के स्टैटिक तरीके setHasUserConsent() को कॉल करने के लिए, Android Java हेल्पर
क्लास
का इस्तेमाल किया जाता है.
Android Java हेल्पर क्लास, सिर्फ़ Android
रनटाइम के दौरान उपलब्ध होती हैं. इसलिए, क्लास को रैप करने के लिए, UNITY_ANDROID कंपाइलर
डायरेक्टिव का इस्तेमाल करके, कंपाइलेशन से जुड़ी गड़बड़ियों को रोका जा सकता है. इसके बारे में जानकारी, कोड स्निपेट में दी गई है. इसके अलावा, इस समस्या को हल करने के लिए, Unity 2017.4 और इसके बाद के वर्शन पर, असेंबली
की परिभाषाओं
का इस्तेमाल किया जा सकता है.
Assets/AdPub/Platforms/Android/AndroidAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on Android.
#if UNITY_ANDROID
// Reference the UnityEngine namespace which contains the JNI Helper classes.
using UnityEngine;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class AndroidAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
// Make a reference to the com.adpub.AdPubSDK.
AndroidJavaClass adPubSdk = new AndroidJavaClass("com.adpub.AdPubSdk");
// Call the native setHasUserConsent method of com.adpub.AdPubSDK.
adPubSdk.CallStatic("setHasUserConsent", hasUserConsent);
}
}
}
#endif
सही क्लाइंट लागू करने की सुविधा देने के लिए, फ़ैक्ट्री का तरीका बनाना
अब आपके पास हर प्लैटफ़ॉर्म के लिए क्लाइंट लागू करने की सुविधा है. इसलिए, रनटाइम प्लैटफ़ॉर्म के हिसाब से, IAdPubClient इंटरफ़ेस को सही तरीके से लागू करने की सुविधा देने के लिए, AdPubClientFactory क्लास बनाएं. यह क्लास, सही IAdPubClient क्लाइंट को लागू करने की सुविधा देने के लिए,
कंपाइलर
डायरेक्टिव का इस्तेमाल करती है.
Assets/AdPub/Common/AdPubClientFactory.cs
namespace AdPub.Common
{
public class AdPubClientFactory
{
// Return the correct platform client.
public static IAdPubClient GetClient()
{
#if !UNITY_EDITOR && UNITY_ANDROID
return new AdPub.Platforms.Android.AndroidAdPubClient();
#elif !UNITY_EDITOR && UNITY_IOS
return new AdPub.Platforms.iOS.iOSAdPubClient();
#else
// Returned for the Unity Editor and unsupported platforms.
return new DefaultClient();
#endif
}
}
}
हर इंटरफ़ेस तरीके के लिए, सार्वजनिक एपीआई तय करना
AdPubApi क्लास बनाएं. इसमें आपके IAdPubClient इंटरफ़ेस में मौजूद हर क्लाइंट तरीके के लिए, तरीके को कॉल करने की सुविधा शामिल करें. यह क्लास, IAdPubClient का इंस्टेंस पाने के लिए, AdPubClientFactory का इस्तेमाल करती है. साथ ही, बुनियादी SDK टूल की सुविधाओं के लिए, उस क्लाइंट को कॉल करती है.
Assets/AdPub/AdPubApi.cs
using AdPub.Common;
namespace AdPub
{
public class AdPubApi
{
private static readonly IAdPubClient client = GetAdPubClient();
// Returns the correct client for the current runtime platform.
private static IAdPubClient GetAdPubClient()
{
return AdPubClientFactory.GetClient();
}
// Sets the user consent using the underlying SDK functionality.
public static void SetHasUserConsent(bool hasUserConsent)
{
client.SetHasUserConsent(hasUserConsent);
}
}
}
नया एपीआई कॉल करना
यहां बताया गया है कि ऊपर तय किए गए एपीआई को कैसे कॉल किया जा सकता है:
Assets/Scripts/AdPubController.cs
using UnityEngine;
using AdPub;
public class AdPubController : MonoBehaviour
{
// TODO: Get consent from the user and update this userConsent field.
public bool userConsent;
// Called on startup of the GameObject it's assigned to.
public void Start()
{
// Pass the user consent to AdPub.
AdPubApi.SetHasUserConsent(userConsent);
}
}
तीसरे पक्ष के विज्ञापन नेटवर्क के अडैप्टर के अन्य उदाहरण
तीसरे पक्ष के मीडिएशन अडैप्टर के अन्य उदाहरण देखने के लिए, Google Mobile Ads Unity प्लगिन के Github रिपॉज़िटरी पर जाएं. इन उदाहरणों में, iOS और Android के तरीकों को कॉल करने के लिए, C# एपीआई लागू किए गए हैं.