Google AdMobの広告収益連携

AdMobの広告収益を連携すれば、AdMobで獲得した広告収益データを収集し、そのデータをAirbridgeダッシュボードでアトリビューション、ユーザー別に確認できます。

AdMobの広告収益連携はAdMobの広告収益データをAdMob SDKから取得し、Airbridge SDKに渡す形で行われます。しかし、AdMobの広告収益データはAdMobダッシュボードでインプレッション単位の広告収益機能を設定しなければ収集できないため、連携のためにはAdMob SDKのインストール及びAdMobのインプレッション単位の広告収益機能の設定が必要になります。

AdMob SDKのインストール

AdMobのインプレッション単位の広告収益機能の設定

AdMobのドキュメントを確認してください。

AdMobの広告収益データをAirbridgeに送信

AdMob SDKを使って広告収益データのコールバックを設定し、広告収益データをAirbridge SDKに渡してください。

12345678910111213141516171819202122232425262728293031323334353637
private void RequestRewardedAd()
{
    RewardedAd.LoadAd(adUnitId, new AdRequest.Builder().Build(), (rewardedAd, error) => {
        if (error != null) { return; }

        this.rewardedAd = rewardedAd;
        this.rewardedAd.OnPaidEvent += this.HandleAdPaidEvent;
    }
}

public void HandleAdPaidEvent(object sender, AdValueEventArgs args)
{
    AdValue adValue = args.AdValue;
    var adUnitId = this.rewardedAd.adUnitId;
    var adNetworkAdapter = this.rewardedAd.MediationAdapterClassName();
  
    AirbridgeEvent @event = new AirbridgeEvent("airbridge.adImpression");

    var admob = new Dictionary<string, object>();
    admob["value_micros"] = adValue.Value;
    admob["currency_code"] = adValue.CurrencyCode;
    admob["precision"] = adValue.Precision;
  
    admob["ad_unit_id"] = adUnitId;
    admob["ad_network_adapter"] = adNetworkAdapter;
     
    var adPartners = new Dictionary<string, object>();
    adPartners["admob"] = admob;
  
    @event.SetAction(adUnitId);
    @event.SetLabel(adNetworkAdapter);
    @event.SetValue(adValue.Value / 1000000.0);
    @event.AddSemanticAttribute("adPartners", adPartners);
    @event.AddSemanticAttribute("currency", adValue.CurrencyCode);
  
    AirbridgeUnity.TrackEvent(@event);
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
import GoogleMobileAds
import AirBridge
import UIKit

class ViewController: UIViewController {
    var rewardedAd: GADRewardedAd? = nil
    
    func requestRewardedAd() {
        let request = GADRequest()
        GADRewardedAd.load(
            withAdUnitID: "ad unit ID",
            request: request
        ) { ad, error in
            if let error {
                print("Rewarded ad failed to load with error: \(error.localizedDescription)")
                return
            }
            
            self.rewardedAd = ad
            self.rewardedAd?.paidEventHandler = { value in
                let (value, currencyCode, precision) = (
                    value.value,
                    value.currencyCode,
                    value.precision
                )
                
                let adUnitID = self.rewardedAd?.adUnitID
                let adNetworkAdapter = self.rewardedAd?.responseInfo.adNetworkClassName
                
                let event = ABInAppEvent()
                event?.setCategory("airbridge.adImpression")
                event?.setAction(adUnitID)
                event?.setLabel(adNetworkAdapter)
                event?.setValue(value)
                event?.setSemantics([
                    "adPartners": [
                        "admob": [
                            "value_micros": value * 1000000.0,
                            "currency_code": currencyCode,
                            "precision": precision,
                            
                            "ad_unit_id": adUnitID ?? NSNull(),
                            "ad_network_adapter": adNetworkAdapter ?? NSNull(),
                        ]
                    ],
                  	"currency": currencyCode
                ])

                event?.send()
            }
        }
    }
}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
@import GoogleMobileAds;
@import AirBridge;
@import UIKit;

@interface ViewController ()
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end

@implementation ViewController
- (void)requestRewardedAd {
    __weak ViewController* weakSelf = self;

    GADRequest* request = [GADRequest request];
    [GADRewardedAd loadWithAdUnitID:@"ad unit ID"
                            request:request
                  completionHandler:^(GADRewardedAd *ad, NSError *error) 
    {
        if (error) {
            NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
            return;
        }
        self.rewardedAd = ad;
        self.rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull adValue){
            ViewController* strongSelf = weakSelf;

            // Extract the impression-level ad revenue data.
            NSDecimalNumber* value; = adValue.value;
            NSString* currencyCode = adValue.currencyCode;
            GADAdValuePrecision precision = adValue.precision;

            // Get the ad unit ID.
            NSString* adUnitId = strongSelf.rewardedAd.adUnitID;
            NSString* adNetworkAdapter = strongSelf.rewardedAd.responseInfo.adNetworkClassName;

            ABInAppEvent* event = [[ABInAppEvent alloc] init];
            [event setCategory:@"airbridge.adImpression"];
            [event setAction:adUnitId];
            [event setLabel:adNetworkAdapter];
            [event setValue:value];
            [event setSemantics:@{
                @"adPartners": @{
                    @"admob": @{
                        @"value_micros": [value decimalNumberByMultiplyingByPowerOf10:6],
                        @"currency_code": currencyCode,
                        @"precision": precision,
                        
                        @"ad_unit_id": adUnitId,
                        @"ad_network_adapter": adNetworkAdapter
                    }
                },
                @"currency": currencyCode
            }];

            [event send];
        };
    }];
}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdValue;
import com.google.android.gms.ads.OnPaidEventListener;
import com.google.android.gms.ads.rewarded.RewardedAd;
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;

void requestRewardedAd(Context context) {
    AdRequest adRequest = new AdRequest.Builder().build();

    RewardedAd.load(context, "ad unit ID", adRequest, new RewardedAdLoadCallback(){
        @Override
        public void onAdLoaded(@NonNull RewardedAd ad) {
            // Set paid event listener
            ad.setOnPaidEventListener(new OnPaidEventListener() {
                @Override
                public void onPaidEvent(AdValue adValue) {
                    // Extract the impression-level ad revenue data.
                    long valueMicros = adValue.getValueMicros();
                    String currencyCode = adValue.getCurrencyCode();
                    int precision = adValue.getPrecisionType();

                    // Get the ad unit ID.
                    String adUnitId = ad.getAdUnitId();
                    String adNetworkAdapter = ad.getResponseInfo().getMediationAdapterClassName();

                    Event event = new Event("airbridge.adImpression");
                    Map<String, Object> admob = new HashMap<>();
                    admob.put("value_micros", valueMicros);
                    admob.put("currency_code", currencyCode);
                    admob.put("precision", precision);

                    admob.put("ad_unit_id", adUnitId);
                    admob.put("ad_network_adapter", adNetworkAdapter);

                    Map<String, Object> adPartners = new HashMap<>();
                    adPartners.put("admob", admob);
                    Map<String, Object> semanticAttributes = new HashMap<>();
                    semanticAttributes.put("adPartners", adPartners);
                    semanticAttributes.put("currency", currencyCode);

                    event.setAction(adUnitId);
                    event.setLabel(adNetworkAdapter);
                    event.setValue(valueMicros / 1000000.0);
                    event.setSemanticAttributes(semanticAttributes);

                    Airbridge.trackEvent(event);
                }
            });
        }
    });
}
123456789101112131415161718192021222324252627282930313233343536373839404142
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.OnPaidEventListener
import com.google.android.gms.ads.rewarded.RewardedAd
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback

fun requestRewardedAd(context: Context) {
    val adRequest = AdRequest.Builder().build()

    RewardedAd.load(context, "ad unit ID", adRequest, object : RewardedAdLoadCallback() {
        override fun onAdLoaded(ad: RewardedAd) {
            ad.onPaidEventListener = OnPaidEventListener { adValue ->
                // Extract the impression-level ad revenue data.
                val valueMicros = adValue.valueMicros
                val currencyCode = adValue.currencyCode
                val precision = adValue.precisionType

                // Get the ad unit ID.
                val adUnitId = ad.adUnitId
                val adNetworkAdapter = ad.responseInfo.mediationAdapterClassName

                val event = Event("airbridge.adImpression")
                val admob = mutableMapOf<String, Any?>()
                admob["value_micros"] = valueMicros
                admob["currency_code"] = currencyCode
                admob["precision"] = precision

                admob["ad_unit_id"] = adUnitId
                admob["ad_network_adapter"] = adNetworkAdapter

                val adPartners = mapOf("admob" to admob)
                event.action = adUnitId
                event.label = adNetworkAdapter
                event.value = valueMicros / 1000000.0
                event.semanticAttributes = mutableMapOf(
                    "adPartners" to adPartners,
                    "currency" to currencyCode
                )
                Airbridge.trackEvent(event)
            }
        }
    })
}