বিজ্ঞাপন থেকে হওয়া উপার্জন পরিমাপ করা

উপার্জনের উৎস পরিমাপ করলে, আপনার ব্যবহারকারীদের লাইফটাইম ভ্যালু বুঝতে এবং অ্যাপের ব্যবসা বাড়াতে সাহায্য করে। আপনার প্ল্যাটফর্মের জন্য কীভাবে বিজ্ঞাপন থেকে হওয়া উপার্জন মাপতে হয় তা এই নির্দেশিকা থেকে জানতে পারবেন।

বিজ্ঞাপন থেকে হওয়া উপার্জন ট্র্যাক করার সুবিধা সেট-আপ করার পরে, আপনি এগুলির মধ্যে যেকোনও একটি করতে পারবেন:

শুরু করার আগে

আপনি এখনও না করে থাকলে, নিম্নলিখিত টাস্কগুলি সম্পূর্ণ করতে ভুলবেন না:

  1. Analytics-এর সাথে শুরু করুন নিবন্ধে যেভাবে বলা হয়েছে সেইভাবে আপনার প্রোজেক্ট ও অ্যাপ সেট-আপ করুন।

  2. আপনার Firebase প্রোজেক্টটি কোনও Google Analytics অ্যাকাউন্টের সাথে লিঙ্ক করেছেন কিনা তা ভালোভাবে দেখে নিন।

  3. নিশ্চিত করুন যে আপনার অ্যাপে Android SDK v17.6.0+ বা Apple প্ল্যাটফর্ম SDK v6.34.0+ অন্তর্ভুক্ত করেছেন।

প্রয়োগ

আপনি Google Analytics ব্যবহার করে মনিটাইজেশন প্ল্যাটফর্মের মাধ্যমে বিজ্ঞাপন দেখিয়ে হওয়া উপার্জন পরিমাপ করতে পারেন, যেমন AdMob, AppLovin এবং ironSource. বিজ্ঞাপন থেকে হওয়া উপার্জন পরিমাপ করতে, আপনার ব্যবহারকারী যখনই আপনার অ্যাপে কোনও বিজ্ঞাপন দেখবেন, আপনাকে অবশ্যই ad_impression ইভেন্ট লগ করতে হবে। এইসব ইভেন্টে বিজ্ঞাপন প্ল্যাটফর্ম, সোর্স, মুদ্রা ও ভ্যালুর মতো বিবরণ থাকে।

AdMob

আপনি AdMob প্ল্যাটফর্ম ব্যবহার করলে, Firebase-এর সাথে আপনার AdMob অ্যাপ লিঙ্ক করুন এবং Analytics বিজ্ঞাপন থেকে হওয়া উপার্জন অটোমেটিক পরিমাপ করার সুবিধা চালু করুন। Firebase SDK for Google Analytics আপনার ব্যবহারকারীরা কোনও বিজ্ঞাপন ইম্প্রেশন দেখলে ad_impression ইভেন্ট অটোমেটিক লগ করে।

অন্যান্য বিজ্ঞাপন মনিটাইজেশন প্ল্যাটফর্ম

AppLovin ও ironSource-এর মতো প্ল্যাটফর্ম ইম্প্রেশন-লেভেল উপার্জনের ডেটা প্রদান করে যা আপনি Google Analytics ad_impression ইভেন্ট লগ করার জন্য ব্যবহার করতে পারেন।

নিচের বিভাগে, কয়েকটি আলাদা আলাদা বিজ্ঞাপন মনিটাইজেশন প্ল্যাটফর্মের জন্য প্রয়োগের উদাহরণ দেখানো হয়েছে।

AppLovin

Swift

মনে রাখবেন: এই Firebase প্রোডাক্ট watchOS টার্গেটে উপলভ্য নয়।
func didPayRevenue(_ impressionData: MAAd?) {
  if let impressionData = impressionData {
    Analytics.logEvent(
      AnalyticsEventAdImpression,
      parameters: [
        AnalyticsParameterAdPlatform: "AppLovin",
        AnalyticsParameterAdUnitName: impressionData.adUnitIdentifier,
        AnalyticsParameterAdFormat: impressionData.format,
        AnalyticsParameterValue: impressionData.revenue,
        AnalyticsParameterCurrency: "USD",  // All Applovin revenue is sent in USD
        AnalyticsParameterAdSource: impressionData.networkName,
      ])
  }
}

Objective-C

মনে রাখবেন: এই Firebase প্রোডাক্ট watchOS টার্গেটে উপলভ্য নয়।
- (void)didPayRevenueForAd:(MAAd *)impressionData {
    [FIRAnalytics logEventWithName:kFIREventAdImpression
                    parameters: @{
                        kFIRParameterAdPlatform: @"AppLovin",
                        kFIRParameterAdSource: impressionData.networkName,
                        kFIRParameterAdFormat: impressionData.format,
                        kFIRParameterAdUnitName: impressionData.adUnitIdentifier,
                        kFIRParameterCurrency: @"USD", // All Applovin revenue is sent in USD
                        kFIRParameterValue: impressionData.revenue
                    }];
}

