ইম্প্রেশন-স্তরের বিজ্ঞাপনের আয়

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

যখন কোনো ইম্প্রেশন ঘটে, GMA Next-Gen SDK সেই ইম্প্রেশনের সাথে সম্পর্কিত বিজ্ঞাপনের আয়ের ডেটা সরবরাহ করে। আপনি এই ডেটা ব্যবহার করে একজন ব্যবহারকারীর লাইফটাইম ভ্যালু গণনা করতে পারেন, অথবা ডেটাটি পরবর্তী পর্যায়ে অন্যান্য প্রাসঙ্গিক সিস্টেমে পাঠিয়ে দিতে পারেন।

এই নির্দেশিকাটি আপনাকে আপনার অ্যান্ড্রয়েড অ্যাপে ইম্প্রেশন-স্তরের বিজ্ঞাপন আয়ের ডেটা সংগ্রহ বাস্তবায়ন করতে সাহায্য করার উদ্দেশ্যে তৈরি।

পূর্বশর্ত

প্রতিটি বিজ্ঞাপন ফরম্যাটের একটি onAdPaid ইভেন্ট কলব্যাক থাকে। একটি বিজ্ঞাপন ইভেন্টের জীবনচক্র চলাকালীন, GMA Next-Gen SDK ইম্প্রেশন ইভেন্টগুলো পর্যবেক্ষণ করে এবং একটি অর্জিত মান (earned value) সহ হ্যান্ডলারটিকে আহ্বান করে।

নিম্নলিখিত উদাহরণটি একটি রিওয়ার্ডেড অ্যাডের পেইড ইভেন্টগুলো পরিচালনা করে:

কোটলিন

ad.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(adValue: AdValue) {
      // Send the impression-level ad revenue information to your
      // preferred analytics server directly within this callback.

      // Extract the impression-level ad revenue data.
      val valueMicros = adValue.valueMicros
      val currencyCode = adValue.currencyCode
      val precisionType = adValue.precisionType

      val loadedAdSourceResponseInfo = ad.getResponseInfo().loadedAdSourceResponseInfo
      val adSourceName = loadedAdSourceResponseInfo?.name
      val adSourceId = loadedAdSourceResponseInfo?.id
      val adSourceInstanceName = loadedAdSourceResponseInfo?.instanceName
      val adSourceInstanceId = loadedAdSourceResponseInfo?.instanceId
      val extras = ad.getResponseInfo().responseExtras
      val mediationGroupName = extras.getString("mediation_group_name")
      val mediationABTestName = extras.getString("mediation_ab_test_name")
      val mediationABTestVariant = extras.getString("mediation_ab_test_variant")
    }
  }

জাভা

ad.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        // Send the impression-level ad revenue information to your preferred
        // analytics server directly within this callback.

        // Extract the impression-level ad revenue data.
        long valueMicros = value.getValueMicros();
        String currencyCode = value.getCurrencyCode();
        PrecisionType precisionType = value.getPrecisionType();

        AdSourceResponseInfo loadedAdSourceResponseInfo =
            ad.getResponseInfo().getLoadedAdSourceResponseInfo();
        String adSourceName = loadedAdSourceResponseInfo.getName();
        String adSourceId = loadedAdSourceResponseInfo.getId();
        String adSourceInstanceName = loadedAdSourceResponseInfo.getInstanceName();
        String adSourceInstanceId = loadedAdSourceResponseInfo.getInstanceId();

        Bundle extras = ad.getResponseInfo().getResponseExtras();
        String mediationGroupName = extras.getString("mediation_group_name");
        String mediationABTestName = extras.getString("mediation_ab_test_name");
        String mediationABTestVariant = extras.getString("mediation_ab_test_variant");
      }
    });

একটি কাস্টম ইভেন্ট বিজ্ঞাপন উৎসের নাম শনাক্ত করুন

