概要:Unityで開発されたiOS / Androidアプリに、AppsFlyerのSDKを実装してください。基本的な実装作業が完了すると、アプリはインストールとアプリ内イベントを計測する準備が整った状態になります。
関連記事
Unityプラグインとアプリの実装の全体像については、以下の記事も必ず確認してください:
- Unityプラグイン V6 実装ガイド - 概要
- Unityプラグイン V6 実装ガイド - 基本のSDK実装 (本記事)
- Unityプラグイン V6 実装ガイド - 追加のSDK実装
- Unityプラグイン V6 実装ガイド - APIリファレンス
アプリへのプラグイン追加
重要!
AppsFlyer Unity SDKでは、Unity Internal Build Systemをサポートしていません。
AppsFlyer Unityプラグインのダウンロード
最新のUnityプラグインをGitHubからダウンロードしてください。
プラグインのインストール
以下のいずれかのインストール方法を使用してください。
Unity用のExternal Dependency Manager(EDM4U)は、デフォルトでAppsFlyer Unityプラグインとともに配布されます。これにより、プラグインとプロジェクト内の他のプラグイン間の依存関係の競合を解決し、実装プロセスが容易になります。
プラグインをインストールするには :
Appsflyer-unity-plugin.v*.unitypackage を追加することで、AppsFlyerプラグインとEDM4Uの両方に必要なすべてのアセットが自動的にインポートされます。
EDM4Uなしでプラグインをインストールするには:
- 同じくappsflyer-unity-plugin.v*.unitypackage をプロジェクトにインポートしますが、EDM4Uの依存関係の選択を必ずクリアしてください。
- 必要なAndroidの依存関係をダウンロードし、Assets / Plugins / Androidフォルダに追加してください:
- 必要なiOSの依存関係をダウンロードし、Assets/Plugins/iOS/AppsFlyerフォルダに追加してください:
Androidの設定
必要なAndroidの権限を設定するには:
次の権限をAndroidManifest.xml
内に設定してください:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
APIレベル31 (Android12)を対象とするアプリの場合には、Android Advertising IdentifierにアクセスするためにAndroidManifest.xml
に以下のパーミッションを追加する必要があるので注意してください:
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
プラグインの初期化
このセクションではプラグインを実装と初期化の方法について説明しています。
Devキーの取得
- キーはユニークな値で、各アカウントを識別します。場合によっては、アプリレベルのキーが存在します。
- Dev Keyは実装の際に必須です。
Dev Keyを取得するには:
- AppsFlyerの管理画面内で、左メニュー 設定 > アプリ設定へ移動してください。
- 表示されているDev Keyを取得してください。
プラグインの初期化
AppsFlyerプレハブを使用してプラグインを初期化するには:
- Assets > AppsFlyer へ移動してください。
- AppsFlyerObject.Prefabをsceneにドラッグしてください。
- 次のフィールドを設定してください。
設定 備考 Dev key 先程取得したDev Keyを貼り付けてください。 App ID iOS:iOSのAppIDを入力してください。(冒頭の
id
は消去してください。)Android:空白のままにしてください。
コンバージョンデータの取得 アプリが、AppsFlyerのディープリンクを実装している場合は、「True」に設定してください。デフォルト設定は「False」なので、デフォルト設定ではディープリンクは実装されませんので注意してください。 Is debug 開発中にデバッグログを表示する際は、「True」に設定してください。
注:アプリを本番環境にリリースする前には、必ず無効に(Falseに設定)してください。
- Assets> AppsFlyer> AppsFlyerObjectScript.cs内のコードを他の利用可能な APIと一緒に更新してください。
マニュアルで実装するには:
ゲームオブジェクトを作成し、以下のinitコードを追加してください。
using AppsFlyerSDK;
public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData
{
void Start()
{
/* AppsFlyer.setDebugLog(true); */
AppsFlyer.initSDK("devkey", "appID", this);
AppsFlyer.startSDK();
}
public void onConversionDataSuccess(string conversionData)
{
AppsFlyer.AFLog("onConversionDataSuccess", conversionData);
Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
// add deferred deeplink logic here
}
public void onConversionDataFail(string error)
{
AppsFlyer.AFLog("onConversionDataFail", error);
}
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
public void onAppOpenAttributionFailure(string error)
{
AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
}
}
注 :ゲームオブジェクトに対してdestroyをコールしないようにしてください。
アプリ内イベントの計測
アプリ内イベントを記録して、LTV(顧客生涯価値)、ROI、収益などのKPIを計測しましょう。
アプリ内イベントは、ユーザーイベントを記録するために実装する必要があります。アプリ内イベントはいくつかの方法で送信可能です:
- [推奨]アプリ経由でのイベント送信。(本記事内に記載)
- その他の方法については、アプリ内イベントの概要ガイドを参照してください。
旅行、ゲーム、Eコマースなどの特定のカテゴリーのアプリの場合には、 業種別のアプリ内イベントの推奨リストも参照してください。
アプリ内イベントのイベント名とパラメータ
イベントを送信するには:
- イベント名と含めるパラメータを決定してください。
- 関連するリスト:
- 推奨するアプリ内イベント名とパラメータのリスト
- リストは
AFInAppEvents
のクラスで見つかります。
[推奨]以下の理由からも、AppsFlyerで推奨しているイベント名とパラメータを使用してください。
- Standard naming: AppsFlyer can automatically map events to SRNs such as Meta ads, Google, and Twitter.
- 下位互換性: もしもAppsFlyerがイベント名やパラメータを変更した場合にも、互換性があり影響を与えません。
収益の計測
アプリ内イベントに af_revenue
のパラメータを追加することで収益を記録できます。
- プラス・マイナスを問わず、あらゆる数値を入力できます。
af_revenue
のパラメータは、AppsFlyerでの収益の計測とローデータレポートへの収益の入力を可能にし、管理画面でも簡単に収益を確認できるようになります。- 収益の値を他のパラメータを使用して送信することも可能ですが、AppsFlyer上では”収益”の値として認識されません。詳細についてはこちら を参照してください。
- 値区切りのコンマ、通貨記号、テキストなどは収益の値に含めないでください。
たとえば、収益の値は「1234.56」のように設定してください。
推奨 通貨設定、通貨換算、管理画面上での表示についても参照してください。
収益イベントを送信する際の通貨コードの要件
- デフォルトの通貨設定:USD
- 3文字のISO4217コードを使用: (以下例を参照してください。)
- API を呼んで通貨コードを設定:
AppsFlyer.setCurrencyCode("ZZZ")
例:収益を伴うアプリ内イベント
この購入イベントは200.12ユーロです。管理画面上に収益を反映させるには、以下のような実装になります。
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "EUR");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200.12");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a",);
AppsFlyer.sendEvent ("af_purchase", purchaseEvent);
マイナス収益の計測
マイナス記号を使用してマイナスの収益を記録します。
- 収益値の前にはマイナス記号が追加されています。
- イベント名は専用の「cancel_purchase(購入キャンセル)」になり、管理画面やローデータレポートでマイナスの収益イベントを確認できます。
たとえば、ユーザーが払い戻しを受け取ったり、サブスクリプションをキャンセルしたときです。
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "-200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
AppsFlyer.sendEvent ("cancel_purchase", purchaseEvent);
アプリ内購入の検証
このプラグインでは、アプリ内購入をサーバーにて検証できます。
購入を検証する場合は、関連するOS毎の手順を参照してください。
#if UNITY_ANDROID && !UNITY_EDITOR
AppsFlyerAndroid.validateAndSendInAppPurchase(
"publicKey",
"signature",
"purchaseData",
"price",
"currency",
null,
this);
#endif
テストという目的のため、次のようにAppleのsandbox server callに対してテストするようにしてください。
#if UNITY_IOS && !UNITY_EDITOR
AppsFlyeriOS.validateAndSendInAppPurchase(
"productIdentifier",
"price",
"currency",
"tranactionId",
null,
this);
#endif
メソッドパラメータ
パラメーター | 説明 |
---|---|
String publicKey | Google Developer Consoleで取得したPublic Key |
String signature |
Transaction signature: 購入が完了したときにGoogle APIによって返されます。 |
String purchaseData |
JSON形式の購入された製品: 購入が完了したときにGoogle APIによって返されます。 |
String revenue | AppsFlyerへレポートされるアプリ内イベントの収益です。 |
String currency | AppsFlyerへレポートされるアプリ内イベントの通貨単位です。 |
Dictionary<String, String> additionalParameters |
追加のアプリ内イベントのパラメータは、 アプリ内イベントのローデータ内にあるevent_valueのフィールドに表示されます。 |
パラメーター | 説明 |
---|---|
String productIdentifier | 製品識別子 |
String price | AppsFlyerへレポートされるアプリ内イベントの収益です。 |
String currency | AppsFlyerへレポートされるアプリ内イベントの通貨単位です。 |
Dictionary<String, String> additionalParameters |
追加のアプリ内イベントのパラメータは、アプリ内イベントのローデータ内にあるevent_valueのフィールドに表示されます。 |
注記
validateReceipt
を呼び出すと、 af_purchase のアプリ内イベントが自動的に生成されます。
購入検証後に別の購入イベントが送信されると、イベント計測が重複してしまうので送信しないでください。
アプリ内ベントに関する注意事項
- イベント名:最大45文字まで(半角)
- イベント値(Event Value):半角1000文字を超えないでください。 - 超えた場合には切り捨てる可能性があります。
- アプリ内イベント(およびその他のAPI)で、英語以外の文字もサポートしています。
- 価格と収益について:
- 5や5.2など、数値と小数点のみを使用してください。
- 5.12345など、小数点以下は5桁まで使用可能です。
アプリ内イベント計測例
sendEvent
を呼び出してアプリ内イベントを記録し、イベント名とパラメータをその中に含めてください。.
詳細については、アプリ内イベント を参照してください。
例:アプリ内購入(課金)イベントの計測方法
アプリカテゴリ別の既製のコードスニペットの包括的なリストについては、業種別のリッチアプリ内イベントのガイドを参照してください
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "2");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
purchaseEvent.Add(AFInAppEvents.CONTENT_ID, "092");
AppsFlyer.sendEvent (AFInAppEvents.PURCHASE, purchaseEvent);
オフラインで発生したアプリ内イベントの計測
ユーザーは、インターネットに接続していないときにもアプリ内イベントを生成することがありますが、AppsFlyerでも可能な限りそのイベントを記録します。
- プラグインはAppsFlyerサーバーにイベントを送信し、その応答を待ちます。
- プラグインが200のサーバーレスポンスを受け取らなかった場合、イベントはキャッシュに保存されます。
- 次の200サーバーレスポンスが受信された後に、保存されたイベントはサーバーに再送信されます。
- キャッシュが複数のイベントを保存している場合には、それらは順次サーバーに送信されます。
注記
キャッシュは最大40個のイベントを保存できます。
- 最初の40個までのオフラインイベントのみが保存されます。
- 次の200のサーバーレスポンスまでに発生した、41個目以降のイベント情報はすべては破棄されます。
- ローデータレポート内で、
- Event time:ユーザーの端末がオンラインに戻った後、AppsFlyerにイベントが送信された時間です。
- 実際にイベントが行われた時ではありません。
OneLinkによるディープリンク
OneLinkは、AppsFlyerが提供するマルチプラットフォーム向けの計測、 リダイレクト、ディープリンクのためのソリューションです。
デバイスの検知とリダイレクト
OneLink:
- ユーザーがクリックしたときに、端末の種別(AndroidおよびiOS、デスクトップなど)を検出
- ユーザーを以下のような正しい遷移先へリダイレクトさせます:Google Play、iOS AppStore、Google Play以外の第三者ストア、またはWebページなど。
マルチプラットフォーム向けの計測リンクの発行と、ディープリンクの基本仕様を確認するには、 OneLink リダイレクト設定ガイド を参照してください。
ディープリンク
ディープリンクを使用することで、 既存ユーザーを特定のアクティビティやカスタマイズされたコンテンツに誘導します。
アプリ所有者と開発担当者は、協力してOneLinkでのディープリンクを設定する必要があります。
- アプリ所有者はAppsFlyerの管理画面に アクセスする必要があります。
- 開発担当者はアプリに手を加える必要があります。
OneLinkでのディープリンク設定 のガイドを参照してください。
ディファードディープリンク
ディファードディープリンクを使用すると、新規ユーザーをディープリンクさせ、アプリの初回起動時にカスタマイズされたコンテンツを提供できます。
標準のディープリンクも特定のアクティビティとカスタマイズされたコンテンツにユーザーを誘導しますが、アプリがユーザーの端末に既にインストールされている必要があります。
OneLinkでディファードディープリンクを設定するには:
- アプリ開発者もAppsFlyerの管理画面にアクセスする必要があります。
- ディファードディープリンクと標準のディープリンク用のAppsFlyer管理画面上での設定項目は同じです。
- 唯一の違いは、ユーザーがアプリをインストールして起動した後に、ユーザーをディープリンクさせてカスタマイズされたコンテンツを提供するために、アプリに追加のロジックを実装する必要がある点です。
詳細については、 ディファードディープリンクのガイドを参照してください。
ディープリンクデータの取得
AppsFlyer SDKは、すべてのインストールまたはディープリンクイベントに伴う、コンバージョンデータまたはエンゲージメントデータを提供します。このデータを使用することで、コンテンツとアプリの動作をプログラムしてカスタマイズできます。
ディープリンクデータを取得するには:
- AppsFlyerプラグインで呼ばれる、
IAppsFlyerConversionData
classの中にあるonAppOpenAttribution
のコールバックを実装してください。 - アプリ起動を促すOneLinkや計測リンクのパラメータの値を返します。
- 値を解析して、特定のアプリページを開くロジックを適用してください。
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
詳細については、 ディープリンクデータ のガイドを参照してください。
コンバージョンデータの取得
インストール毎に、リアルタイムにそのユーザーのアトリビューションデータにアクセス可能です。これにより次のようなユーザーエンゲージメントの強化が可能です:
- パーソナライズされたコンテンツ
- アプリ内の特定のアクティビティへの誘導 詳細はこの記事のディファードディープリンクの箇所を参照してください。
AppsFlyerのコンバージョンデータの取得
AppsFlyerのコンバージョンデータを取得するには:
IAppsFlyerConversionDatabase
を実装してください。- 最後のパラメータとして
initSDK
のメソッドをコールしてください。 onConversionDataSuccess
のメソッドを使用して、ユーザーをリダイレクトさせてください。
reference for onConversionDataSuccessのAPIを参照してください。
using AppsFlyerSDK;
public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData
{
void Start()
{
/* AppsFlyer.setDebugLog(true); */
AppsFlyer.initSDK("devkey", "appID", this);
AppsFlyer.startSDK();
}
public void onConversionDataSuccess(string conversionData)
{
AppsFlyer.AFLog("onConversionDataSuccess", conversionData);
Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
// add deferred deeplink logic here
}
public void onConversionDataFail(string error)
{
AppsFlyer.AFLog("onConversionDataFail", error);
}
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
public void onAppOpenAttributionFailure(string error)
{
AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
}
}