Closed10

ATTが表示されないことを理由にiOSアプリが却下された件

enoiuenoiu

app_tracking_transparencyというパッケージでATTを表示するようにしていたのだが、12月にアプリを更新しようとしたところ、ATTの表示が確認できないということでiOSアプリが却下された。

Guideline 2.1 - Information Needed

We're looking forward to completing our review, but we need more information to continue. Your app uses the AppTrackingTransparency framework, but we are unable to locate the App Tracking Transparency permission request when reviewed on iOS 17.2.
App Reviewでのメッセージより

enoiuenoiu

この文章での却下は今までにもあり、どこにATT許可リクエストが表示されるかを「App Reviewに関する情報」のメモのところに書いて再提出すると審査が通ってきていた。
(メモだけでだめな場合は、動画も添付すると審査が通ったこともあった)。

ただ、今回はすでにそうした手順を踏んだアプリであったため、すでに上記のメモや動画を添付していた。

もしかしたら、App ReviewでのメッセージにあるiOS 17.2では表示されてないのかな?と思い、iOS 17.2でのSimulatorでATT表示を確認することに。
しかし、ATTダイアログは表示された。

https://twitter.com/enoiu2020/status/1747135224973300140

enoiuenoiu

一旦、このSimulatorでATTダイアログ表示される動画を、App Reviewでのメッセージの返信に添付することに。

しかし、App Reviewからは最初と同じメッセージが返ってきた。。

enoiuenoiu

すると、今回は文章が異なる返信が返ってきた。
ただ、内容自体は、ドキュメントを参照して正しく実装してくださいとのこと。

そこで、app_tracking_transparencyのissuesを見てみると、以下のissueがあった。

https://github.com/deniza/app_tracking_transparency/issues/47

この方の場合は、ATTの表示前にdelayed処理を入れて解決したらしい。

ただ個人的にこれって根本的な解決なのか?っていう感想があり、特に急ぎの更新でもなかったため一旦この問題から手を引くことに。

enoiuenoiu

そうこうしているうちに、AdMobのGDPR対応の期限が来ていた。
一応自動でGDPRメッセージが表示されるようになるらしいが(インタースティシャル広告やアプリ起動時広告表示時に?)、自分でGDPRの設定をしたほうがアプリアイコンが表示されたりちゃんとアプリ起動時にGDPRメッセージを表示できたりするらしい。

ということで、FlutterでのGDPRメッセージの実装方法を調べると、GDPRメッセージを表示するフローの一部として、追加のAPIの呼び出しなくATTダイアログを表示することができるとのこと。

https://developers.google.com/admob/flutter/eu-consent?hl=ja

そこで、app_tracking_transparencyの使用をやめて、上記リンクの方法でATTも表示することに。

enoiuenoiu

手順(すでにapp_tracking_transparencyでATTの実装をしていた前提、詳細は上のリンクを参照)

  • AdMob管理画面の「プライバシーとメッセージ」のところから「欧州の規制」と「IDFA説明メッセージ」それぞれでメッセージを作成し公開
  • app_tracking_transparencyとそれ関連のコードを削除
  • Xcodeでプロジェクトを開き、Generalタブ内のFrameworksでAppTrackingTreansparency.frameworkを追加
  • 下記コードを追加し、ATTを表示させていたところにgdpr()を追加
  void loadForm() {
    ConsentForm.loadConsentForm(
      (ConsentForm consentForm) async {
        var status = await ConsentInformation.instance.getConsentStatus();
        if (status == ConsentStatus.required) {
          consentForm.show(
            (FormError? formError) {
              // Handle dismissal by reloading form
              loadForm();
            },
          );
        }
      },
      (FormError formError) {
        // Handle the error
      },
    );
  }

  Future<void> gdpr() async {
    //TODO: for debug
    /* ConsentInformation.instance.reset();
    ConsentDebugSettings debugSettings = ConsentDebugSettings(
      debugGeography: DebugGeography.debugGeographyEea,
      //testIdentifiers: [],
    );
    final ConsentRequestParameters params = ConsentRequestParameters(
      consentDebugSettings: debugSettings,
    ); */
    //for debug end

    final ConsentRequestParameters params = ConsentRequestParameters();

    ConsentInformation.instance.requestConsentInfoUpdate(
      params,
      () async {
        if (await ConsentInformation.instance.isConsentFormAvailable()) {
          loadForm();
        }
      },
      (FormError error) {
        // Handle the error
      },
    );
  }
enoiuenoiu

注意点

  • SimulatorなどでGDPR表示を確認するには、//for debugのところのコメントアウトを外し、下の競合するparams変数の行をコメントアウトする。なお、Android Emulatorで表示を確認する場合は、testIdentifiersにテストデバイスIDを指定する必要があるらしい(情報元)(私はテストデバイスIDの指定方法がよくわからなくなったのでAndroid Emulatorでの表示確認は見送りました;;)。
  • AdMob管理画面でのメッセージ作成のところで、アプリを追加することを忘れないように
  • 表示されるメッセージを多言語対応にするには、メッセージ作成ページの「デフォルトの言語」の下にある「別の言語」で対応したい言語にチェックする
  • GDPRメッセージが表示されるか否かで、ATTメッセージの表示形式が変化する。GDPRメッセージが表示されない場合は、AdMob管理画面で設定したIDFA説明メッセージが表示された後にATTダイアログが表示される。GDPRメッセージが表示される場合は、GDPRの同意ボタンを押すと、IDFA説明メッセージが表示されずにATTダイアログが表示される。(※ここでいうATTダイアログとは、Info.plistNSUserTrackingUsageDescriptionで設定した文が表示されるダイアログのこと)
enoiuenoiu

これでApp Store Connectから審査に提出したところ、何事もなかったかのように審査に通過した。

このスクラップは3ヶ月前にクローズされました