পূর্বশর্ত
কাস্টম ইভেন্ট সেটআপ সম্পূর্ণ করুন।
একটি নেটিভ বিজ্ঞাপন অনুরোধ
কাস্টম ইভেন্ট লাইন আইটেম জলপ্রপাত মধ্যস্থতা শৃঙ্খলে পৌঁছে গেলে, একটি কাস্টম ইভেন্ট তৈরি করার সময় আপনি যে শ্রেণির নাম দিয়েছিলেন তাতে loadNativeAd()
পদ্ধতিটি কল করা হয়। এই ক্ষেত্রে, সেই পদ্ধতিটি SampleCustomEvent
এ রয়েছে, যা পরে SampleNativeCustomEventLoader
এ loadNativeAd()
পদ্ধতিকে কল করে।
একটি নেটিভ বিজ্ঞাপনের অনুরোধ করতে, একটি ক্লাস তৈরি করুন বা সংশোধন করুন যা loadNativeAd()
বাস্তবায়নের জন্য Adapter
প্রসারিত করে। যদি Adapter
প্রসারিত করে এমন একটি ক্লাস ইতিমধ্যেই বিদ্যমান থাকে তবে সেখানে loadNativeAd()
প্রয়োগ করুন। উপরন্তু, UnifiedNativeAdMapper
বাস্তবায়নের জন্য একটি নতুন ক্লাস তৈরি করুন।
আমাদের কাস্টম ইভেন্ট উদাহরণে , SampleCustomEvent
Adapter
ক্লাস প্রসারিত করে এবং তারপরে SampleNativeCustomEventLoader
এ প্রতিনিধি করে।
জাভা
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationNativeAdCallback; ... public class SampleCustomEvent extends Adapter { private SampleNativeCustomEventLoader nativeLoader; @Override public void loadNativeAd( @NonNull MediationNativeAdConfiguration adConfiguration, @NonNull MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> callback) { nativeLoader = new SampleNativeCustomEventLoader(adConfiguration, callback); nativeLoader.loadAd(); } }
SampleNativeCustomEventLoader
নিম্নলিখিত কাজের জন্য দায়ী:
নেটিভ বিজ্ঞাপন লোড হচ্ছে।
UnifiedNativeAdMapper
ক্লাস বাস্তবায়ন করা হচ্ছে।Google মোবাইল বিজ্ঞাপন SDK-এ বিজ্ঞাপন ইভেন্ট কলব্যাক গ্রহণ এবং প্রতিবেদন করা।
অ্যাড ম্যানেজার UI-তে সংজ্ঞায়িত ঐচ্ছিক প্যারামিটার বিজ্ঞাপন কনফিগারেশনে অন্তর্ভুক্ত করা হয়েছে। প্যারামিটারটি adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD)
এর মাধ্যমে অ্যাক্সেস করা যেতে পারে। এই প্যারামিটারটি সাধারণত একটি বিজ্ঞাপন ইউনিট শনাক্তকারী যা একটি বিজ্ঞাপন অবজেক্ট ইনস্ট্যান্ট করার সময় একটি বিজ্ঞাপন নেটওয়ার্ক SDK-এর প্রয়োজন হয়।
জাভা
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationNativeAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationNativeAdCallback; ... public class SampleNativeCustomEventLoader extends SampleNativeAdListener { /** Configuration for requesting the native ad from the third-party network. */ private final MediationNativeAdConfiguration mediationNativeAdConfiguration; /** Callback that fires on loading success or failure. */ private final MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> mediationAdLoadCallback; /** Callback for native ad events. */ private MediationNativeAdCallback nativeAdCallback; /** Constructor */ public SampleNativeCustomEventLoader( @NonNull MediationNativeAdConfiguration mediationNativeAdConfiguration, @NonNull MediationAdLoadCallback<MediationNativeAd, MediationNativeAdCallback> mediationAdLoadCallback) { this.mediationNativeAdConfiguration = mediationNativeAdConfiguration; this.mediationAdLoadCallback = mediationAdLoadCallback; } /** Loads the native ad from the third-party ad network. */ public void loadAd() { // Create one of the Sample SDK's ad loaders to request ads. Log.i("NativeCustomEvent", "Begin loading native ad."); SampleNativeAdLoader loader = new SampleNativeAdLoader(mediationNativeAdConfiguration.getContext()); // All custom events have a server parameter named "parameter" that returns // back the parameter entered into the UI when defining the custom event. String serverParameter = mediationNativeAdConfiguration .getServerParameters() .getString(MediationConfiguration .CUSTOM_EVENT_SERVER_PARAMETER_FIELD); Log.d("NativeCustomEvent", "Received server parameter."); loader.setAdUnit(serverParameter); // Create a native request to give to the SampleNativeAdLoader. SampleNativeAdRequest request = new SampleNativeAdRequest(); NativeAdOptions options = mediationNativeAdConfiguration.getNativeAdOptions(); if (options != null) { // If the NativeAdOptions' shouldReturnUrlsForImageAssets is true, the adapter should // send just the URLs for the images. request.setShouldDownloadImages(!options.shouldReturnUrlsForImageAssets()); request.setShouldDownloadMultipleImages(options.shouldRequestMultipleImages()); switch (options.getMediaAspectRatio()) { case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_LANDSCAPE: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_LANDSCAPE); break; case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_PORTRAIT: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_PORTRAIT); break; case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_SQUARE: case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_ANY: case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_UNKNOWN: default: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_ANY); } } loader.setNativeAdListener(this); // Begin a request. Log.i("NativeCustomEvent", "Start fetching native ad."); loader.fetchAd(request); } }
বিজ্ঞাপনটি সফলভাবে আনা হয়েছে বা কোন ত্রুটির সম্মুখীন হয়েছে তার উপর নির্ভর করে, আপনি হয় onSuccess()
অথবা onFailure()
কল করবেন। onSuccess()
কে বলা হয় ক্লাসের একটি উদাহরণে পাস করে যা MediationNativeAd
প্রয়োগ করে।
সাধারণত, এই পদ্ধতিগুলি আপনার অ্যাডাপ্টার প্রয়োগ করে তৃতীয় পক্ষের SDK থেকে কলব্যাকের ভিতরে প্রয়োগ করা হয়। এই উদাহরণের জন্য, নমুনা SDK-তে প্রাসঙ্গিক কলব্যাক সহ একটি SampleAdListener
আছে:
জাভা
@Override public void onNativeAdFetched(SampleNativeAd ad) { SampleUnifiedNativeAdMapper mapper = new SampleUnifiedNativeAdMapper(ad); mediationNativeAdCallback = mediationAdLoadCallback.onSuccess(mapper); } @Override public void onAdFetchFailed(SampleErrorCode errorCode) { mediationAdLoadCallback.onFailure(SampleCustomEventError.createSampleSdkError(errorCode)); }
মানচিত্র নেটিভ বিজ্ঞাপন
নেটিভ বিজ্ঞাপনের জন্য বিভিন্ন SDK-এর নিজস্ব অনন্য ফর্ম্যাট রয়েছে। কেউ একটি "শিরোনাম" ক্ষেত্র ধারণ করে এমন বস্তু ফেরত দিতে পারে, উদাহরণস্বরূপ, অন্যটিতে "শিরোনাম" থাকতে পারে। উপরন্তু, ইমপ্রেশন ট্র্যাক করতে এবং ক্লিক প্রক্রিয়াকরণের জন্য ব্যবহৃত পদ্ধতিগুলি একটি SDK থেকে অন্যটিতে পরিবর্তিত হতে পারে।
UnifiedNativeAdMapper
এই পার্থক্যগুলি মিটমাট করার জন্য এবং Google মোবাইল বিজ্ঞাপন SDK দ্বারা প্রত্যাশিত ইন্টারফেসের সাথে মেলে একটি মধ্যস্থতাকৃত SDK-এর নেটিভ অ্যাড অবজেক্টকে মানিয়ে নেওয়ার জন্য দায়ী৷ কাস্টম ইভেন্টগুলিকে তাদের মধ্যস্থতা করা SDK-এর জন্য নির্দিষ্ট তাদের নিজস্ব ম্যাপার তৈরি করতে এই শ্রেণীকে প্রসারিত করা উচিত। এখানে আমাদের উদাহরণ কাস্টম ইভেন্ট প্রকল্প থেকে একটি নমুনা বিজ্ঞাপন ম্যাপার রয়েছে:
জাভা
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.UnifiedNativeAdMapper; import com.google.android.gms.ads.nativead.NativeAd; ... public class SampleUnifiedNativeAdMapper extends UnifiedNativeAdMapper { private final SampleNativeAd sampleAd; public SampleUnifiedNativeAdMapper(SampleNativeAd ad) { sampleAd = ad; setHeadline(sampleAd.getHeadline()); setBody(sampleAd.getBody()); setCallToAction(sampleAd.getCallToAction()); setStarRating(sampleAd.getStarRating()); setStore(sampleAd.getStoreName()); setIcon( new SampleNativeMappedImage( ad.getIcon(), ad.getIconUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE)); setAdvertiser(ad.getAdvertiser()); List<NativeAd.Image> imagesList = new ArrayList<NativeAd.Image>(); imagesList.add(new SampleNativeMappedImage(ad.getImage(), ad.getImageUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE)); setImages(imagesList); if (sampleAd.getPrice() != null) { NumberFormat formatter = NumberFormat.getCurrencyInstance(); String priceString = formatter.format(sampleAd.getPrice()); setPrice(priceString); } Bundle extras = new Bundle(); extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness()); this.setExtras(extras); setOverrideClickHandling(false); setOverrideImpressionRecording(false); setAdChoicesContent(sampleAd.getInformationIcon()); } @Override public void recordImpression() { sampleAd.recordImpression(); } @Override public void handleClick(View view) { sampleAd.handleClick(view); } // The Sample SDK doesn't do its own impression/click tracking, instead relies on its // publishers calling the recordImpression and handleClick methods on its native ad object. So // there's no need to pass a reference to the View being used to display the native ad. If // your mediated network does need a reference to the view, the following method can be used // to provide one. @Override public void trackViews(View containerView, Map<String, View> clickableAssetViews, Map<String, View> nonClickableAssetViews) { super.trackViews(containerView, clickableAssetViews, nonClickableAssetViews); // If your ad network SDK does its own impression tracking, here is where you can track the // top level native ad view and its individual asset views. } @Override public void untrackView(View view) { super.untrackView(view); // Here you would remove any trackers from the View added in trackView. } }
আমরা এখন কনস্ট্রাক্টর কোডটি ঘনিষ্ঠভাবে দেখে নিই।
মধ্যস্থিত নেটিভ বিজ্ঞাপন বস্তুর একটি রেফারেন্স ধরে রাখুন
কনস্ট্রাক্টর SampleNativeAd
প্যারামিটার গ্রহণ করে, নমুনা SDK দ্বারা তার নেটিভ বিজ্ঞাপনের জন্য ব্যবহৃত নেটিভ অ্যাড ক্লাস। ম্যাপারের মধ্যস্থতা করা বিজ্ঞাপনের একটি রেফারেন্স প্রয়োজন যাতে এটি ক্লিক এবং ইমপ্রেশন ইভেন্টে পাস করতে পারে। SampleNativeAd
একটি স্থানীয় পরিবর্তনশীল হিসাবে সংরক্ষণ করা হয়.
ম্যাপ করা সম্পদ বৈশিষ্ট্য সেট করুন
Constructor SampleNativeAd
অবজেক্ট ব্যবহার করে UnifiedNativeAdMapper
এ সম্পদ জমা করতে।
এই স্নিপেট মধ্যস্থতা করা বিজ্ঞাপনের মূল্য ডেটা পায় এবং ম্যাপারের মূল্য সেট করতে এটি ব্যবহার করে:
জাভা
if (sampleAd.getPrice() != null) { NumberFormat formatter = NumberFormat.getCurrencyInstance(); String priceString = formatter.format(sampleAd.getPrice()); setPrice(priceString); }
এই উদাহরণে, মধ্যস্থতা করা বিজ্ঞাপন মূল্যকে double
হিসাবে সঞ্চয় করে, যখন অ্যাড ম্যানেজার একই সম্পদের জন্য একটি String
ব্যবহার করে। এই ধরনের রূপান্তরগুলি পরিচালনা করার জন্য ম্যাপার দায়ী৷
মানচিত্র ইমেজ সম্পদ
double
বা String
মতো ডেটা টাইপ ম্যাপিংয়ের চেয়ে ছবির সম্পদের ম্যাপিং আরও জটিল। চিত্রগুলি স্বয়ংক্রিয়ভাবে ডাউনলোড করা যেতে পারে বা URL মান হিসাবে ফিরে আসতে পারে। তাদের পিক্সেল-টু-ডিপিআই স্কেলও পরিবর্তিত হতে পারে।
এই বিবরণগুলি পরিচালনা করতে আপনাকে সাহায্য করার জন্য, Google মোবাইল বিজ্ঞাপন SDK NativeAd.Image
ক্লাস প্রদান করে। একটি মধ্যস্থিত নেটিভ বিজ্ঞাপন ম্যাপ করার জন্য আপনাকে যেভাবে UnifiedNativeAdMapper
এর একটি সাবক্লাস তৈরি করতে হবে, একইভাবে আপনাকে চিত্র সম্পদ ম্যাপ করার সময় NativeAd.Image
এর একটি সাবক্লাস তৈরি করতে হবে।
এখানে কাস্টম ইভেন্টের SampleNativeMappedImage
ক্লাসের একটি উদাহরণ রয়েছে:
জাভা
public class SampleNativeMappedImage extends NativeAd.Image { private Drawable drawable; private Uri imageUri; private double scale; public SampleNativeMappedImage(Drawable drawable, Uri imageUri, double scale) { this.drawable = drawable; this.imageUri = imageUri; this.scale = scale; } @Override public Drawable getDrawable() { return drawable; } @Override public Uri getUri() { return imageUri; } @Override public double getScale() { return scale; } }
SampleNativeAdMapper
ম্যাপারের আইকন ইমেজ সম্পদ সেট করতে এই লাইনে তার ম্যাপ করা চিত্র শ্রেণী ব্যবহার করে:
জাভা
setIcon(new SampleNativeMappedImage(ad.getAppIcon(), ad.getAppIconUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE));
অতিরিক্ত বান্ডেলে ক্ষেত্র যোগ করুন
কিছু মধ্যস্থতাকারী SDK অ্যাড ম্যানেজার নেটিভ বিজ্ঞাপন ফর্ম্যাটে অতিরিক্ত সম্পদ প্রদান করে। UnifiedNativeAdMapper
ক্লাসে একটি setExtras()
পদ্ধতি রয়েছে যা প্রকাশকদের কাছে এই সম্পদগুলি প্রেরণ করতে ব্যবহৃত হয়। SampleNativeAdMapper
নমুনা SDK-এর "বিস্ময়করতার ডিগ্রি" সম্পদের জন্য এটি ব্যবহার করে:
জাভা
Bundle extras = new Bundle(); extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness()); this.setExtras(extras);
প্রকাশকরা NativeAd
ক্লাসের getExtras()
পদ্ধতি ব্যবহার করে ডেটা পুনরুদ্ধার করতে পারেন।
অ্যাডচয়েস
UnifiedNativeAdMapper
এ setAdChoicesContent()
পদ্ধতি ব্যবহার করে একটি AdChoices আইকন প্রদানের জন্য আপনার কাস্টম ইভেন্ট দায়ী। এখানে SampleNativeAdMapper
থেকে একটি স্নিপেট দেখানো হয়েছে কিভাবে AdChoices আইকন প্রদান করতে হয়:
জাভা
public SampleNativeAdMapper(SampleNativeAd ad) { ... setAdChoicesContent(sampleAd.getInformationIcon()); }
ইমপ্রেশন এবং ক্লিক ইভেন্ট
Google মোবাইল বিজ্ঞাপন SDK এবং মধ্যস্থতা করা SDK উভয়েরই জানতে হবে কখন কোন ইম্প্রেশন বা ক্লিক হয়, কিন্তু শুধুমাত্র একটি SDK এই ইভেন্টগুলিকে ট্র্যাক করতে হবে৷ মধ্যস্থতা করা SDK ট্র্যাকিং ইম্প্রেশন এবং নিজের ক্লিকগুলিকে সমর্থন করে কিনা তার উপর নির্ভর করে কাস্টম ইভেন্টগুলি ব্যবহার করতে পারে এমন দুটি ভিন্ন পদ্ধতি রয়েছে৷
Google মোবাইল বিজ্ঞাপন SDK-এর মাধ্যমে ক্লিক এবং ইম্প্রেশন ট্র্যাক করুন৷
যদি মধ্যস্থতা করা SDK তার নিজস্ব ইম্প্রেশন এবং ক্লিক ট্র্যাকিং না করে কিন্তু ক্লিক এবং ইম্প্রেশন রেকর্ড করার পদ্ধতি প্রদান করে, তাহলে Google Mobile Ads SDK এই ইভেন্টগুলি ট্র্যাক করতে এবং অ্যাডাপ্টারকে বিজ্ঞপ্তি দিতে পারে। UnifiedNativeAdMapper
ক্লাসে দুটি পদ্ধতি রয়েছে: recordImpression()
এবং handleClick()
যা কাস্টম ইভেন্টগুলি মধ্যস্থিত নেটিভ বিজ্ঞাপন অবজেক্টে সংশ্লিষ্ট পদ্ধতিকে কল করার জন্য প্রয়োগ করতে পারে:
জাভা
@Override public void recordImpression() { sampleAd.recordImpression(); } @Override public void handleClick(View view) { sampleAd.handleClick(view); }
যেহেতু SampleNativeAdMapper
নমুনা SDK-এর নেটিভ অ্যাড অবজেক্টের একটি রেফারেন্স ধারণ করে, তাই এটি একটি ক্লিক বা ইমপ্রেশন রিপোর্ট করার জন্য সেই বস্তুর উপযুক্ত পদ্ধতিতে কল করতে পারে। মনে রাখবেন যে handleClick()
পদ্ধতিটি একটি একক প্যারামিটার নেয়: View
অবজেক্টের সাথে সংশ্লিষ্ট নেটিভ বিজ্ঞাপন সম্পদ যা ক্লিক পেয়েছে।
মধ্যস্থতা করা SDK-এর মাধ্যমে ক্লিক এবং ইম্প্রেশন ট্র্যাক করুন
কিছু মধ্যস্থতাকারী SDK তাদের নিজস্ব ক্লিক এবং ইম্প্রেশন ট্র্যাক করতে পছন্দ করতে পারে। সেক্ষেত্রে, আপনার UnifiedNativeAdMapper
এর কনস্ট্রাক্টরে নিম্নলিখিত দুটি কল করার মাধ্যমে আপনার ডিফল্ট ক্লিক এবং ইমপ্রেশন ট্র্যাকিং ওভাররাইড করা উচিত:
জাভা
setOverrideClickHandling(true); setOverrideImpressionRecording(true);
ক্লিক এবং ইমপ্রেশন ট্র্যাকিংকে ওভাররাইড করে এমন কাস্টম ইভেন্টগুলির onAdClicked()
এবং onAdImpression()
ইভেন্টগুলিকে Google মোবাইল বিজ্ঞাপন SDK-তে রিপোর্ট করতে হবে৷
ইম্প্রেশন এবং ক্লিক ট্র্যাক করতে, মধ্যস্থতা করা SDK-এর সম্ভবত ট্র্যাকিং সক্ষম করতে ভিউগুলিতে অ্যাক্সেসের প্রয়োজন। কাস্টম ইভেন্টটি trackViews()
পদ্ধতিকে ওভাররাইড করতে হবে এবং ট্র্যাক করতে মধ্যস্থতাকারী SDK-এ নেটিভ বিজ্ঞাপনের ভিউ পাস করতে এটি ব্যবহার করতে হবে। আমাদের কাস্টম ইভেন্ট উদাহরণ প্রকল্পের নমুনা SDK (যা থেকে এই গাইডের কোড স্নিপেট নেওয়া হয়েছে) এই পদ্ধতি ব্যবহার করে না; কিন্তু যদি এটি করে থাকে, কাস্টম ইভেন্ট কোডটি এরকম কিছু দেখাবে:
জাভা
@Override public void trackViews(View containerView, Map<String, View> clickableAssetViews, Map<String, View> nonClickableAssetViews) { sampleAd.setNativeAdViewForTracking(containerView); }
যদি মধ্যস্থতা করা SDK স্বতন্ত্র সম্পদ ট্র্যাকিং সমর্থন করে, তাহলে কোন ভিউগুলিকে ক্লিকযোগ্য করা উচিত তা দেখতে এটি clickableAssetViews
ভিতরে দেখতে পারে। এই মানচিত্রটিকে NativeAdAssetNames
এ একটি সম্পদের নাম দ্বারা চাবি করা হয়েছে। UnifiedNativeAdMapper
একটি অনুরূপ untrackView()
পদ্ধতি অফার করে যা কাস্টম ইভেন্টগুলি দৃশ্যের যেকোন রেফারেন্স প্রকাশ করতে এবং এটিকে নেটিভ বিজ্ঞাপন অবজেক্ট থেকে বিচ্ছিন্ন করতে ওভাররাইড করতে পারে।
মধ্যস্থতা ইভেন্টগুলি Google মোবাইল বিজ্ঞাপন SDK-এ ফরওয়ার্ড করুন
আপনি MediationNativeAdCallback
ডক্সে মধ্যস্থতা সমর্থন করে এমন সমস্ত কলব্যাক খুঁজে পেতে পারেন।
এটি গুরুত্বপূর্ণ যে আপনার কাস্টম ইভেন্ট যতটা সম্ভব এই কলব্যাকগুলিকে ফরোয়ার্ড করে, যাতে আপনার অ্যাপ Google মোবাইল বিজ্ঞাপন SDK থেকে এই সমতুল্য ইভেন্টগুলি পায়৷ এখানে কলব্যাক ব্যবহার করার একটি উদাহরণ:
এটি নেটিভ বিজ্ঞাপনের জন্য কাস্টম ইভেন্ট বাস্তবায়ন সম্পূর্ণ করে। সম্পূর্ণ উদাহরণ GitHub এ উপলব্ধ।