Kotlin

override fun onAdRevenuePaid(impressionData: MaxAd?) {
    impressionData?.let {
        firebaseAnalytics = Firebase.analytics
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) {
            param(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin")
            param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.adUnitId)
            param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.format.label)
            param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.networkName)
            param(FirebaseAnalytics.Param.VALUE, impressionData.revenue)
            param(FirebaseAnalytics.Param.CURRENCY, "USD") // All Applovin revenue is sent in USD
        }
    }
}

Java

@Override
public void onAdRevenuePaid(MaxAd impressionData) {

    double revenue = impressionData.getRevenue(); // In USD

    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    Bundle params = new Bundle();
    params.putString(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin");
    params.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getNetworkName());
    params.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getFormat().getLabel());
    params.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getAdUnitId());
    params.putDouble(FirebaseAnalytics.Param.VALUE, revenue);
    params.putString(FirebaseAnalytics.Param.CURRENCY, "USD"); // All Applovin revenue is sent in USD
    mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, params);
}

Unity

// Attach callbacks based on the ad format(s) you are using
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
private void OnAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo impressionData)
{
double revenue = impressionData.Revenue;
var impressionParameters = new[] {
  new Firebase.Analytics.Parameter("ad_platform", "AppLovin"),
  new Firebase.Analytics.Parameter("ad_source", impressionData.NetworkName),
  new Firebase.Analytics.Parameter("ad_unit_name", impressionData.AdUnitIdentifier),
  new Firebase.Analytics.Parameter("ad_format", impressionData.AdFormat),
  new Firebase.Analytics.Parameter("value", revenue),
  new Firebase.Analytics.Parameter("currency", "USD"), // All AppLovin revenue is sent in USD
};
Firebase.Analytics.FirebaseAnalytics.LogEvent("ad_impression", impressionParameters);
}

ironSource

Swift

মনে রাখবেন: এই Firebase প্রোডাক্ট watchOS টার্গেটে উপলভ্য নয়।
func impressionDataDidSucceed(_ impressionData: ISImpressionData!) {
  Analytics.logEvent(
    AnalyticsEventAdImpression,
    parameters: [
      AnalyticsParameterAdPlatform: "ironSource",
      AnalyticsParameterAdSource: impressionData.ad_network ?? "No ad_network",
      AnalyticsParameterAdFormat: impressionData.ad_unit ?? "No ad_unit",
      AnalyticsParameterAdUnitName: impressionData.instance_name ?? "No instance_name",
      AnalyticsParameterCurrency: "USD",
      AnalyticsParameterValue: impressionData.revenue ?? 0,
    ])
}

Objective-C

মনে রাখবেন: এই Firebase প্রোডাক্ট watchOS টার্গেটে উপলভ্য নয়।
- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData {
  [FIRAnalytics logEventWithName:kFIREventAdImpression
                      parameters:@{
                        kFIRParameterAdPlatform: @"ironSource",
                        kFIRParameterAdSource: impressionData.ad_network,
                        kFIRParameterAdFormat: impressionData.ad_unit,
                        kFIRParameterAdUnitName: impressionData.instance_name,
                        kFIRParameterCurrency: @"USD",
                        kFIRParameterValue: impressionData.revenue
                      }];
}

Kotlin

override fun onImpressionSuccess(impressionData: ImpressionData) {
    // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is
    // opened.
    // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" +
    // impressionData)
    firebaseAnalytics = Firebase.analytics
    firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) {
        param(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource")
        param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.adNetwork)
        param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.adUnit)
        param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.instanceName)
        param(FirebaseAnalytics.Param.CURRENCY, "USD")
        param(FirebaseAnalytics.Param.VALUE, impressionData.revenue)
    }
}

Java

@Override
public void onImpressionSuccess(ImpressionData impressionData) {
    // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is opened.
    // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" + impressionData);
    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    if (impressionData != null) {
        Bundle bundle = new Bundle();
        bundle.putString(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource");
        bundle.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getAdNetwork());
        bundle.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getAdUnit());
        bundle.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getInstanceName());
        bundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD");
        bundle.putDouble(FirebaseAnalytics.Param.VALUE, impressionData.getRevenue());
        mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, bundle);
    }
}

Unity

private void ImpressionSuccessEvent(IronSourceImpressionData impressionData) {
  if (impressionData != null) {
      Firebase.Analytics.Parameter[] AdParameters = {
        new Firebase.Analytics.Parameter("ad_platform", "ironSource"),
        new Firebase.Analytics.Parameter("ad_source", impressionData.adNetwork),
        new Firebase.Analytics.Parameter("ad_unit_name", impressionData.getInstanceName),
        new Firebase.Analytics.Parameter("ad_format", impressionData.getAdUnit),
        new Firebase.Analytics.Parameter("currency","USD"),
        new Firebase.Analytics.Parameter("value", impressionData.getRevenue)
      };
      Firebase.Analytics.FirebaseAnalytics.LogEvent("ad_impression", AdParameters);
  }
}

