S2S Rewarded Callback API
AppLovinのサーバーは、定義した外部サーバーに対して、サーバー間リワードコールバックを作成できます。 これらのコールバックは、アプリのユーザーがリワード広告のアクションを完了し、その結果としてユーザーがリワードの対象となったことを通知するものです。 これにより、リワード広告のアクションを完了せずにリワードを取得しようとする悪意のあるユーザーを阻止できます。
はじめに
AppLovinのサーバーは、MAXメディエーションを通じて配信されるリワード広告をユーザーが完了した後、外部エンドポイントにコールバックを送信できます。
どのエンドポイントがこれらのリクエストを受信するかを定義してください。
コールバックは、HTTP または HTTPSGET
リクエスト形式です。
AppLovinは広告完了後すぐにこれらのコールバックを送信しますが、数分遅れることがあります。
インプレッションとコールバックの間に発生する遅延を補正するために、インプレッションタイムスタンプマクロを使用できます。
エンドポイントからの応答がないまま5秒が経過すると、コールバックリクエストはタイムアウトします。 コールバックリクエストがタイムアウトした場合、AppLovinはコールバックを最大2回再試行します。
これらのコールバックは、任意のリワード広告ユニットのEdit Ad Unitページで「Server Side Callback URL」の値を設定することによって構成できます。
例
https://myrewardedserver.com/rewards?idfa={IDFA}&user_id={USER_ID}&event={EVENT_ID}&token={EVENT_TOKEN}
利用可能なマクロ
以下の表にあるマクロのいずれかをコールバックURLに組み込むことができます。上記のURLの例は、{IDFA}
、{USER_ID}
、{EVENT_ID}
、{EVENT_TOKEN}
のマクロを組み込んだものです。
AppLovinのサーバーは、エンドポイントにコールバックする際に、これらのマクロ名を正確な値に置き換えます。
名前 | 説明 | 例 |
---|---|---|
{AD_UNIT_ID} | MAX広告ユニットID(16桁の16進文字列) | 9ad0816ac071552a |
{AD_UNIT_NAME} | 広告ユニット名(URLエンコード済み) | My%20App%20Banners |
{AMOUNT} | ユーザーに付与するために選択した通貨の金額。各広告ユニット編集ページでこれを設定します。 | 100 |
{CC} | ユーザーの2文字の国コード | gb |
{CURRENCY} | ユーザーに付与するために選択した通貨の種類(URLエンコード)。各広告ユニットの広告ユニット編集ページでこれを設定します。 | coins |
{CUSTOM_DATA} | 連携から渡されたカスタムデータ(URLエンコード)。AppLovinは、文字列を8192文字以下に維持することを推奨しています。 | my%20custom%20data |
{EVENT_ID} | ユニークイベントID、40桁の16進文字列 | 8dc948013d71f…b226e08 |
{EVENT_TOKEN} | sha1( EVENT_ID + Your-Event-Key ) | e000949f6d851…a43cf31 |
{EVENT_TOKEN_ALL} | sha256(アルファベット順に1つのマクロすべて、URLデコード+イベントキー) | eba615583ed59…5f218702a97a |
{IDFA} | iOS IDFAまたはGoogle 広告ID | 860635ea-…3b30b94 |
{IDFV} | IDFV | 4CD1C3C4-…9387E60 |
{IP} | ユーザーのIP(IPv6値はURLエンコード済み) | 162.1.1.1 、fe80%3A%3A…890a%0A |
{NETWORK_NAME} | MAXアドネットワーク名 | APPLOVIN_BIDDING |
{PACKAGE_NAME} | アプリのパッケージ名(Android)またはバンドルID(iOS)。URLエンコード。 | com.test.app |
{PLACEMENT} | パブリッシャー定義のMAX広告プレースメント名(URLエンコード) | Launch%20Screen |
{PLATFORM} | プラットフォーム | android 、ios |
{TS} | 広告ロード時間のタイムスタンプ(整数、epochからの経過秒数) | 1546300800 |
{USER_ID} | パブリッシャー定義のユーザーID(URLエンコード)。最長8192文字。 | 7634657898 |
1注:EVENT_TOKEN
がマクロの1つである場合、「All macros alphabetically」文字列から省略されます
広告プレースメント名を設定
以下のコードスニペットは、広告ユニットにプレースメント名を追加する方法を示しています。
プレースメント名の値は、ポストバックリクエストの {PLACEMENT}
マクロを置き換えます。
ActionScript
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»);
Blueprint
C++
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»);
C#
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»");
Dart
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»);
GDScript
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»);
Java
adViewAd.setPlacement( "«placement»" );
interstitial.showAd( "«placement»" );
rewardedAd.showAd( "«placement»" );
nativeAdLoader.setPlacement( "«placement»" );
MaxAdPlacerSettings settings = new MaxAdPlacerSettings( "«ad-unit-ID»" );settings.setPlacement( "«placement»" );
JavaScript (Cordova)
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»);
JavaScript (React Native)
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»" ⋮/>
Kotlin
adView.setPlacement( "«placement»" )
interstitial.showAd( "«placement»" )
rewardedAd.showAd( "«placement»" )
nativeAdLoader.setPlacement( "«placement»" )
val settings = MaxAdPlacerSettings( "«ad-unit-ID»" )settings.placement = "«placement»"
Lua
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»);
Objective-C
adView.placement = @"«placement»";[adView loadAd];
[interstitialAd showAdForPlacement: @"«placement»"];
[rewardedAd showAdForPlacement: @"«placement»"];
nativeAdLoader.placement = @"«placement»";
MAAdPlacerSettings *settings = [MAAdPlacerSettings settingsWithAdUnitIdentifier: @"«ad-unit-ID»"];settings.placement = @"«placement»";
Swift
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を使用してユーザーにタグ付けする方法を示しています。 ユーザー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 ).settingssettings.userIdentifier = "«user-ID»"
applovin.set_user_id("«user-ID»")
ALSdkSettings *settings = [ALSdk shared].settings;settings.userIdentifier = @"«user-ID»";
let settings = ALSdk.shared().settingssettings.userIdentifier = "«user-ID»"
リワード広告の金額と通貨を設定
リワード額と通貨にアクセスするには、リワードコールバックをオーバーライドします。
private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo){ print("Rewarded user: " + reward.Amount + " " + reward.Label);}
@Overridepublic 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)")}
カスタムデータ
以下のコードスニペットは、カスタム文字列データをポストバックに追加する方法を示しています。
この文字列データは、これらのポストバックの{CUSTOM_DATA}
マクロを置き換えます。
AppLovinでは、文字列の長さを8192文字未満にすることを推奨しています。
バナーおよびMREC
MaxSdk.SetBannerCustomData("«ad-unit-ID»", "«custom-data»"); // BannersMaxSdk.SetMRecCustomData("«ad-unit-ID»", "«custom-data»"); // MRECs
adViewAd.setCustomData( "«custom-data»" );
BannerAd.setCustomData("«ad-unit-ID»", "«custom-data»"); // BannersMRec.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»")