はじめてのAppsFlyer - (4) iOS SDK実装後の実機デバイスでの動作確認

いよいよ「はじめてのAppsFlyer(iOS編）」の最後の記事です。これまでの以下の順にSDK実装を進めてきたアプリで、実機デバイスでアプリを動かし、広告接触経由の非オーガニックインストールができることを確認します。

- [(1) アプリを管理画面に追加する](https://qiita.com/maktag/items/5d3399e2137947bef529)
- [(2) iOS SDK実装／iOSシミュレーターでの動作確認](https://qiita.com/maktag/items/9c5929450a7cc0b42e1a)
- [(3) iOS SDKでのATTフレームワークの実装](https://qiita.com/maktag/items/41ad60df7c037b72a7bb)

# 前提

この記事では、Xcodeから手持ちのiPhoneの実機にアプリが転送できることを前提としています。
Apple Developer Programなどに登録するのが一般的だと思いますが、登録しなくても実機テストをやる方法もあるようです。

[[Xcode][iOS] 有料ライセンスなしでの実機インストール 全工程解説！](https://dev.classmethod.jp/articles/run-on-devices-without-apple-developer-program-license/)

# テスト端末登録
まずテストに使用する実機デバイスのIDFAをAppsFlyerに登録します。

テスト端末として登録することで、同一端末でも毎回インストールを計測できるようになり、インストールを繰り返す動作確認もやりやすくなります。

:::note info
AppsFlyerでは通常、同一端末でインストールとアプリ削除を繰り返された場合には重複除外し、何度もインストールが計測されないようになっています。
:::

しかし、iOSでテスト端末を登録する上で問題なのが、端末のIDFAはiOSの設定画面などApple公式のアプリでは表示できないということです。なんらかのサードパーティ製のアプリを利用して確認する必要があります。

AppsFlyerのテスト端末登録用途であれば、「[My Device ID by AppsFlyer](https://apps.apple.com/jp/app/my-device-id-by-appsflyer/id1192323960)」というアプリをAppStoreからダウンロードし、利用することをお勧めします。
このアプリではIDFAを確認できるだけでなく、簡単にAppsFlyerにテスト端末として登録ができるからです。

アプリ画面の右下にある「Register」のボタンを押して、AppsFlyer管理画面へのログイン情報を入れると、テスト端末として登録されます。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f37333735392f65353964343930662d303333382d376137652d393936302d3535363733343364396533372e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/6b1d64a6-f6b8-f4fd-b161-4d259dff41a5.png)

:::note warn
注意
「My Device ID by AppsFlyer」でIDFAを表示するためにも、このアプリで最初に表示されるATTポップアップに許諾が必要です。
:::

テスト端末で登録されているかどうかは、AppsFlyer管理画面上の右上のメニューから「テスト端末」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/14c112ea-c361-8f19-5255-732ed36a2436.png)

この画面で、アプリから登録されたテスト端末が確認できます。
また、この画面で「+テスト端末を追加」のボタンを押し、IDFAを手入力することでもテスト端末登録は可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/9a2967e8-9e81-ae90-e739-32cf05a5bec3.png)


# オーガニックインストールの確認

今回は、実機をMacに接続し、Xcodeでその端末を選び実行します。手順としては、前回記事「[(3) iOS SDKでのATTフレームワークの実装](https://qiita.com/maktag/items/41ad60df7c037b72a7bb)」の動作確認と同じです。

```
2022-12-20 23:28:47.979390+0900 AdventTest[1826:260275] [AppsFlyerSDK] [com.appsflyer.serial] [GCD-A03] Server retrieving finished
onConversionDataSuccess data:
install_time : 2022-12-20 14:28:46.453
af_status : Organic
is_first_launch : 1
af_message : organic install
This is an organic install.
First Launch
```

ATTポップアップで許可すると、デバッグログには、IDFAを示すadvertiserIdがみられることが確認できます。
```
{"timestamp":"1671546773.658495","uid":"1671546768957-3229164","bundlename":"","cell":
{"mcc":"tv|sim", ...,"att_status":3,...,"advertiserId":"8E50XXXX-XXXX-XXXX-XXXX-XXXXXXXXC0EE", ...
```


# 非オーガニックインストールの確認

非オーガニックインストールでは、下記の図のように、広告クリックの情報がAppsFlyerサーバーに連携された後、AppsFlyer SDKによりインストールが計測される必要があります。
![Screenshot 2022-12-21 at 0.56.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/c8ed62ea-409a-68c5-30bb-0f6ea96623fe.png)

この確認手順では、通常広告の裏側で実行されるAppsFlyer計測リンクのURLの発火を手動でおこないます。これにより広告接触を擬似的に再現し、非オーガニックインストールの計測を行います。

なお、AppsFlyer管理画面左メニューのSDK実装テスト > 非オーガニックインストールでテストを実施した場合も、内部的にはこの確認手順と同等になります。

## Private Relay設定の無効化 

iOS15以降のiCloud有料会員向けに「プライベートリレー（Private Relay）」という、SafariでのIPアドレスを匿名化する機能があります。

この手順の非オーガニックインストールでは、確率論的モデリングというIPアドレスなどをベースに広告流入を特定する方式になるため、テスト端末に「プライベートリレー」が有効化されている場合、非オーガニックインストールの計測がうまくいかないことが想定されます。

テスト端末のiPhoneの設定 > Apple ID > iCloud > プライベートリレーの画面から、プライベートリレーが無効化されていることを事前に確認してください。

![IMG_3219.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/4644df72-cf54-890d-c76f-09f8c68196b8.png)


ここからが実際の非オーガニックインストールの確認の手順です。

## 1 - 検証アプリの削除
テスト端末に前項のオーガニックインストールですでにアプリがインストールされている場合には、事前準備としてそのアプリを削除しておきます。

## 2 - 計測リンクのクリック
テスト端末のメールアプリやメモアプリなどを使って、下記のようなURLをクリックしてSafariこれが広告接触を擬似的に再現させる手順となります。

`https://app.appsflyer.com/<’id’+アプリID>?pid=<任意のメディアソース名>`

例えば下記のような形になります。
`https://app.appsflyer.com/id111168001?pid=myConversionTest`

これをメールなどでテスト端末に送り、URLをクリックします。

![IMG_3224.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/f8955e76-5cc7-645b-7de6-975929470943.png)

そうするとSafariが開きます。
すでにストアに公開されているアプリであればAppStoreにリダイレクトされるのですが、今回は検証アプリで実際に公開されている訳ではないため、下記のようなメッセージがでます。

![IMG_3216.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/b7bf3b10-aa4c-c35f-344c-b6110e946f72.png)

ただ、これで計測リンクの挙動としては特に問題はないので先に進みます。

## 3 - アプリのインストール・初回起動

Xcode上でテスト端末をターゲットとして実行することで、アプリをインストールし、初回起動します。
デバッグログに以下のようなメッセージが出ます。
 
```
2022-12-20 23:33:07.469702+0900 AdventTest[1802:254021] [AppsFlyerSDK] [afsdk-buffer-serial] [HTTP] Dealloc. Time elapsed for: `64-1671546785.224578` - 0.3066470623016357
onConversionDataSuccess data:
esp_name : <null>
adgroup : <null>
af_sub5 : <null>
orig_cost : 0.0
cost_cents_USD : 0
af_sub3 : <null>
af_sub4 : <null>
media_source : myConversionTest
is_incentivized : false
match_type : probabilistic
af_status : Non-organic
is_retargeting : false
is_universal_link : <null>
...
This is a Non-Organic install. Media source: myConversionTest  Campaign: None
First Launch
```
これにより無事「myConversionTest」という広告メディア経由の非オーガニックインストールが計測できたということになります。


AppsFlyer管理画面でも非オーガニックインストールの計測値が確認できます。
15-30分程度のタイムラグはありますので、こちらも念の為、少し時間をおいて確認してみてください。（参考: [データの更新頻度タイプ](https://support.appsflyer.com/hc/ja/articles/360000310629-Data-freshness-and-time-zone-support#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%9B%B4%E6%96%B0%E9%A0%BB%E5%BA%A6%E3%82%BF%E3%82%A4%E3%83%97)）

非オーガニックインストールの合計値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/a096a9ad-4aa2-61bb-101a-a134f6ab022c.png)

メディアソース「myConversionTest」経由のインストール数・クリック数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/481b6f25-71c1-7adf-c312-bffddb5d6337.png)

※スクショは何度かインストールを繰り返した後の例です。

# まとめ

この記事では、実機デバイスでアプリを動かし、非オーガニックインストール計測の手順を紹介しました。
実機デバイスとテスト端末としての登録することで、挙動確認がやりやすくなりますのでこちらを忘れずにやっていただくことをお勧めします。

なお、スクリーンショットなどは2022年12月時点のもので、デザインなどは変わる可能性がございます。
今後手順などが大きく変わることは考えにくいですが、最新情報につきましては、以下のAppsFlyer公式のガイドも併せてご確認ください。
- [AppsFlyerヘルプセンター](https://support.appsflyer.com/hc/ja)
- [AppsFlyerディベロッパーハブ](https://ja.dev.appsflyer.com/hc)