প্রয়োগ সংক্রান্ত বিবেচ্য বিষয়

Google Ads-কে আপনার ad_impression প্রসেস করার অনুমতি দিতে, currency ও value দুটি প্যারামিটারই (নিচে বর্ণনা করা হয়েছে) অন্তর্ভুক্ত করতে ভুলবেন না। ব্যবহারকারীদের বেশি বা কম- মূল্যায়ন করা এড়াতে, দুটি প্যারামিটারই যতটা সম্ভব নির্ভুল হতে হবে।

মুদ্রার প্যারামিটার

currency প্যারামিটার (iOS+ | Android | Unity) তিনটি অক্ষরের স্ট্রিং হিসেবে পাঠাতে হবে ISO_4217 ফর্ম্যাটে (যেমন, "USD")। কিছু বিজ্ঞাপন মনিটাইজেশন প্ল্যাটফর্ম কারেন্সি বাদ দেয়, যার জন্য আপনাকে প্যারামিটার হার্ডকোড করতে হতে পারে।

ভ্যালু প্যারামিটার

value প্যারামিটার (iOS+ | Android | Unity) দশমিক বিভাজক হিসেবে ডট ব্যবহার করে পাঠাতে হবে। উপরে উল্লিখিত প্রয়োজনীয় ফর্ম্যাটের সাথে মানানসই করতে, আপনাকে হয়ত কিছু প্ল্যাটফর্ম থেকে পাওয়া ভ্যালু ট্রান্সফর্ম করতে হবে। কিছু প্ল্যাটফর্ম সংখ্যাসূচক ফর্ম্যাট লোকালাইজ করে এবং দশমিক বিভাজক হিসেবে কমা ব্যবহার করে। কিছু ক্ষেত্রে, প্ল্যাটফর্ম কোনও ভ্যালু নাও পাঠাতে পারে।

এছাড়াও, ভ্যালু ডাবল বা লংয়ের মতো সংখ্যাসূচক হতে হবে। যেমন, 1000.01, 0.001 ও 1.00 হল বৈধ

যাচাইকরণ

Google Analytics ডেভেলপমেন্ট চক্র জুড়ে আপনার প্রয়োগ করা বিষয় যাচাই করার জন্য একাধিক ফিচার অফার করে।

  1. DebugView
    আপনার ইমপ্লিমেন্টেশন প্রথমবার পরীক্ষা করার সময়, কনসোলে আপনার টেস্ট ad_impression ডেটা দেখতে, DebugView ব্যবহার করুন। আপনি কোনও ad_impression ইভেন্ট বেছে নিলে, প্যারামিটার প্যানেলে (স্ক্রিনের ডানদিকে ) পাঠানো প্যারামিটারগুলি পর্যালোচনা করতে পারবেন। এর ফলে, সঠিক তথ্য প্রসেস করা হচ্ছে কিনা তা আপনি কনফার্ম করতে পারেন।

  2. রিয়েল-টাইম
    আপনার অ্যাপ ডিপ্লয় করা হয়ে গেলে, Google Analytics রিয়েল-টাইম রিপোর্ট ব্যবহার করে কনফার্ম করুন যে প্রয়োগ করা ফিচার সঠিকভাবে কাজ করছে। রিয়েলটাইম রিপোর্টে, ইভেন্টের নাম অনুযায়ী ইভেন্টের সংখ্যা কার্ড দেখুন এবং শেষ ৩০ মিনিটের ইভেন্ট ও প্যারামিটারের বিবরণ দেখতে ad_impression বেছে নিন।

  3. BigQuery
    ad_impression ইভেন্টের এক বা একাধিক দিনের স্যাম্পেল এক্সট্র্যাক্ট করতে BigQuery এক্সপোর্ট ব্যবহার করুন। এই এক্সট্র্যাক্ট করা স্যাম্পেল ব্যবহার করে, শূন্য বা সেট না করা ভ্যালুর মতো সমস্যাগুলি খুঁজে দেখুন এবং কোনও আনহ্যান্ডেলড ব্যবহারের ক্ষেত্রে আপনার কোডে সমাধান প্রয়োগ করুন।

পরবর্তী ধাপ

Firebase কনসোলে বা আপনার লিঙ্ক করা Analytics কনসোলে আপনার AnalyticsAnalytics ড্যাশবোর্ড দেখুন। বিজ্ঞাপন থেকে হওয়া উপার্জন ব্যবহারকারী পিছু গড় উপার্জন (ARPU) ও লাইফটাইম ভ্যালু (LTV)-এর মতো মেট্রিক্সে ফ্যাক্টর করা হয়।