কাস্টম ইভেন্ট অ্যাড সোর্সের ক্ষেত্রে, AdSourceResponseInfo.name প্রপার্টিটি Custom event নামক অ্যাড সোর্সের নামটি রিটার্ন করে। আপনি যদি একাধিক কাস্টম ইভেন্ট ব্যবহার করেন, তবে একাধিক কাস্টম ইভেন্টের মধ্যে পার্থক্য করার জন্য অ্যাড সোর্সের নামটি যথেষ্ট সুনির্দিষ্ট নয়। একটি নির্দিষ্ট কাস্টম ইভেন্ট খুঁজে বের করতে, নিম্নলিখিত পদক্ষেপটি অনুসরণ করুন:

  1. AdSourceResponseInfo.name প্রপার্টিটি পান।
  2. বিজ্ঞাপনের উৎসের জন্য একটি অনন্য নাম সেট করুন।

নিম্নলিখিত উদাহরণটি একটি কাস্টম ইভেন্টের জন্য একটি অনন্য বিজ্ঞাপন উৎসের নাম নির্ধারণ করে:

কোটলিন

private fun getUniqueAdSourceName(loadedAdapterResponseInfo: AdSourceResponseInfo): String {
  var adSourceName = loadedAdapterResponseInfo.name
  if (adSourceName == "Custom Event") {
    if (
      loadedAdapterResponseInfo.adapterClassName ==
        "com.google.ads.mediation.sample.customevent.SampleCustomEvent"
    ) {
      adSourceName = "Sample Ad Network (Custom Event)"
    }
  }
  return adSourceName
}

জাভা

private String getUniqueAdSourceName(@NonNull AdSourceResponseInfo loadedAdapterResponseInfo) {
  String adSourceName = loadedAdapterResponseInfo.getName();
  if (adSourceName.equals("Custom Event")) {
    if (loadedAdapterResponseInfo
        .getAdapterClassName()
        .equals("com.google.ads.mediation.sample.customevent.SampleCustomEvent")) {
      adSourceName = "Sample Ad Network (Custom Event)";
    }
  }
  return adSourceName;
}

বিজয়ী বিজ্ঞাপন উৎস সম্পর্কে আরও তথ্যের জন্য, 'বিজ্ঞাপন প্রতিক্রিয়া সম্পর্কিত তথ্য পুনরুদ্ধার করুন' দেখুন।

অ্যাপ অ্যাট্রিবিউশন পার্টনারস (AAP) ইন্টিগ্রেশন

অ্যানালিটিক্স প্ল্যাটফর্মে বিজ্ঞাপনের রাজস্ব ডেটা পাঠানোর বিষয়ে সম্পূর্ণ বিবরণের জন্য, পার্টনার গাইডটি দেখুন:

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

পার্টনার গাইডটি GMA Next-Gen SDK উল্লেখ অন্তর্ভুক্ত করার জন্য আপডেট করা নাও হতে পারে।

নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কিভাবে GMA Next-Gen SDK ব্যবহার করে AAP পার্টনারদের কাছে ইম্প্রেশন লেভেলের রাজস্ব ডেটা পাঠানো যায়:

সমন্বয় করুন

জাভা

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        // Send ad revenue info to Adjust.
        AdjustAdRevenue adRevenue = new AdjustAdRevenue("admob_sdk");
        adRevenue.setRevenue(value.getValueMicros() / 1000000.0, value.getCurrencyCode());
        if (rewardedAd.getResponseInfo().getLoadedAdSourceResponseInfo() != null) {
          adRevenue.setAdRevenueNetwork(
              rewardedAd.getResponseInfo().getLoadedAdSourceResponseInfo().getName());
        }
        Adjust.trackAdRevenue(adRevenue);
      }
    });

কোটলিন

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      // Send ad revenue info to Adjust.
      val adRevenue = AdjustAdRevenue("admob_sdk")
      adRevenue.setRevenue(value.valueMicros / 1000000.0, value.currencyCode)
      val loadedAdSourceResponseInfo = rewardedAd.getResponseInfo().loadedAdSourceResponseInfo
      loadedAdSourceResponseInfo?.let { adRevenue.setAdRevenueNetwork(it.name) }
      Adjust.trackAdRevenue(adRevenue)
    }
  }

অ্যাপসফ্লায়ার

