AppLovinのサーバーは、開発者が定義した外部サーバーに対して、サーバー間(server-to-server)の rewarded callback を送信できます。 これらの callback は、アプリのユーザーが rewarded ad を完了し、特典(リワード)を受け取る資格を得たことを通知します。 これにより、rewarded ad を最後まで完了せずに特典を獲得しようとする悪質なユーザーを防ぐことができます。
AppLovinのサーバーは、ユーザーが MAX mediation の配信する rewarded ad を完了した後に、外部のエンドポイントへ callback を送信できます。
これらのリクエストを受信するエンドポイントは、開発者自身で定義します。
callback は、HTTPまたはHTTPSの GET リクエストの形式で行われます。
AppLovinは広告の完了後すぐにこれらの callback を行いますが、数分遅れる場合があります。
impression のタイムスタンプマクロを使用することで、impression と callback の時間の間の遅延を調整できます。
エンドポイントからの応答がないまま5秒が経過すると、callback リクエストはタイムアウトします。 callback リクエストがタイムアウトした場合、AppLovinは最大2回まで callback を再試行します。
これらの callback を設定するには、任意の rewarded Ad Unit の Edit Ad Unit ページで「Server Side Callback URL」の値を設定します。
https://myrewardedserver.com/rewards?idfa={IDFA}&user_id={USER_ID}&event={EVENT_ID}&token={EVENT_TOKEN}
以下の表にあるマクロは、callback URLに組み込むことができます。
上記の例のURLには、{IDFA}、{USER_ID}、{EVENT_ID}、および {EVENT_TOKEN} マクロが組み込まれています。
AppLovinのサーバーがエンドポイントに callback を行う際、これらのマクロ名は正確な値に置き換えられます。
| 名前 | 説明 | 例 |
|---|---|---|
{AD_UNIT_ID} | MAX Ad Unit ID(16桁の16進数文字) | 9ad0816ac071552a |
{AD_UNIT_NAME} | Ad Unit 名(URLエンコード済み) | My%20App%20Banners |
{AMOUNT} | ユーザーに付与する仮想通貨の量。各 Ad Unit の Ad Unit 編集ページで設定します。 | 100 |
{CC} | ユーザーの2文字の国コード | gb |
{CURRENCY} | ユーザーに付与する仮想通貨のタイプ(URLエンコード済み)。各 Ad Unit の Ad Unit 編集ページで設定します。 | coins |
{CUSTOM_DATA} | インテグレーションから渡されるカスタムデータ(URLエンコード済み)。AppLovinは、文字列のサイズを8192文字未満に抑えることを推奨しています。 | my%20custom%20data |
{EVENT_ID} | ユニークなイベントID、36文字のUUID | a7c3e1b2-4f59-4d8a-9c21-8e6b0f3a1d47 |
{EVENT_TOKEN} | sha1( EVENT_ID + Your-Event-Key ) | e000949f6d851…a43cf31 |
{EVENT_TOKEN_ALL} | sha256( すべての1マクロをアルファベット順に並べ、URLデコードしたもの + Your-Event-Key ) | eba615583ed59…5f218702a97a |
{IDFA} | iOSの IDFA または Google Advertising ID | 860635ea-65bc-eaed-d355-1b5283b30b94 |
{IDFV} | IDFV | 4CD1C3C4-3FD7-00F5-1635-7BC6D9387E60 |
{IP} | ユーザーのIP(IPv6の値はURLエンコードされます) | 162.1.1.1 , fe80%3A%3A…890a%0A |
{NETWORK_NAME} | MAX Ad Network名 | APPLOVIN_BIDDING |
{PACKAGE_NAME} | アプリのパッケージ名(Android)または Bundle ID(iOS)。URLエンコード済み。 | com.test.app |
{PLACEMENT} | パブリッシャーが定義した MAX 広告 placement 名(URLエンコード済み) | Launch%20Screen |
{PLATFORM} | プラットフォーム | android , ios |
{TS} | 広告ロード時のタイムスタンプ(整数、エポック秒) | 1546300800 |
{USER_ID} | パブリッシャーが定義したユーザーID(URLエンコード済み)。最大長は8192文字です。 | 7634657898 |
1 注:マクロに EVENT_TOKEN が含まれている場合、それは「すべてのマクロをアルファベット順に並べた」文字列から除外されます。
以下のコードスニペットは、Ad Unit に placement 名を追加する方法を示しています。
placement 名の値は、postback リクエスト内の {PLACEMENT} マクロに置き換えられます:
AppLovinMAX.setBannerPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.setMRecPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.showInterstitial(«ad-unit-ID», «placement»);
nativeAdLoader.setPlacement(«placement»);
AppLovinMAX.showRewardedAd(«ad-unit-ID», «placement»);




