কাস্টম ইভেন্ট তৈরি করুন

প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড আইওএস ইউনিটি

কাস্টম ইভেন্টগুলি AdMob মধ্যস্থতা ব্যবহারকারী প্রকাশকদের এমন একটি তৃতীয় পক্ষের বিজ্ঞাপন নেটওয়ার্কের জন্য জলপ্রপাত মধ্যস্থতা যোগ করতে সক্ষম করে যা সমর্থিত বিজ্ঞাপন নেটওয়ার্কগুলির মধ্যে একটি নয়। এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে একটি ইউনিটি প্রকল্পে Android এবং iOS এর জন্য তৈরি একটি বিদ্যমান কাস্টম ইভেন্ট ব্যবহার করবেন।

পূর্বশর্ত

  • সম্পূর্ণ শুরু করুন । আপনার ইউনিটি অ্যাপে ইতিমধ্যেই Google মোবাইল বিজ্ঞাপন ইউনিটি প্লাগ-ইন আমদানি করা উচিত।

  • অ্যান্ড্রয়েড এবং iOS এর জন্য ইতিমধ্যেই তৈরি কাস্টম ইভেন্ট অ্যাডাপ্টার। কাস্টম ইভেন্ট অ্যাডাপ্টার তৈরি করতে, অ্যান্ড্রয়েড এবং iOS এর জন্য আমাদের কাস্টম ইভেন্ট গাইড দেখুন।

একটি কাস্টম ইভেন্ট সংজ্ঞায়িত করুন

কোনও কাস্টম ইভেন্টকে মধ্যস্থতায় অংশগ্রহণ করার জন্য, কাস্টম ইভেন্টটিকে AdMob ওয়েব ইন্টারফেসে সংজ্ঞায়িত করতে হবে। আপনার Android এবং iOS উভয় মধ্যস্থতা গ্রুপেই একটি কাস্টম ইভেন্ট যোগ করুন

এই স্ক্রিনশটটি কিছু নমুনা কাস্টম ইভেন্ট সেটিংস দেখায়:

প্যারামিটারগুলি কীভাবে পূরণ করবেন
ক্লাসের নাম (iOS)

iOS এর জন্য, কাস্টম ইভেন্টটি বাস্তবায়নকারী ক্লাসের নাম লিখুন।

যদি আপনার ক্লাসটি Swift-এ বাস্তবায়িত হয়, তাহলে আপনাকে ক্লাসের নামের সাথে তার অ্যাপ/ফ্রেমওয়ার্ক মডিউলের নাম (উদাহরণস্বরূপ, appName.className ) যোগ করতে হবে।

আপনার প্রোজেক্টে যদি একাধিক টার্গেট থাকে অথবা প্রোজেক্টের নাম টার্গেট নামের থেকে আলাদা হয়, তাহলে টার্গেট নাম প্রয়োজন। টার্গেট নামের সাথে এটি দেখতে এরকম হবে: appName_targetName.className । এছাড়াও, ড্যাশের মতো যেকোনো অ-বর্ণানুক্রমিক অক্ষর আন্ডারস্কোর দিয়ে প্রতিস্থাপন করতে ভুলবেন না।

ক্লাসের নাম (অ্যান্ড্রয়েড) অ্যান্ড্রয়েডের জন্য, নিশ্চিত করুন যে আপনি Class Name জন্য যে মানটি দিয়েছেন তা অ্যান্ড্রয়েডের জন্য সম্পূর্ণরূপে যোগ্য ক্লাসের নাম (উদাহরণস্বরূপ com.google.ads.mediation.sample.customevent.SampleCustomEvent )।
লেবেল ইভেন্টের জন্য একটি অনন্য নাম লিখুন।
প্যারামিটার যদি আপনি আপনার কাস্টম ইভেন্টে একটি স্ট্রিং আর্গুমেন্ট পাস করতে চান, উদাহরণস্বরূপ একটি বিজ্ঞাপন ইউনিট আইডি।

কাস্টম ইভেন্ট লাইব্রেরি আমদানি করুন