জাভা

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        long valueMicros = value.getValueMicros();
        String currencyCode = value.getCurrencyCode();

        AFAdRevenueData adRevenueData =
            new AFAdRevenueData(
                "AdMob Mediation", // monetizationNetwork
                MediationNetwork.GOOGLE_ADMOB, // mediationNetwork
                currencyCode, // currencyIso4217Code
                (double) valueMicros // revenue
                );

        Map<String, Object> additionalParameters = new HashMap<>();
        additionalParameters.put(COUNTRY, "US");
        additionalParameters.put(AD_UNIT, AD_UNIT_ID);
        additionalParameters.put(AD_TYPE, AdFormat.REWARDED);

        AppsFlyerLib.getInstance().logAdRevenue(adRevenueData, additionalParameters);
      }
    });

কোটলিন

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      val valueMicros = value.valueMicros
      val currencyCode = value.currencyCode

      val adRevenueData =
        AFAdRevenueData(
          "AdMob Mediation", // monetizationNetwork
          MediationNetwork.GOOGLE_ADMOB, // mediationNetwork
          currencyCode, // currencyIso4217Code
          valueMicros.toDouble(), // revenue
        )

      val additionalParameters: MutableMap<String?, Any?> = HashMap()
      additionalParameters[COUNTRY] = "US"
      additionalParameters[AD_UNIT] = AD_UNIT_ID
      additionalParameters[AD_TYPE] = AdFormat.REWARDED

      appsflyer.logAdRevenue(adRevenueData, additionalParameters)
    }
  }

একবচন

জাভা

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        // Convert revenue from micros to standard units.
        double revenue = value.getValueMicros() / 1000000.0;
        String currency = value.getCurrencyCode();

        // Validate ad revenue data before sending.
        if (revenue > 0 && !currency.isEmpty()) {
          SingularAdData adData = new SingularAdData("AdMob", currency, revenue);
          Singular.adRevenue(adData);
        }
      }
    });

কোটলিন

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      // Convert revenue from micros to standard units.
      val revenue = value.valueMicros / 1000000.0
      val currency = value.currencyCode

      // Validate ad revenue data before sending.
      if (revenue > 0 && currency.isNotEmpty()) {
        val adData = SingularAdData("AdMob", currency, revenue)
        Singular.adRevenue(adData)
      }
    }
  }

তেনজিন

GMA Next-Gen SDK জন্য, আপনাকে অবশ্যই একটি JSON অবজেক্ট ব্যবহার করে ইন্টিগ্রেট করতে হবে। নিম্নলিখিত উদাহরণটি একটি JSON অবজেক্ট ব্যবহার করে তেনজিন-এ ইম্প্রেশন স্তরের রাজস্ব ডেটা পাঠায়:

জাভা

rewardedAd.setAdEventCallback(
    new RewardedAdEventCallback() {
      @Override
      public void onAdPaid(@NonNull AdValue value) {
        ResponseInfo responseInfo = rewardedAd.getResponseInfo();

        // Extract the impression-level ad revenue data.
        long valueMicros = value.getValueMicros();
        String currencyCode = value.getCurrencyCode();
        PrecisionType precisionType = value.getPrecisionType();

        JSONObject json = new JSONObject();
        try {
          json.put("ad_unit_id", AD_UNIT_ID);
          json.put("currency_code", currencyCode);
          json.put("response_id", responseInfo.getResponseId());
          json.put("value_micros", valueMicros);
          if (responseInfo.getLoadedAdSourceResponseInfo() != null) {
            json.put(
                "mediation_adapter_class_name",
                responseInfo.getLoadedAdSourceResponseInfo().getAdapterClassName());
          }
          json.put("precision_type", precisionType);

          tenjinInstance.eventAdImpressionAdMob(json);
        } catch (JSONException e) {
          // Handle error.
        }
      }
    });

কোটলিন

rewardedAd.adEventCallback =
  object : RewardedAdEventCallback {
    override fun onAdPaid(value: AdValue) {
      val responseInfo = rewardedAd.getResponseInfo()

      // Extract the impression-level ad revenue data.
      val valueMicros = value.valueMicros
      val currencyCode = value.currencyCode
      val precisionType = value.precisionType

      val json = JSONObject()
      try {
        json.put("ad_unit_id", AD_UNIT_ID)
        json.put("currency_code", currencyCode)
        json.put("response_id", responseInfo.responseId)
        json.put("value_micros", valueMicros)
        responseInfo.loadedAdSourceResponseInfo?.let {
          json.put("mediation_adapter_class_name", it.adapterClassName)
        }
        json.put("precision_type", precisionType)

        tenjinInstance.eventAdImpressionAdMob(json)
      } catch (_: JSONException) {
        // Handle error.
      }
    }
  }

