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

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

পূর্বশর্ত

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

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

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

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

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

কিভাবে পরামিতি পূরণ করতে হয়
ক্লাসের নাম (iOS)

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

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

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

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

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

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

  • অ্যান্ড্রয়েড তৃতীয় পক্ষের SDK
  • অ্যান্ড্রয়েড তৃতীয় পক্ষের কাস্টম ইভেন্ট
  • iOS তৃতীয় পক্ষের বিজ্ঞাপন SDK
  • iOS তৃতীয় পক্ষের কাস্টম ইভেন্ট

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

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

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

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

(প্রস্তাবিত) প্রি-বিল্ট অ্যান্ড্রয়েড বা iOS আর্টিফ্যাক্ট আমদানি করুন

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

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

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

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

Assets/AdPub/Editor/AdPubDependencies.xml

এরপর, AdPubDependencies.xml ফাইলের ভিতরে আপনার নির্ভরতা নির্ধারণ করুন। ইম্পোর্ট কনফিগার করার নিয়মগুলি এক্সটার্নাল ডিপেনডেন্সি ম্যানেজার ফর ইউনিটি শুরু করার জন্য পাওয়া যাবে। নিম্নলিখিত কোড স্নিপেটে একটি অনুমানমূলক "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

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

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

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

ইউনিটি 2018.2 বা উচ্চতর থেকে শুরু করে, যদি আপনার অ্যান্ড্রয়েড কাস্টম ইভেন্ট কোডে অসংকলিত *.java বা *.kt ফাইল থাকে, তাহলে আপনি Java বা Kotlin সোর্স ফাইলগুলিকে প্লাগ-ইন হিসেবে ব্যবহার করতে পারেন।

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

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

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

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

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

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

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

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

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

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 ক্লাস তৈরি করুন যা শুধুমাত্র পদ্ধতির নাম লগ করে। ইউনিটি এডিটর এবং অ্যান্ড্রয়েড বা আইওএস ছাড়া অন্য সব প্ল্যাটফর্মের জন্য এই বাস্তবায়ন ব্যবহার করুন।

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 ফোল্ডারের ভিতরে রাখতে হবে যেমনটি নেটিভ প্লাগ-ইনগুলির জন্য ইউনিটির গাইডে ব্যাখ্যা করা হয়েছে।

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

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

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

Android এ IAdPubClient ইন্টারফেস বাস্তবায়ন করে একটি AndroidAdPubCient ক্লাস তৈরি করুন। এই বাস্তবায়নটি অ্যান্ড্রয়েড স্ট্যাটিক মেথড 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 সংজ্ঞায়িত করুন

একটি 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);
        }
    }
}

আপনার নতুন সংজ্ঞায়িত 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);
    }
}

অতিরিক্ত তৃতীয় পক্ষের বিজ্ঞাপন নেটওয়ার্ক অ্যাডাপ্টারের উদাহরণ

আইওএস এবং অ্যান্ড্রয়েড পদ্ধতিতে কলগুলি মোড়ানোর জন্য C# এপিআই প্রয়োগকারী তৃতীয় পক্ষের মধ্যস্থতা অ্যাডাপ্টারের অতিরিক্ত উদাহরণের জন্য Google মোবাইল বিজ্ঞাপন ইউনিটি প্লাগ-ইন গিথুব সংগ্রহস্থলে যান৷