কাস্টম ইভেন্টগুলি সঠিকভাবে কাজ করার জন্য অতিরিক্ত লাইব্রেরি অন্তর্ভুক্ত করার প্রয়োজন হতে পারে। উদাহরণস্বরূপ, আপনাকে নিম্নলিখিত লাইব্রেরিগুলি অন্তর্ভুক্ত করতে হতে পারে:

  • অ্যান্ড্রয়েড থার্ড-পার্টি SDK
  • অ্যান্ড্রয়েড থার্ড-পার্টি কাস্টম ইভেন্ট
  • iOS থার্ড-পার্টি বিজ্ঞাপন SDK
  • iOS থার্ড-পার্টি কাস্টম ইভেন্ট

লাইব্রেরির প্রকারভেদ

ইউনিটি প্রজেক্টে অ্যান্ড্রয়েড বা আইওএস কোড আমদানি করার একাধিক উপায় রয়েছে, যার মধ্যে রয়েছে:

  • ইউনিটির জন্য এক্সটার্নাল ডিপেন্ডেন্সি ম্যানেজার ব্যবহার করে পূর্বনির্মিত অ্যান্ড্রয়েড বা iOS আর্টিফ্যাক্ট আমদানি করা
  • AAR প্লাগ-ইন এবং অ্যান্ড্রয়েড লাইব্রেরি আমদানি করা হচ্ছে
  • জাভা এবং কোটলিন সোর্স ফাইল আমদানি করা হচ্ছে
  • iOS সোর্স ফাইল এবং স্ট্যাটিক লাইব্রেরি আমদানি করা হচ্ছে

আপনার ব্যবহৃত লাইব্রেরিগুলি কীভাবে প্যাকেজ করা হয়েছে তার উপর নির্ভর করে, প্রতিটি লাইব্রেরির জন্য আপনার আলাদা আমদানি কৌশলের প্রয়োজন হতে পারে। প্রতিটি বিকল্প সম্পর্কে পরে আরও বিস্তারিত আলোচনা করা হবে।

(প্রস্তাবিত) পূর্বনির্মিত Android বা iOS শিল্পকর্ম আমদানি করুন

ইউনিটির জন্য এক্সটার্নাল ডিপেন্ডেন্সি ম্যানেজার ব্যবহার করে Maven বা CocoaPods থেকে পূর্বনির্মিত আর্টিফ্যাক্টগুলি আমদানি করুন। এই প্লাগ-ইনটি GoogleMobileAds প্লাগ-ইনের সাথে অন্তর্ভুক্ত।

বিদ্যমান আর্টিফ্যাক্টগুলি আমদানি করতে, আপনার আমদানিগুলি সংজ্ঞায়িত করার জন্য একটি কনফিগারেশন ফাইল তৈরি করুন। ফাইলের নাম এবং পথের নিম্নলিখিত প্রয়োজনীয়তা রয়েছে:

  • ফাইলটি /Editor/ ফোল্ডারে থাকা আবশ্যক।
  • ফাইলের নাম অবশ্যই Dependencies.xml দিয়ে শেষ হতে হবে।

উদাহরণস্বরূপ, AdPub নামের একটি কাল্পনিক বিজ্ঞাপন নেটওয়ার্কের জন্য কাস্টম ইভেন্টের অ্যাডাপ্টার আমদানি করতে, ফাইলটি তৈরি করুন:

Assets/AdPub/Editor/AdPubDependencies.xml

এরপর, AdPubDependencies.xml ফাইলের ভেতরে আপনার নির্ভরতা নির্ধারণ করুন। আমদানি কনফিগার করার নিয়মগুলি ইউনিটি শুরু করার জন্য বহিরাগত নির্ভরতা ব্যবস্থাপক -এ পাওয়া যাবে। নিম্নলিখিত কোড স্নিপেটে Android এবং iOS SDK এবং একটি কাল্পনিক "AdPub" বিজ্ঞাপন নেটওয়ার্কের জন্য কাস্টম ইভেন্ট লাইব্রেরি অন্তর্ভুক্ত রয়েছে।

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

