Google AdMobからヤバそうな内容のメールが届いたから対応した件

# はじめに

私は個人のiOSアプリに [Google AdMob](https://admob.google.com/intl/ja/home/) でアプリ内広告を導入することで広告収益を得ているのですが、3週間ぐらい前に突然、以下の画像の内容のメールが送られてきました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/1cef628e-e7ab-1a90-1ba4-d2a1728a1b72.jpeg" width=350>

- **app-ads.txt ファイルのないアプリは、広告掲載の対象外になっていく可能性があります**
- **一部の代理店や購入者はすでに app-ads.txt ファイルのないアプリへの広告掲載を停止しており、今後この動きは他の広告主にも広がることが予想されます。**

<img src="https://media.giphy.com/media/W5YVAfSttCqre/giphy.gif" width=150>

いやいやいやいや！それは困る！
しれっと送ってきたメールの割にはなかなかヤバそうなこと書いてある！
これは早急に対応せねば...！

となったのが今回のきっかけでした。

# この記事のアジェンダ

忙しい人のために、この記事のアジェンダは以下の通りです。
下のトピックの方が気になるという方は、ジャンプしてもらっても大丈夫です。

- [App Privacy Policy Generator](https://app-privacy-policy-generator.firebaseapp.com/) と [KISSr](https://www.kissr.com/) を利用してAdMob の app-ads.txt を設定する方法
- [App Store Connect の ITMS-90809: Deprecated API Usage (UIWebView) に対応した Google-Mobile-Ads-SDK & RxSwift の更新](https://qiita.com/cokaholic/items/718c87912307c9b91517#itms-90809-deprecated-api-usage-uiwebview-%E3%81%A0%E3%81%A8)

## そもそも app-ads.txt ってなんだ...？

とりあえずググってみたところ、
>app-ads.txtは**モバイルアプリの広告枠の販売者を識別することができる**ツールです。
つまり、ads.txt機能をMobile App向けに実現させているのがapp-ads.txtです。 app-ads.txtはads.txtの拡張版であり、モバイルアプリの広告まで広告枠の販売者の識別が可能になりました。
ads.txtはウェブ広告枠をアドフラウドから守るためであり、app-ads.txtはモバイルアプリの広告枠を不正利用から守るためのツールです。

>[app-ads.txtとは何? | CCI TECH BLOG](https://tech-cci.io/archives/2150) より

という情報を得ることができました。
アドフラウドというのは**ネット広告配信において起きている詐欺的な不正行為のこと**のようです。
そのアドフラウド対策のための仕組みで app-ads.txt を利用しているようです。
[上記の引用元リンク](https://tech-cci.io/archives/2150) では app-ads.txt に関して仕組みやプロセスに関しても解説してくださっていたので、より詳しく知りたい方は一読してみるとよさそうです。

## app-ads.txt の設定について

で、肝心の app-ads.txt の設定についてなのですが、流れとしては以下の通り。

1. app-ads.txt のコードスニペットを [Google AdMob](https://admob.google.com/intl/ja/home/) から手に入れる
2. app-ads.txt をデベロッパーウェブサイトのルートに置いて公開する
3. アプリ情報入力画面内のマーケティングURLに公開したデベロッパーウェブサイトのURLを記載し、申請する

app-ads.txt をデベロッパーウェブサイトのルートに置く理由については [AdMobのapp-ads.txtの設定に関するリンク](https://support.google.com/admob/answer/9363762?hl=ja) 内のAdMob クローラの仕様に記載されています。
また、残念ながら、**iOSアプリのマーケティングURLの変更はアップデート申請をしないと変更できません**😇
そのため、最終的にはアプリのアップデート申請まで行う必要があります。
以降ではそれぞれの手順について説明していきます。

### 1. app-ads.txt のコードスニペットを [Google AdMob](https://admob.google.com/intl/ja/home/) から手に入れる

まずは [Google AdMob](https://admob.google.com/intl/ja/home/) にアクセスします。
アクセスしたら、左のドロワーから「アプリ」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/3ebf9a27-a7c3-d40b-50c5-db2ebb98bc81.jpeg" width=700>

すると、自身の広告導入しているアプリ一覧がポップアップで表示されますので、ポップアップ内右下の「すべてのアプリを表示」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/2dac6a25-4232-eb9e-3de3-3276bd2b24c5.jpeg" width=700>

アプリ一覧画面に移動したら、右上の「APP-ADS.TXT の設定」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/128e1761-64ff-6f14-72b3-67b63cbb1408.jpeg" width=700>

すると、「アプリに app-ads.txt を設定する」というポップアップが表示されます。
そのポップアップ内に　app-ads.txt 用のコードスニペットが記載されています。
このコードスニペットをコピーし、app-ads.txtという名前でファイルを作成し、ファイルの中にコピーしたコードスニペットを貼り付けて、app-ads.txt をローカルに保存しておきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/d337263e-fdc5-3fa5-ffcd-9b5a34e97ac3.jpeg" width=700>

### 2. app-ads.txt をデベロッパーウェブサイトのルートに置いて公開する

さて、次は先ほど作成した app-ads.txt をデベロッパーウェブサイトのルートに置いて公開する方法についてですが、ここで言うデベロッパーウェブサイトは自身のアプリを紹介するサイトとかがある人なら、そこのルートに配置すれば完了なのですが、そういったものは用意して無いなぁという人のために、今回は[2018年10月から新規アプリと更新の際に必須化されたプライバシーポリシー](https://japan.cnet.com/article/35125024/)用のサイトを利用する方法で解決します。

#### プライバシーポリシーサイトの作成方法

一からプライバシーポリシーサイトを個人で作るのは結構骨が折れる作業だと思います。
そこで、[App Privacy Policy Generator](https://app-privacy-policy-generator.firebaseapp.com/) というサイトを利用することにします。
ちなみに、[App Privacy Policy Generator](https://app-privacy-policy-generator.firebaseapp.com/) は [nisrulz/app-privacy-policy-generator](https://github.com/nisrulz/app-privacy-policy-generator) でOSSとして公開されているので、安心感があっていいですね。

##### アプリ情報の入力

では、まずは[App Privacy Policy Generator](https://app-privacy-policy-generator.firebaseapp.com/) にアクセスします。
すると、以下のような画面が表示されます。

<img width="700" alt="スクリーンショット 2020-06-14 16.59.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/1f3418bb-0b68-4e91-816c-0b7c5f6cb0b1.png">

アクセスしたら、フォームを入力し、「→」ボタンをクリックします。
入力する情報は以下の通りです。

- App Name：アプリ名
- Contact Information：コンタクト情報。メアドやTwitterのリンクとかで良い
- Personally Identifiable Information：アプリ内で収集している個人情報。複数ある場合はカンマ(,)区切りで記載する
- App Type：アプリの種類。以下の選択肢から選択する。
    - Free：無料
    - Open Source：オープンソース
    - Freemium：基本無料
    - Ad Supported：広告
    - Commercial：商用
- Mobile OS：対象OSについて。以下の選択肢から選択する。
    - iOS
    - Android
    - KaiOS
    - Android & iOS
    - Android, iOS & KaiOS
- Policy Effective Date：発行日
- Owner Type：アプリ所有者のタイプ。以下の選択肢から選択する。
    - Individual：個人
    - Company：法人
- Developer Name or Company Name：開発者名か法人名

##### サードパーティー製サービス情報の選択

次に、アプリ内で使用しているサードパーティー製サービスにチェックをつけます。
チェックをつけ終わったら、「→」ボタンをクリックします。

<img width="700" alt="スクリーンショット 2020-06-14 17.39.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/eba1a9be-847f-62fb-db89-a90bba6c57d9.png">

##### 生成されたプライバシーポリシーサイトのHTMLを取得する

生成が完了すると、以下の画面に遷移します。
ここでプライパシーポリシーサイトをとりあえず公開するなら、黒い「Deploy」ボタンをクリックすることで、[Flycricket](https://flycricket.com/) 経由で公開することができます。
ただ、今回は同一ルートに app-ads.txt を配置して公開したいため、HTMLだけ取得することにします。
緑色の「Privacy Policy」ボタンをクリックします。

<img width="700" alt="スクリーンショット 2020-06-14 17.46.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/445296d4-3152-7316-8803-9e517e220a37.png">

すると、以下のようにサイトのプレビューがポップアップで表示されます。
ここで確認してみて、問題なさそうであれば、「HTML」ボタンをクリックします。
すると、プレビューの中身がHTMLに変わるので、中身をコピーし、index.htmlという名前でファイルを作成し、ファイルの中にコピーしたHTMLを貼り付けて、index.html をローカルに保存しておきます。
プライバシーポリシーサイトの中身はこれで完成しました。次はこのサイトと app-ads.txt を公開します。

<img width="700" alt="スクリーンショット 2020-06-14 17.59.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/5dda5be8-b196-9fd2-794a-522e0c32ef0b.png">

#### プライバシーポリシーサイトの公開と app-ads.txt の配置

サイトを公開する方法は色々ありますが、今回はややこしいターミナルでの操作など不要で簡単にサイトを公開するために [KISSr](https://www.kissr.com/) というサービスを利用します。
[KISSr](https://www.kissr.com/) は [Dropbox](https://www.dropbox.com/ja/) を利用して簡単にサイトを公開できるサービスとなっています。なので、事前に [Dropbox](https://www.dropbox.com/ja/) のアカウントを作成しておきます。

では、まずは [KISSr](https://www.kissr.com/) にアクセスします。
すると、以下のような画面が表示されまので、中央の入力フォームに公開するサイトのサブドメインを入力します。
今回は公開しているアプリ名に絡めたサブドメインを入力するといいと思います。使用可能なサブドメインが見つかったら、「Create Site」ボタンをクリックします。

<img width="700" alt="スクリーンショット 2020-06-14 18.29.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/18f12b5a-8b63-5926-f223-dbed0dcb0dee.png">

すると、Dropboxのログイン画面が表示されますので、事前に用意したDropboxアカウントにログインします。

<img width="1680" alt="スクリーンショット 2020-06-14 18.52.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/692b0558-3022-17e9-0f3a-dcfdc1c13af6.png">

ログインが完了すると、サイトが作成され、KISSrのダッシュボード画面に遷移します。
この時点ですでにサイトの公開が完了しているので、リンクの右側にある矢印ボタンを押すと、初期状態のサイトが確認できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/d2188586-a314-3b31-4b7d-294b354c2f8e.jpeg" width=700>

では、次にサイトの中身を[前の節](https://qiita.com/cokaholic/items/718c87912307c9b91517#2-app-adstxt-%E3%82%92%E3%83%87%E3%83%99%E3%83%AD%E3%83%83%E3%83%91%E3%83%BC%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%88%E3%81%AB%E7%BD%AE%E3%81%84%E3%81%A6%E5%85%AC%E9%96%8B%E3%81%99%E3%82%8B)で用意したプライバシーポリシーサイトに更新するために、[Dropboxのホーム](https://www.dropbox.com/home)にアクセスします。
すると、以下のようにホームに「アプリ」というディレクトリが作成されていると思います。
そのまま、`アプリ>KISSr>KISSrのサブドメイン名`のディレクトリまで移動します。

<img width="700" alt="スクリーンショット 2020-06-14 19.09.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/c66195d4-11d0-722c-5534-c6be2f4f1969.png">

そして、[前の節](https://qiita.com/cokaholic/items/718c87912307c9b91517#2-app-adstxt-%E3%82%92%E3%83%87%E3%83%99%E3%83%AD%E3%83%83%E3%83%91%E3%83%BC%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%88%E3%81%AB%E7%BD%AE%E3%81%84%E3%81%A6%E5%85%AC%E9%96%8B%E3%81%99%E3%82%8B)で用意したプライバシーポリシーサイトの`index.html`と [app-ads.txtを手に入れる節](### 1. app-ads.txt のコードスニペットを [Google AdMob](https://admob.google.com/intl/ja/home/) から手に入れる) で作成した`app-ads.txt`をそれぞれドラッグ＆ドロップでDropboxに追加します。
`index.html`は先に入っていた方と差し替えることで、`http://[サブドメイン].kissr.com`の表示がプライバシーポリシーサイトに変わります。
最後に`http://[サブドメイン].kissr.com/app-ads.txt`にアクセスし、app-ads.txt の中身が表示されれば、app-ads.txt をデベロッパーウェブサイトのルートに置いて公開する作業も完了です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/9243361e-4abd-451a-dbbb-489252f98010.jpeg" width=700>

### 3. アプリ情報入力画面内のマーケティングURLに公開したデベロッパーウェブサイトのURLを記載し、申請する

最後に、Xcodeからアップデートするアプリのアーカイブを [App Store Connect](https://appstoreconnect.apple.com/) へアップロードし、公開したプライバシーポリシーサイトのURLをアプリ情報入力画面内のマーケティングURLに記載し、アップデート申請を提出することで、完了です。
あとは審査が通ることを祈って、待ちます🙏

#### app-ads.txt の設定がちゃんと反映されているかの確認方法

ついでに、app-ads.txt の設定がちゃんと反映されているか確認する方法について説明します。
無事に審査が通り、アプリがリリースされたら、[Google AdMob](https://admob.google.com/intl/ja/home/) にアクセスします。
アクセスしたら、[コードスニペットを手に入れる節](https://qiita.com/cokaholic/items/718c87912307c9b91517#1-app-adstxt-%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B9%E3%83%8B%E3%83%9A%E3%83%83%E3%83%88%E3%82%92-google-admob-%E3%81%8B%E3%82%89%E6%89%8B%E3%81%AB%E5%85%A5%E3%82%8C%E3%82%8B) から手に入れる) 内のアプリ一覧画面まで遷移し、以下の画像内の「APP-ADS.TXT」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/8d409030-bd97-1bdf-61aa-7021ca9dcad3.jpeg" width=700>

そして、一番下までスクロールすると、AdMob クローラが確認しているアプリ一覧が表示されます。
その一覧を確認し、 「app-ads.txt URL」の欄に申請時にマーケティングURLに記載したURLが表示されていて、ステータスが緑色になっていれば、うまくいっているということです。
AdMob クローラが app-ads.txt ファイルをクロールして検証するまでは最大24時間かかるようですので、リリース後、app-ads.txt のステータスは24時間以上経過してから確認するようにしましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/28554189-b7f6-2195-0d03-919a3d2f606e.jpeg" width=700>

## ITMS-90809: Deprecated API Usage (UIWebView) ...だと...？

さて、app-ads.txt を設定するだけなら、先ほどの章までで完了なのですが、私の場合はアプリのアーカイブを App Store Connect にアップロードした際に以下のような注意書きが入ったメールが届きました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46227/0746d45e-135e-88cd-e452-77c40a42c648.jpeg" width=350>


ざっくりと issue の内容を説明すると、

**2020年12月までは許すけど、UIWebView はもう使わんといてな！**

ってことらしいです。
ここでいう 使わんといてな！ とは**UIWebViewがソースコード内に含まれている** だけでもアウトなので、ライブラリ内などに記載されていても検出されます。

そして、今回検出されてしまったライブラリは Google-Mobile-Ads-SDK と RxSwift でした 😇
なので、それぞれのライブラリを UIWebView を含まないバージョンまでアップデートします。

### Google-Mobile-Ads-SDK編

アップデート前は`7.44.0`を使っていたのですが、[Google Admob Mobile Ads SDK(iOS) Release Notes](https://developers.google.com/admob/ios/rel-notes) を確認してみると、 `7.55.0`で対応しているようですので、それ以上のバージョンにアップデートすれば大丈夫そうでした。
とはいえ、できるだけ最新バージョンまで上げておきたかったので、今回は2020年6月時点の最新バージョンである`7.60.0`までアップデートしておきました。

### RxSwift編

アップデート前は`4.0.0`を使っていたのですが、[ReactiveX/RxSwift](https://github.com/ReactiveX/RxSwift) のリポジトリのissueである [ITMS-90809: Deprecated API Usage - UIWebView · Issue #2055 · ReactiveX/RxSwift](https://github.com/ReactiveX/RxSwift/issues/2055) を確認したところ、[issue内のコメント](https://github.com/ReactiveX/RxSwift/issues/2055#issuecomment-594146342)で`5.1.0`で対応していることがわかりました。
なので、`5.1.0`までアップデートしておきました。

### そして、再アップロード...

それぞれの対応をした上で、再度アプリのアーカイブを App Store Connect にアップロードしてみると...
注意書きの入ったメールが届かなくなりました！🎉

# 最後に

これでまた当分はアップデートしなくても良くなるかなーと思いたいですが、
また今回のような困ったことが起きたら、頑張ろうと思います😇

長文になってしまいましたが、最後まで読んでいただき、ありがとうございました！

# 参考リンク一覧

- [app-ads.txtとは何? | CCI TECH BLOG](https://tech-cci.io/archives/2150)
- [「App Store」、全ての新規アプリと更新でプライバシーポリシーが必須に - CNET Japan](https://japan.cnet.com/article/35125024/)
- [Dropboxでホームページのホスティングをする方法｜ferret](https://ferret-plus.com/9755)
- [ITMS-90809: Deprecated API Usage (UIWebView APIを使用したアプリアップデート) 対策でGoogle-Mobile-Ads-SDKを更新](https://doroidpanic.com/itms-90809-deprecated-api-usage-uiwebview-api%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%82%A2%E3%83%97%E3%83%AA%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88-%E5%AF%BE%E7%AD%96/)
- [Google Admob Mobile Ads SDK(iOS) Release Notes](https://developers.google.com/admob/ios/rel-notes)
- [ITMS-90809: Deprecated API Usage - UIWebView · Issue #2055 · ReactiveX/RxSwift](https://github.com/ReactiveX/RxSwift/issues/2055)