বাস্তবায়নের সর্বোত্তম অনুশীলন

  • অ্যাড অবজেক্ট তৈরি করার বা সেটির অ্যাক্সেস পাওয়ার সাথে সাথেই লিসেনারটি সেট করুন, এবং অবশ্যই বিজ্ঞাপনটি দেখানোর আগে। এর ফলে আপনি কোনো পেইড ইভেন্ট কলব্যাক মিস করবেন না।
  • পেইড ইভেন্ট কলব্যাকটি কল হওয়ার সাথে সাথেই ইম্প্রেশন-স্তরের বিজ্ঞাপনের আয়ের তথ্য আপনার পছন্দের অ্যানালিটিক্স সার্ভারে পাঠিয়ে দিন। এর ফলে আপনি ভুলবশত কোনো কলব্যাক বাদ দিচ্ছেন না এবং ডেটার গরমিলও এড়ানো যায়।

অ্যাডভ্যালু

AdValue হলো একটি ক্লাস যা একটি বিজ্ঞাপনের জন্য অর্জিত আর্থিক মূল্যকে উপস্থাপন করে, যার মধ্যে মূল্যটির মুদ্রা কোড এবং এর প্রিসিশন টাইপ নিম্নোক্তভাবে এনকোড করা থাকে।

প্রিসিশনটাইপ বর্ণনা
UNKNOWN একটি অজানা বিজ্ঞাপনের মান। যখন LTV পিংব্যাক সক্রিয় থাকে কিন্তু পর্যাপ্ত ডেটা উপলব্ধ থাকে না, তখন এটি ফেরত আসে।
ESTIMATED সংগৃহীত ডেটা থেকে আনুমানিক বিজ্ঞাপনের মূল্য।
PUBLISHER_PROVIDED একজন প্রকাশক একটি মিডিয়েশন গ্রুপে ম্যানুয়াল সিपीएम-এর মতো বিজ্ঞাপনের মান প্রদান করেছেন।
PRECISE এই বিজ্ঞাপনের জন্য প্রদত্ত সঠিক মূল্য।

AdMob মিডিয়েশনের ক্ষেত্রে, AdMob অপ্টিমাইজ করা অ্যাড সোর্সগুলোর জন্য একটি ESTIMATED মান দেওয়ার চেষ্টা করে। অপ্টিমাইজ না করা অ্যাড সোর্সগুলোর জন্য, অথবা এমন ক্ষেত্রে যেখানে একটি অর্থপূর্ণ অনুমান জানানোর জন্য পর্যাপ্ত একত্রিত ডেটা থাকে না, সেখানে PUBLISHER_PROVIDED মানটি ফেরত দেওয়া হয়।

বিডিং বিজ্ঞাপন উৎস থেকে পরীক্ষামূলক ইম্প্রেশন

একটি টেস্ট রিকোয়েস্টের মাধ্যমে কোনো বিডিং অ্যাড সোর্সের জন্য ইম্প্রেশন-লেভেল অ্যাড রেভিনিউ ইভেন্ট সংঘটিত হওয়ার পর, আপনি শুধুমাত্র নিম্নলিখিত ভ্যালুগুলো পাবেন:

  • UNKNOWN : নির্ভুলতার ধরণ নির্দেশ করে।
  • 0 : বিজ্ঞাপনের মান নির্দেশ করে।

পূর্বে, আপনি হয়তো প্রিসিশন টাইপটিকে UNKNOWN ব্যতীত অন্য কোনো মান এবং 0 এর বেশি কোনো মান হিসেবে দেখে থাকতে পারেন।

টেস্ট বিজ্ঞাপনের অনুরোধ পাঠানোর বিস্তারিত তথ্যের জন্য, ‘টেস্ট ডিভাইস সক্ষম করুন’ দেখুন।