कस्टम इवेंट बनाएं

कस्टम इवेंट, तीसरे पक्ष की ऐसी विज्ञापन नेटवर्क कंपनी के लिए वॉटरफ़ॉल मीडिएशन जोड़ने के लिए, AdMob मीडिएशन की सुविधा देते हैं जो काम करने वाली विज्ञापन नेटवर्क कंपनियों में शामिल नहीं है. इस गाइड में बताया गया है कि Unity प्रोजेक्ट में Android और iOS के लिए बनाए गए मौजूदा कस्टम इवेंट को कैसे इस्तेमाल किया जाता है.

ज़रूरी शर्तें

  • शुरू करें को पूरा करें. आपके Unity ऐप्लिकेशन में, Google Mobile Ads Unity प्लग-इन पहले से इंपोर्ट किया हुआ होना चाहिए.

  • Android और iOS के लिए पहले से बनाए गए कस्टम इवेंट अडैप्टर. कस्टम इवेंट अडैप्टर बनाने के लिए,Android औरiOSके बारे में हमारी कस्टम इवेंट गाइड देखें.

कस्टम इवेंट तय करना

किसी कस्टम इवेंट को मीडिएशन में इस्तेमाल करने के लिए, कस्टम इवेंट की जानकारी AdMob वेब इंटरफ़ेस में देनी ज़रूरी है. अपने Android और iOS, दोनों मीडिएशन ग्रुप में कस्टम इवेंट जोड़ें.

इस स्क्रीनशॉट में, कस्टम इवेंट की कुछ सेटिंग के सैंपल दिखाए गए हैं:

पैरामीटर भरने का तरीका
क्लास का नाम (iOS)

iOS के लिए, उस क्लास का नाम डालें जो कस्टम इवेंट लागू करती है.

अगर आपकी क्लास Swift में लागू की गई है, तो आपको क्लास के नाम से पहले उसके ऐप्लिकेशन / फ़्रेमवर्क मॉड्यूल का नाम जोड़ना होगा (उदाहरण के लिए, appName.className).

अगर आपके प्रोजेक्ट में एक से ज़्यादा टारगेट हैं या प्रोजेक्ट का नाम, टारगेट के नाम से अलग है, तो टारगेट का नाम डालना ज़रूरी है. टारगेट के नाम के साथ, यह ऐसा दिखेगा: appName_targetName.className. इसके अलावा, किसी भी गैर-अक्षर और अंक वाले वर्णों, जैसे कि डैश को अंडरस्कोर से बदलना न भूलें.

क्लास का नाम (Android) Android के लिए, पक्का करें कि Class Name के लिए आपने जो वैल्यू दी है वह Android के लिए पूरी तरह क्वालिफ़ाइड क्लास का नाम हो (उदाहरण के लिए, com.google.ads.mediation.sample.customevent.SampleCustomEvent).
लेबल इवेंट के लिए कोई यूनीक नाम डालें.
पैरामीटर अगर आपको अपने कस्टम इवेंट में स्ट्रिंग आर्ग्युमेंट पास करना है, जैसे कि विज्ञापन यूनिट आईडी.

कस्टम इवेंट लाइब्रेरी इंपोर्ट करें

कस्टम इवेंट को ठीक से काम करने के लिए, कुछ और लाइब्रेरी को शामिल करना पड़ सकता है. उदाहरण के लिए, आपको इन लाइब्रेरी को शामिल करना पड़ सकता है:

  • Android तीसरे पक्ष का SDK टूल
  • Android तीसरे पक्ष का कस्टम इवेंट
  • iOS तीसरे पक्ष का विज्ञापन SDK टूल
  • iOS तीसरे पक्ष का कस्टम इवेंट

लाइब्रेरी के टाइप

Unity प्रोजेक्ट में Android या iOS कोड को इंपोर्ट करने के कई तरीके हैं. इनमें ये तरीके शामिल हैं:

  • Unity के लिए बाहरी निर्भरता मैनेजर का इस्तेमाल करके, पहले से बने Android या iOS आर्टफ़ैक्ट को इंपोर्ट करना
  • एएआर प्लग-इन और Android लाइब्रेरी इंपोर्ट करना
  • Java और Kotlin सोर्स फ़ाइलें इंपोर्ट करना
  • iOS सोर्स फ़ाइलें और स्टैटिक लाइब्रेरी इंपोर्ट करना

आपकी इस्तेमाल की जाने वाली लाइब्रेरी के पैकेज को कैसे पैकेज किया जाता है, इसके आधार पर आपको हर लाइब्रेरी के लिए इंपोर्ट करने की अलग रणनीति की ज़रूरत पड़ सकती है. हर विकल्प के बारे में बाद में ज़्यादा जानकारी दी गई है.

(सुझाया गया) पहले से बने Android या iOS आर्टफ़ैक्ट इंपोर्ट करें

Unity के लिए बाहरी डिपेंडेंस मैनेजर का इस्तेमाल करके, Maven या CocoaPods से पहले से बने आर्टफ़ैक्ट को इंपोर्ट करें. यह प्लग-इन GoogleMobileAds प्लग-इन के साथ शामिल होता है.

मौजूदा आर्टफ़ैक्ट को इंपोर्ट करने के लिए, एक कॉन्फ़िगरेशन फ़ाइल बनाएं, ताकि आपके इंपोर्ट तय किए जा सकें. फ़ाइल नाम और पाथ में ये ज़रूरी शर्तें होती हैं:

  • /Editor/ फ़ोल्डर में फ़ाइल होनी ज़रूरी है.
  • फ़ाइल नाम के आखिर में Dependencies.xml होना चाहिए.

उदाहरण के लिए, AdPub नाम के काल्पनिक विज्ञापन नेटवर्क के लिए कस्टम इवेंट के अडैप्टर इंपोर्ट करने के लिए, फ़ाइल बनाएं:

