কাস্টম ইভেন্টগুলো অ্যাড ম্যানেজার মিডিয়েশন ব্যবহারকারী পাবলিশারদেরকে এমন কোনো থার্ড-পার্টি অ্যাড নেটওয়ার্কের জন্য ওয়াটারফল মিডিয়েশন যোগ করার সুযোগ দেয়, যা সমর্থিত অ্যাড নেটওয়ার্কগুলোর মধ্যে একটি নয়। এই নির্দেশিকাটি ব্যাখ্যা করে যে, কীভাবে একটি ইউনিটি প্রজেক্টে অ্যান্ড্রয়েড এবং আইওএস-এর জন্য তৈরি একটি বিদ্যমান কাস্টম ইভেন্ট ব্যবহার করতে হয়।
পূর্বশর্ত
চালিয়ে যাওয়ার আগে, নিম্নলিখিতগুলি করুন:
Google Mobile Ads Unity Plugin সেট আপ করুন । আপনার ইউনিটি অ্যাপে গুগল মোবাইল অ্যাডস ইউনিটি প্লাগইনটি আগে থেকেই ইম্পোর্ট করা থাকা উচিত।
অ্যান্ড্রয়েড এবং আইওএস-এর জন্য কাস্টম ইভেন্ট অ্যাডাপ্টার আগে থেকেই তৈরি করা আছে। কাস্টম ইভেন্ট অ্যাডাপ্টার তৈরি করতে, অ্যান্ড্রয়েড এবং আইওএস- এর জন্য আমাদের কাস্টম ইভেন্ট গাইডগুলো দেখুন।
একটি কাস্টম ইভেন্ট সংজ্ঞায়িত করুন
মিডিয়েশনে একটি কাস্টম ইভেন্টকে অংশগ্রহণ করাতে হলে, সেটিকে অবশ্যই অ্যাড ম্যানেজার ওয়েব ইন্টারফেসে সংজ্ঞায়িত করতে হবে। আপনার অ্যান্ড্রয়েড এবং আইওএস উভয় মিডিয়েশন গ্রুপে একটি কাস্টম ইভেন্ট যোগ করুন ।
| প্যারামিটারগুলি কীভাবে পূরণ করবেন | |
|---|---|
| ক্লাসের নাম (iOS) | iOS-এর ক্ষেত্রে, কাস্টম ইভেন্টটি বাস্তবায়নকারী ক্লাসের নামটি লিখুন। আপনার ক্লাসটি যদি সুইফটে তৈরি করা হয়ে থাকে, তাহলে ক্লাসের নামের আগে এর অ্যাপ / ফ্রেমওয়ার্ক মডিউলের নামটি যুক্ত করতে হবে (উদাহরণস্বরূপ, আপনার প্রোজেক্টে একাধিক টার্গেট থাকলে অথবা প্রোজেক্টের নাম টার্গেটের নাম থেকে ভিন্ন হলে টার্গেটের নাম প্রয়োজন হবে। টার্গেটের নামসহ এটি দেখতে এইরকম হবে: |
| ক্লাসের নাম (অ্যান্ড্রয়েড) | অ্যান্ড্রয়েডের জন্য, নিশ্চিত করুন যে আপনি Class Name জায়গায় যে মানটি দিচ্ছেন তা অ্যান্ড্রয়েডের সম্পূর্ণ ক্লাস নেম (fully qualified class name) (উদাহরণস্বরূপ com.google.ads.mediation.sample.customevent.SampleCustomEvent )। |
| লেবেল | ইভেন্টটির জন্য একটি অনন্য নাম লিখুন। |
| প্যারামিটার | আপনি যদি আপনার কাস্টম ইভেন্টে কোনো স্ট্রিং আর্গুমেন্ট পাস করতে চান, যেমন একটি অ্যাড ইউনিট আইডি। |
কাস্টম ইভেন্ট লাইব্রেরি আমদানি করুন
কাস্টম ইভেন্টগুলো সঠিকভাবে কাজ করার জন্য অতিরিক্ত লাইব্রেরি অন্তর্ভুক্ত করার প্রয়োজন হতে পারে। উদাহরণস্বরূপ, আপনাকে নিম্নলিখিত লাইব্রেরিগুলো অন্তর্ভুক্ত করতে হতে পারে:
- অ্যান্ড্রয়েড তৃতীয় পক্ষের এসডিকে
- অ্যান্ড্রয়েড তৃতীয় পক্ষের কাস্টম ইভেন্ট
- iOS তৃতীয় পক্ষের বিজ্ঞাপন SDK
- iOS তৃতীয় পক্ষের কাস্টম ইভেন্ট
গ্রন্থাগারের প্রকারভেদ
একটি ইউনিটি প্রজেক্টে অ্যান্ড্রয়েড বা আইওএস কোড ইম্পোর্ট করার একাধিক উপায় রয়েছে, যার মধ্যে অন্তর্ভুক্ত:
- ইউনিটির এক্সটার্নাল ডিপেন্ডেন্সি ম্যানেজার ব্যবহার করে আগে থেকে তৈরি অ্যান্ড্রয়েড বা আইওএস আর্টিফ্যাক্ট ইম্পোর্ট করা
- AAR প্লাগ-ইন এবং অ্যান্ড্রয়েড লাইব্রেরি আমদানি করা
- জাভা এবং কোটলিন সোর্স ফাইল ইম্পোর্ট করা
- iOS সোর্স ফাইল এবং স্ট্যাটিক লাইব্রেরি ইম্পোর্ট করা
আপনি যে লাইব্রেরিগুলো ব্যবহার করেন সেগুলোর প্যাকেজিংয়ের ধরনের ওপর নির্ভর করে, প্রতিটি লাইব্রেরির জন্য আপনার ভিন্ন ইম্পোর্ট কৌশল প্রয়োজন হতে পারে। প্রতিটি বিকল্প নিয়ে পরে আরও বিস্তারিত আলোচনা করা হয়েছে।
(সুপারিশকৃত) আগে থেকে তৈরি অ্যান্ড্রয়েড বা আইওএস আর্টিফ্যাক্ট আমদানি করুন
ইউনিটির এক্সটার্নাল ডিপেন্ডেন্সি ম্যানেজার ব্যবহার করে মেভেন বা কোকোয়া পডস থেকে আগে থেকে তৈরি আর্টিফ্যাক্ট ইম্পোর্ট করুন। এই প্লাগ-ইনটি গুগল মোবাইল অ্যাডস প্লাগ-ইনের সাথে অন্তর্ভুক্ত থাকে।
বিদ্যমান আর্টিফ্যাক্টগুলো ইম্পোর্ট করতে, আপনার ইম্পোর্টগুলো সংজ্ঞায়িত করার জন্য একটি কনফিগারেশন ফাইল তৈরি করুন। ফাইলের নাম এবং পাথের জন্য নিম্নলিখিত শর্তাবলী প্রযোজ্য:
- ফাইলটি অবশ্যই
/Editor/ফোল্ডারে থাকতে হবে। - ফাইলের নামের শেষে অবশ্যই
Dependencies.xmlথাকতে হবে।
উদাহরণস্বরূপ, AdPub নামক একটি কাল্পনিক বিজ্ঞাপন নেটওয়ার্কের জন্য কাস্টম ইভেন্টের অ্যাডাপ্টারগুলো ইম্পোর্ট করতে, এই ফাইলটি তৈরি করুন:
Assets/AdPub/Editor/AdPubDependencies.xml
এরপর, AdPubDependencies.xml ফাইলের মধ্যে আপনার ডিপেন্ডেন্সিগুলো সংজ্ঞায়িত করুন। ইম্পোর্ট কনফিগার করার নিয়মাবলী "External Dependency Manager for Unity Getting Started" অংশে পাওয়া যাবে। নিম্নলিখিত কোড স্নিপেটটিতে একটি কাল্পনিক "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 মেথড কল করার প্রয়োজন হয়। এই মেথডগুলো সরাসরি কল করার প্রক্রিয়াটি নিম্নরূপ:
- প্ল্যাটফর্ম ক্লায়েন্টদের জন্য একটি সাধারণ ইন্টারফেস সংজ্ঞায়িত করুন
- অসমর্থিত প্ল্যাটফর্মগুলির জন্য একটি ডিফল্ট ক্লায়েন্ট বাস্তবায়ন করুন।
- অ্যান্ড্রয়েড মেথড কল করার জন্য একটি অ্যান্ড্রয়েড ক্লায়েন্ট বাস্তবায়ন করুন।
- iOS মেথড কল করার জন্য একটি iOS ক্লায়েন্ট বাস্তবায়ন করুন।
- শর্তসাপেক্ষে iOS এবং Android ক্লায়েন্টের মধ্যে স্যুইচ করার জন্য একটি ক্লায়েন্ট ফ্যাক্টরি বাস্তবায়ন করুন।
- সমস্ত তৃতীয় পক্ষের বিজ্ঞাপন নেটওয়ার্ক 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
প্ল্যাটফর্ম ক্লায়েন্টদের জন্য একটি সাধারণ ইন্টারফেস সংজ্ঞায়িত করুন
একটি 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 ক্লাস তৈরি করুন যা শুধু মেথডের নামটি লগ করবে। ইউনিটি এডিটর এবং অ্যান্ড্রয়েড বা আইওএস ছাড়া অন্য সব প্ল্যাটফর্মের জন্য এই ইমপ্লিমেন্টেশনটি ব্যবহার করুন।
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 ইনভোক করার জন্য AdPubClientBridge.m তৈরি করুন, যেখানে GADUAdPubSetHasUserConsent() নামে একটি C মেথড থাকবে।
AdPubClientBridge একটি iOS সোর্স ফাইল এবং ইউনিটির নেটিভ প্লাগ-ইন সংক্রান্ত নির্দেশিকায় যেমন ব্যাখ্যা করা হয়েছে, সেই অনুযায়ী এটিকে অবশ্যই Plugins/iOS ফোল্ডারের ভিতরে রাখতে হবে।
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
একটি অ্যান্ড্রয়েড প্ল্যাটফর্ম ক্লায়েন্ট বাস্তবায়ন করুন
অ্যান্ড্রয়েডে IAdPubClient ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি AndroidAdPubCient ক্লাস তৈরি করুন। এই ইমপ্লিমেন্টেশনটি অ্যান্ড্রয়েডের জাভা হেল্পার ক্লাস ব্যবহার করে অ্যান্ড্রয়েডের স্ট্যাটিক মেথড setHasUserConsent() কল করে।
যেহেতু অ্যান্ড্রয়েড জাভা হেল্পার ক্লাসগুলো শুধুমাত্র অ্যান্ড্রয়েড রানটাইমের সময় উপলব্ধ থাকে, তাই কোড স্নিপেটে দেখানো পদ্ধতি অনুযায়ী UNITY_ANDROID কম্পাইলার ডিরেক্টিভ ব্যবহার করে ক্লাসটিকে র্যাপ করার মাধ্যমে আপনি কম্পাইলেশন ত্রুটি প্রতিরোধ করতে পারেন। বিকল্পভাবে, এই সমস্যাটি সমাধান করার জন্য আপনি ইউনিটি ২০১৭.৪ এবং তার পরবর্তী সংস্করণগুলোতে অ্যাসেম্বলি ডেফিনিশন ব্যবহার করতে পারেন।
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 ইন্টারফেসের প্রতিটি ক্লায়েন্ট মেথডের জন্য মেথড কল থাকবে। এই ক্লাসটি 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 প্লাগ-ইন গিটহাব রিপোজিটরিটি দেখুন।