FlutterでAppTrackingTransparencyを導入しよう!
2023-11-28
azblob://2023/11/28/eyecatch/2023-11-28-app-tracking-transparency-flutter-000.jpg

AppTrackingTransparency とは?

アプリ内で収集される個人情報の収集や利用をユーザーに求める仕組みとなっており、

  • Firebase Analytics
  • Firebase Crashlytics
  • Google AdMob

などのサービスを使用する場合はAppTrackingTransparencyが必須の設定になります。

Flutterでの設定方法

app_tracking_transparency を使うことにより、簡単に設定することができます。

info.plistの設定

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

info.plist に上記の設定を追加します。 因みに、NSUserTrackingUsageDescription は、ユーザーに表示されるメッセージの内容を設定することができ、上記の例では、ユーザーに表示されるメッセージは、This identifier will be used to deliver personalized ads to you. となります。

サンプルコード

サンプルコード全体はパッケージ側の exampleに全て書いているため、ここでは、必要な部分のみを抜粋して記載します。

Widgetのビルド後に実行する

WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((_) => initPlugin());

こちらのコードは、Widgetの描画後に特定の処理(initPlugin())がコールバックされるように設定しています。細かく説明すると

  • WidgetsFlutterBinding.ensureInitialized(): FlutterのWidgetの描画を行う前に、必要な初期化処理を行うためのメソッド
  • addPostFrameCallback((_) {}): Widgetの描画後にコールバックをスケジューリングするためのメソッド

を使うことにより、簡単に設定することができます。また、build method内でinitPlugin()を呼び出すと意図しないタイミングで呼び出される可能性があるため、initState()で呼び出しています。

TrackingStatus

AppTrackingTransparencyフレームワーク内での状態を表す列挙型

  • notDetermined: 許可/拒否していない状態。また、初期値として設定されている。
  • restricted: 制限している状態
  • denied: 拒否している状態
  • authorized: 許可している状態
  • notSupported: 端末がiOS以外のプラットフォーム or version 14.0 未満

許諾状況取得&許諾表示

// 許諾状況取得
await AppTrackingTransparency.trackingAuthorizationStatus;

// 許諾表示
await AppTrackingTransparency.requestTrackingAuthorization();

trackingAuthorizationStatus methodTrackingStatusを取得し、requestTrackingAuthorization methodで許諾表示をします。またrequestTrackingAuthorization methodは2回目以降は使用許諾が表示されず、TrackingStatusの状況を取得しかしません。

許諾表示の注意点

AppTrackingTransparency の使用許諾はSwift側(requestTrackingAuthorization method))の仕様上

  • 初回実行のみ許諾のリクエストが実施され、2回目以降は実行しない
  • 他の使用許諾(Push通知や画像ライブラリへの権限など)と重複した場合、処理は保留されずスキップされる

という制限があり、注意が必要です。 そのため、AppTrackingTransparency の許諾を表示する時は

  • なぜアプリが許可をリクエストしているのか説明する画面を表示後、リクエストする(Appleが推奨している方法)
  • アプリの使用許諾を表示

など起動直後にクエストせず、ユーザーが特定の操作を実施後にリクエストするようにしてください。 (exampleではshowCustomTrackingDialog methodを呼び出し、ユーザーの操作を待機しています。)

まとめ

本記事を通して、AppTrackingTransparency の導入方法と注意点について理解を深めることができたことを願っています。 またFlutterはホットリロードや充実した公式ドキュメント、優秀なコンパイラなどにより、開発体験が良好で、パッケージも豊富です。しかし、ネイティブ側のライブラリをラップしていることが多く、KotlinやSwiftのドキュメントを読むことで開発がさらに楽になるという点を理解することは重要です。本記事がその一例として役立つことを願っています。

以上、メンブレ時ははる陽。meltを聞き、勇気と元気を貰う西村でした。