AAR প্লাগ-ইন এবং অ্যান্ড্রয়েড লাইব্রেরি আমদানি করুন

ইউনিটি *.aar ফাইল আমদানির পাশাপাশি অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পগুলিকে সমর্থন করে। যদি আপনার অ্যান্ড্রয়েড কাস্টম ইভেন্টটি এইভাবে প্যাকেজ করা হয়, তাহলে আপনার ইউনিটি প্রকল্পে কীভাবে সেই ফাইলগুলি অন্তর্ভুক্ত করবেন তার নির্দেশাবলীর জন্য AAR প্লাগ-ইন এবং অ্যান্ড্রয়েড লাইব্রেরিগুলি দেখুন।

জাভা এবং কোটলিন সোর্স ফাইল আমদানি করুন

ইউনিটি ২০১৮.২ বা তার পরবর্তী ভার্সন থেকে শুরু করে, যদি আপনার অ্যান্ড্রয়েড কাস্টম ইভেন্ট কোডে আনকম্পাইলেড *.java অথবা *.kt ফাইল থাকে, তাহলে আপনি জাভা অথবা কোটলিন সোর্স ফাইলগুলিকে প্লাগ-ইন হিসেবে ব্যবহার করতে পারেন।

iOS সোর্স ফাইল এবং স্ট্যাটিক লাইব্রেরি আমদানি করুন

ইউনিটি *.framework আর্টিফ্যাক্ট, *.h , এবং *.m সোর্স ফাইল সমর্থন করে। iOS আর্টিফ্যাক্ট এবং সোর্স ফাইল আমদানি করার পদ্ধতি ইউনিটির নেটিভ প্লাগ-ইনের নির্দেশিকাতে ব্যাখ্যা করা হয়েছে।

বিজ্ঞাপন পরিদর্শকের সাহায্যে কাস্টম ইভেন্ট পরীক্ষা করুন

আপনার অ্যাপ্লিকেশনে কাস্টম ইভেন্টগুলি সঠিকভাবে আমদানি করা হয়েছে কিনা তা পরীক্ষা করার জন্য বিজ্ঞাপন পরিদর্শক ব্যবহার করা যেতে পারে। বিজ্ঞাপন পরিদর্শক কেবল অঙ্গভঙ্গি দিয়ে বা ন্যূনতম কোড সহ প্রোগ্রাম্যাটিকভাবে খোলা যেতে পারে।

(ঐচ্ছিক) C# স্ক্রিপ্ট থেকে তৃতীয় পক্ষের SDK নেটিভ পদ্ধতিতে কল করুন

তৃতীয় পক্ষের বিজ্ঞাপন নেটওয়ার্ক SDK-এর বিশেষ প্রয়োজনীয়তা থাকতে পারে যার জন্য সরাসরি Android বা iOS পদ্ধতিতে কল করার প্রয়োজন হয়। এই পদ্ধতিগুলিকে সরাসরি কল করার প্রক্রিয়াটি নিম্নরূপ:

  1. প্ল্যাটফর্ম ক্লায়েন্টদের জন্য একটি সাধারণ ইন্টারফেস নির্ধারণ করুন
  2. অসমর্থিত প্ল্যাটফর্মগুলির জন্য একটি ডিফল্ট ক্লায়েন্ট বাস্তবায়ন করুন
  3. অ্যান্ড্রয়েড পদ্ধতিতে কল করার জন্য একটি অ্যান্ড্রয়েড ক্লায়েন্ট বাস্তবায়ন করুন
  4. iOS পদ্ধতিতে কল করার জন্য একটি iOS ক্লায়েন্ট বাস্তবায়ন করুন
  5. iOS এবং Android ক্লায়েন্টদের মধ্যে শর্তসাপেক্ষে স্যুইচ করার জন্য একটি ক্লায়েন্ট ফ্যাক্টরি বাস্তবায়ন করুন
  6. সমস্ত থার্ড-পার্টি বিজ্ঞাপন নেটওয়ার্ক SDK কার্যকারিতা অ্যাক্সেস করার জন্য একটি API নির্ধারণ করুন

