Unityプラグイン V6 実装ガイド - 基本のSDK実装

概要:Unityで開発されたiOS / Androidアプリに、AppsFlyerのSDKを実装してください。基本的な実装作業が完了すると、アプリはインストールとアプリ内イベントを計測する準備が整った状態になります。 

 関連記事

Unityプラグインとアプリの実装の全体像については、以下の記事も必ず確認してください:

アプリへのプラグイン追加

 重要!

AppsFlyer Unity SDKでは、Unity Internal Build Systemをサポートしていません。

AppsFlyer Unityプラグインのダウンロード

最新のUnityプラグインをGitHubからダウンロードしてください。

プラグインのインストール

以下のいずれかのインストール方法を使用してください。

EDM4Uを使用EDM4Uを使用しない

Unity用のExternal Dependency Manager(EDM4U)は、デフォルトでAppsFlyer Unityプラグインとともに配布されます。これにより、プラグインとプロジェクト内の他のプラグイン間の依存関係の競合を解決し、実装プロセスが容易になります。

プラグインをインストールするには

Appsflyer-unity-plugin.v*.unitypackage を追加することで、AppsFlyerプラグインとEDM4Uの両方に必要なすべてのアセットが自動的にインポートされます。

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キーの取得

admin.png

  • キーはユニークな値で、各アカウントを識別します。場合によっては、アプリレベルのキーが存在します。
  • Dev Keyは実装の際に必須です。

Dev Keyを取得するには

  1. AppsFlyerの管理画面内で、左メニュー 設定アプリ設定へ移動してください。
  2. 表示されているDev Keyを取得してください。 

プラグインの初期化

AppsFlyer prefabを使用マニュアル実装

AppsFlyerプレハブを使用してプラグインを初期化するには

  1. Assets > AppsFlyer へ移動してください。
  2. AppsFlyerObject.Prefabをsceneにドラッグしてください。

    prefab_en-us.png
  3. 次のフィールドを設定してください。

     設定 備考
    Dev key 先程取得したDev Keyを貼り付けてください。
    App ID

    iOS:iOSのAppIDを入力してください。(冒頭のidは消去してください。)

    Android:空白のままにしてください。

    コンバージョンデータの取得 アプリが、AppsFlyerのディープリンクを実装している場合は、「True」に設定してください。デフォルト設定は「False」なので、デフォルト設定ではディープリンクは実装されませんので注意してください。
    Is debug

    開発中にデバッグログを表示する際は、「True」に設定してください。

    :アプリを本番環境にリリースする前には、必ず無効に(Falseに設定)してください。

  4. Assets> AppsFlyer> AppsFlyerObjectScript.cs内のコードを他の利用可能な APIと一緒に更新してください

アプリ内イベントの計測

アプリ内イベントを記録して、LTV(顧客生涯価値)、ROI、収益などのKPIを計測しましょう。

アプリ内イベントは、ユーザーイベントを記録するために実装する必要があります。アプリ内イベントはいくつかの方法で送信可能です:

旅行、ゲーム、Eコマースなどの特定のカテゴリーのアプリの場合には、 業種別のアプリ内イベントの推奨リストも参照してください。

アプリ内イベントのイベント名とパラメータ

イベントを送信するには:

[推奨]以下の理由からも、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毎の手順を参照してください。

AndroidiOS
#if UNITY_ANDROID && !UNITY_EDITOR
AppsFlyerAndroid.validateAndSendInAppPurchase(
"publicKey",
"signature",
"purchaseData",
"price",
"currency",
null,
this);
#endif

メソッドパラメータ

Android iOS
パラメーター 説明
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のフィールドに表示されます。

 注記

  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プラグインで呼ばれる、IAppsFlyerConversionDataclassの中にある 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のコンバージョンデータを取得するには:

  1. IAppsFlyerConversionDatabaseを実装してください。
  2. 最後のパラメータとしてinitSDK のメソッドをコールしてください。
  3. 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);
    }
}

インストールのテスト

テスト端末のホワイトリスト登録

テスト端末をホワイトリストに追加してください。 

インストール計測のテスト

オーガニックと非オーガニックのインストールをテストしてください。

オーガニックインストールのテスト

オーガニックインストールは、通常アプリストアから直接インストールされたものであり、どのメディアソースにも紐付けがされません。オーガニックインストールのテストは、こちらの手順に従ってください。

非オーガニックインストールのテスト

非オーガニックインストールは通常、広告接触に紐付けられたインストールです。 非オーガニックインストールのテストは、こちらの手順に従ってください。