UAppLovinMAX::CreateBanner(«ad-unit-ID», «position»);
UAppLovinMAX::SetBannerPlacement(«ad-unit-ID», «placement»);
UAppLovinMAX::CreateMRec(«ad-unit-ID», «position»);
UAppLovinMAX::SetMRecPlacement(«ad-unit-ID», «placement»);
UAppLovinMAX::ShowInterstitial(«ad-unit-ID», «placement»);
UAppLovinMAX::ShowInterstitial(«ad-unit-ID», «placement»);
MaxSdk.CreateBanner(«ad-unit-ID», «position»);
MaxSdk.SetBannerPlacement(«ad-unit-ID», "«placement»");
MaxSdk.CreateMRec(«ad-unit-ID», «position»);
MaxSdk.SetMRecPlacement(«ad-unit-ID», "«placement»");
MaxSdk.ShowInterstitial(«ad-unit-ID», "«placement»");
MaxSdk.ShowRewardedAd(«ad-unit-ID», "«placement»");
AppLovinMAX.createBanner(«ad-unit-ID», «position»);
AppLovinMAX.setBannerPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.createMRec(«ad-unit-ID», «position»);
AppLovinMAX.setMRecPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.showInterstitial(«ad-unit-ID», placement: «placement»);
AppLovinMAX.showRewardedAd(«ad-unit-ID», placement: «placement»);
AppLovinMAX.createBanner(«ad-unit-ID», «position»);
AppLovinMAX.set_banner_placement(«ad-unit-ID», «placement»);
AppLovinMAX.createMRec(«ad-unit-ID», «position»);
AppLovinMAX.set_mrec_placement(«ad-unit-ID», «placement»);
AppLovinMAX.show_interstitial(«ad-unit-ID», «placement»);
AppLovinMAX.show_rewarded_ad(«ad-unit-ID», «placement»);
adViewAd.setPlacement( "«placement»" );
interstitial.showAd( "«placement»" );
rewardedAd.showAd( "«placement»" );
nativeAdLoader.setPlacement( "«placement»" );
MaxAdPlacerSettings settings = new MaxAdPlacerSettings( "«ad-unit-ID»" );
settings.setPlacement( "«placement»" );
AppLovinMAX.createBanner(«ad-unit-ID», «position»);
AppLovinMAX.setBannerPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.createMRec(«ad-unit-ID», «position»);
AppLovinMAX.setMRecPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.showInterstitial(«ad-unit-ID», «placement»);
AppLovinMAX.showRewardedAd(«ad-unit-ID», «placement»);
AppLovinMAX.createBanner(«ad-unit-ID», «position»);
AppLovinMAX.setBannerPlacement(«ad-unit-ID», «placement»);
import { AdView, AdFormat } from 'react-native-applovin-max';
⋮
<AdView adUnitId={«ad-unit-ID»}
adFormat={AdFormat.BANNER}
placement={«placement»} />
import { MRecAd } from 'react-native-applovin-max';
⋮
MRecAd.createAd(«ad-unit-ID», «position»);
MRecAd.setPlacement(«ad-unit-ID», «placement»);
import { AdView, AdFormat } from 'react-native-applovin-max';
⋮
<AdView adUnitId={«ad-unit-ID»}
adFormat={AdFormat.MREC}
placement={«placement»} />
import { InterstitialAd } from 'react-native-applovin-max';
⋮
InterstitialAd.showAd(«ad-unit-ID», "«placement»");
import { RewardedAd } from 'react-native-applovin-max';
⋮
RewardedAd.showAd(«ad-unit-ID», "«placement»");
<NativeAdView
adUnitId={«ad-unit-ID»}
placement="«placement»"
⋮
/>
adView.setPlacement( "«placement»" )
interstitial.showAd( "«placement»" )
rewardedAd.showAd( "«placement»" )
nativeAdLoader.setPlacement( "«placement»" )
val settings = MaxAdPlacerSettings( "«ad-unit-ID»" )
settings.placement = "«placement»"
applovin.create_banner(«ad-unit-ID», «position»)
applovin.set_banner_placement(«ad-unit-ID», «placement»)
applovin.create_mrec(«ad-unit-ID», «position»)
applovin.set_mrec_placement(«ad-unit-ID», «placement»)
applovin.show_interstitial(«ad-unit-ID», «placement»);
applovin.show_rewarded_ad(«ad-unit-ID», «placement»);
adView.placement = @"«placement»";
[adView loadAd];
[interstitialAd showAdForPlacement: @"«placement»"];
[rewardedAd showAdForPlacement: @"«placement»"];
nativeAdLoader.placement = @"«placement»";
MAAdPlacerSettings *settings = [MAAdPlacerSettings settingsWithAdUnitIdentifier: @"«ad-unit-ID»"];
settings.placement = @"«placement»";
adView.placement = "«placement»"
adView.loadAd()
interstitial.show(forPlacement: "«placement»")
rewardedAd.show(forPlacement: "«placement»")
nativeAdLoader.placement = "«placement»"
let settings = MAAdPlacerSettings(adUnitIdentifier: "«ad-unit-ID»")
settings.placement = @"«placement»"
以下のコードスニペットは、独自の内部ユーザーIDをユーザーにタグ付けする方法を示しています。 ユーザーID文字列の最大サイズは8192文字です。
AppLovinMAX.setUserId("«user-ID»");
MaxSdk.SetUserId("«user-ID»");
val settings = AppLovinSdk.getInstance( this ).getSettings();
settings.setUserIdentifier( "«user-ID»" );
AppLovinMAX.setUserId("«user-ID»");
val settings = AppLovinSdk.getInstance( this ).settings
settings.userIdentifier = "«user-ID»"
applovin.set_user_id("«user-ID»")
ALSdkSettings *settings = [ALSdk shared].settings;
settings.userIdentifier = @"«user-ID»";
let settings = ALSdk.shared().settings
settings.userIdentifier = "«user-ID»"
特典の額と仮想通貨にアクセスするには、特典の callback をオーバーライドします:
private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo)
{
print("Rewarded user: " + reward.Amount + " " + reward.Label);
}
@Override
public void onUserRewarded(final MaxAd ad, final MaxReward reward)
{
System.out.println( "Rewarded user: " + reward.getAmount() + " " + reward.getLabel() );
}
override fun onUserRewarded(ad: MaxAd?, reward: MaxReward?)
{
System.out.println( "Rewarded user: " + reward!!.getAmount() + " " + reward.getLabel() )
}
- (void)didRewardUserForAd:(MAAd *)ad withReward:(MAReward *)reward
{
NSLog(@"Rewarded user: %d %@", reward.amount, reward.label);
}
func didRewardUser(for ad: MAAd, with reward: MAReward)
{
print("Rewarded user: \(reward.amount) \(reward.label)")
}
以下のコードスニペットは、postback にカスタムの String データを追加する方法を示しています。
この String data は、これらの postback 内の {CUSTOM_DATA} マクロに置き換えられます。
AppLovinは、文字列を8192文字未満にすることを推奨しています。
カスタムデータは、banner ad または MREC ad をロードする前に設定する必要があります。 そうしないと、そのデータは広告に関連付けられた postback に表示されません。
MaxSdk.SetBannerCustomData("«ad-unit-ID»", "«custom-data»"); // Banners
MaxSdk.SetMRecCustomData("«ad-unit-ID»", "«custom-data»"); // MRECs
adViewAd.setCustomData( "«custom-data»" );
BannerAd.setCustomData("«ad-unit-ID»", "«custom-data»"); // Banners
MRec.setCustomData("«ad-unit-ID»", "«custom-data»"); // MRECs
adView.setCustomData( "«custom-data»" )
adView.customData = @"«custom-data»";
adView.customData = "«custom-data»"
MaxSdk.ShowInterstitial(«adUnitIdentifier», «placement», «custom data»);
MaxInterstitialAd.showAd(«placement», «custom data»);
InterstitialAd.showAd(interAdUnitId, "«placement»", "«custom data»");
MaxInterstitialAd.showAd(«placement», «custom data»)
-[MAInterstitialAd showAdForPlacement:customData:]
[interstitialAd showAdForPlacement: @"«placement»" customData: @"«custom-data»"];
MaxSdk.ShowRewardedAd(«adUnitIdentifier», «placement», «custom data»);
MaxRewardedAd.showAd(«placement», «custom data»);
RewardedAd.showAd(adUnitId, "«placement»", "«custom data»");
MaxRewardedAd.showAd(«placement», «custom data»)
-[MARewardedAd showAdForPlacement:customData:]
rewardedAd.show(forPlacement: "«placement»" customData: "«custom-data»")
nativeAdLoader.setCustomData( "«custom data»" );
<NativeAdView
adUnitId={«ad-unit-ID»}
customData="«custom-data»"
⋮
/>
nativeAdLoader.setCustomData( "«custom data»" )
nativeAdLoader.customData = @"«custom data»";
nativeAdLoader.customData = "«custom data»"