Assets/AdPub/Editor/AdPubDependencies.xml

इसके बाद, AdPubDependencies.xml फ़ाइल में अपनी डिपेंडेंसी तय करें. इंपोर्ट को कॉन्फ़िगर करने के नियम, Unity शुरू करने के लिए एक्सटर्नल डिपेंडेंस मैनेजर पर जाकर देखे जा सकते हैं. नीचे दिए गए कोड स्निपेट में एक काल्पनिक "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 टूल डिपेंडेंसी तय करने की ज़रूरत नहीं है: उदाहरण

एक्सटर्नल डिपेंडेंसी मैनेजर, कॉन्फ़िगरेशन में हुए बदलावों के लिए अपने-आप मॉनिटर करता है और डिपेंडेंसी को रिज़ॉल्व करता है. आप इन मेन्यू कमांड की मदद से मैन्युअल रिज़ॉल्यूशन भी चला सकते हैं:

Assets > External Dependency Manager > Android Resolver > Force Resolve

एएआर प्लग-इन और Android लाइब्रेरी इंपोर्ट करना

Unity के साथ *.aar फ़ाइलें और Android लाइब्रेरी प्रोजेक्ट इंपोर्ट किए जा सकते हैं. अगर आपके Android कस्टम इवेंट को इस तरह से पैकेज किया जाता है, तो एएआर प्लग-इन और Android लाइब्रेरी देखें. इन फ़ाइलों को अपने Unity प्रोजेक्ट में शामिल करने के तरीके के बारे में निर्देश देखें.

Java और Kotlin की सोर्स फ़ाइलें इंपोर्ट करें

Unity 2018.2 या इसके बाद वाले वर्शन में, अगर आपके Android कस्टम इवेंट कोड में एक साथ कंपाइल नहीं की गई *.java या *.kt फ़ाइलें शामिल हैं, तो Java या Kotlin की सोर्स फ़ाइलों को प्लग-इन के तौर पर इस्तेमाल किया जा सकता है.

iOS सोर्स फ़ाइलें और स्टैटिक लाइब्रेरी इंपोर्ट करना

Unity *.framework आर्टफ़ैक्ट, *.h, और *.m सोर्स फ़ाइलों के साथ काम करता है. iOS आर्टफ़ैक्ट और सोर्स फ़ाइलों को इंपोर्ट करने के बारे में, नेटिव प्लग-इन के लिए Unity की गाइड में बताया गया है.

विज्ञापन जांचने वाले टूल की मदद से कस्टम इवेंट की जांच करना

विज्ञापन जांचने वाले टूल का इस्तेमाल करके, यह जांच की जा सकती है कि आपके ऐप्लिकेशन में कस्टम इवेंट सही तरीके से इंपोर्ट किए गए हैं या नहीं. विज्ञापन जांचने वाले टूल को, सिर्फ़ हाथ के जेस्चर से या कम से कम कोड का इस्तेमाल करके प्रोग्राम के ज़रिए खोला जा सकता है.

(ज़रूरी नहीं) C# स्क्रिप्ट से, तीसरे पक्ष के SDK टूल के नेटिव तरीकों को कॉल करें

तीसरे पक्ष की विज्ञापन नेटवर्क कंपनी के SDK टूल की कुछ खास शर्तें हो सकती हैं, जिनके लिए सीधे Android या iOS तरीकों को कॉल करना ज़रूरी हो सकता है. इन तरीकों को सीधे कॉल करने की प्रोसेस इस तरह है:

  1. प्लैटफ़ॉर्म क्लाइंट के लिए एक सामान्य इंटरफ़ेस तय करें
  2. काम न करने वाले प्लैटफ़ॉर्म के लिए डिफ़ॉल्ट क्लाइंट लागू करें
  3. Android के तरीकों को कॉल करने के लिए कोई Android क्लाइंट लागू करना
  4. iOS तरीकों को कॉल करने के लिए iOS क्लाइंट लागू करें
  5. iOS और Android क्लाइंट के बीच शर्तों के साथ स्विच करने के लिए, क्लाइंट फ़ैक्ट्री को लागू करें
  6. तीसरे पक्ष की विज्ञापन नेटवर्क कंपनी के SDK टूल की सभी सुविधाओं को ऐक्सेस करने के लिए, एक एपीआई तय करें

इस सेक्शन में दिखाया गया है कि किसी C# API में "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 API के तरीके को दिखाता हो.

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 क्लास बनाएं. इसे लागू करने के लिए, InteropServices का इस्तेमाल किया जाता है, ताकि iOS AdPubSdk क्लास में setHasUserConsent() तरीके को कॉल किया जा सके.

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 से मिले मेथड कॉल को हैंडल करने के लिए, C वाले तरीकेGADUAdPubSetHasUserConsent() का इस्तेमाल करके AdPubClientBridge.m बनाएं और AdPubSDK को शुरू करें.

AdPubClientBridge, iOS सोर्स फ़ाइल है. इसे नेटिव प्लग-इन के लिए Unity की गाइड में बताए गए तरीके के मुताबिक, Plugins/iOS फ़ोल्डर में रखा जाना चाहिए.

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 और उसके बाद के वर्शन पर Assembly परिभाषाएं का इस्तेमाल किया जा सकता है.

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

तीसरे पक्ष के विज्ञापन नेटवर्क अडैप्टर के अन्य उदाहरण

iOS और Android के तरीकों में कॉल को रैप करने के लिए, C# एपीआई लागू करने वाले तीसरे पक्ष के मीडिएशन अडैप्टर के दूसरे उदाहरणों के लिए, Google Mobile Ads Unity प्लग-इन GitHub डेटा स्टोर करने की जगह पर जाएं.