নিম্নলিখিত বিভাগে দেখানো হয়েছে কিভাবে এই পদক্ষেপগুলি "AdPub" নামক একটি কাল্পনিক বিজ্ঞাপন নেটওয়ার্কের জন্য বাস্তবায়িত হয় যা একটি C# API তে থাকে যা Android এবং iOS এর পদ্ধতিগুলিতে কল করতে পারে:

অ্যান্ড্রয়েড

package com.adpub.android;

public class AdPubSdk
{
    public static void setHasUserConsent(boolean hasUserConsent);
}

আইওএস

@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end

প্ল্যাটফর্ম ক্লায়েন্টদের জন্য একটি সাধারণ ইন্টারফেস নির্ধারণ করুন

অন্তর্নিহিত Android এবং iOS API প্রতিনিধিত্ব করে এমন একটি পদ্ধতি ব্যবহার করে একটি IAdPubClient ইন্টারফেস তৈরি করুন।

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 ক্লাস তৈরি করুন যা কেবল পদ্ধতির নাম লগ করে। ইউনিটি এডিটর এবং অ্যান্ড্রয়েড বা 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 থেকে মেথড কল পরিচালনা করার জন্য C মেথড GADUAdPubSetHasUserConsent() দিয়ে AdPubClientBridge.m তৈরি করুন এবং AdPubSDK ব্যবহার করুন।

AdPubClientBridge একটি iOS সোর্স ফাইল এবং এটি অবশ্যই Plugins/iOS ফোল্ডারের ভিতরে রাখতে হবে যেমনটি Unity-এর নেটিভ প্লাগ-ইনের নির্দেশিকায় ব্যাখ্যা করা হয়েছে।

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
  [AdPubSDK setHasUserConsent:hasUserConsent];
}

একটি অ্যান্ড্রয়েড প্ল্যাটফর্ম ক্লায়েন্ট বাস্তবায়ন করুন

Android-এ IAdPubClient ইন্টারফেস বাস্তবায়নের জন্য একটি AndroidAdPubCient ক্লাস তৈরি করুন। এই বাস্তবায়নটি Android স্ট্যাটিক পদ্ধতি setHasUserConsent() কল করার জন্য Android Java সহায়ক ক্লাস ব্যবহার করে।

যেহেতু অ্যান্ড্রয়েড জাভা হেল্পার ক্লাসগুলি শুধুমাত্র অ্যান্ড্রয়েড রানটাইম চলাকালীন উপলব্ধ থাকে, তাই আপনি কোড স্নিপেটে দেখানো ক্লাসটি মোড়ানোর জন্য UNITY_ANDROID কম্পাইলার নির্দেশিকা ব্যবহার করে সংকলন ত্রুটিগুলি প্রতিরোধ করতে পারেন। বিকল্পভাবে, আপনি এই সমস্যাটি সমাধানের জন্য ইউনিটি 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
        }
    }
}

প্রতিটি ইন্টারফেস পদ্ধতির জন্য একটি পাবলিক API নির্ধারণ করুন

আপনার IAdPubClient ইন্টারফেসে প্রতিটি ক্লায়েন্ট পদ্ধতির জন্য পদ্ধতি কল সহ একটি AdPubApi ক্লাস তৈরি করুন। এই ক্লাসটি AdPubClientFactory ব্যবহার করে IAdPubClient এর একটি উদাহরণ পায় এবং অন্তর্নিহিত 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);
        }
    }
}

আপনার নতুন সংজ্ঞায়িত API কল করুন

উপরে সংজ্ঞায়িত API কে আপনি এখানে কিভাবে কল করতে পারেন:

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# API বাস্তবায়নকারী তৃতীয় পক্ষের মধ্যস্থতা অ্যাডাপ্টারের অতিরিক্ত উদাহরণের জন্য Google Mobile Ads Unity প্লাগ-ইন Github সংগ্রহস্থলটি দেখুন।