ExpoアプリにTracking Transparency を実装する


Expo のSDK 42が7月の初めに公開されました。じゃあ、ひとまずバージョン上げとくかと思って、SDKをバージョンアップしただけのものをApp Storeの審査に出したところ、リジェクトされました。

あれ???と思って、理由を見たら App Tracking Transparencyを実装せよとのこと。iOS14.5以降では、アプリでトラッキングをするときにはユーザーの同意が必要とのことでした。確かに、最近いろんなアプリで同意画面を見たなあとは思ってました。

しかし、Expoはさすがというかもう用意されていました。TrackingTransparencyというのを使うだけですね。はい、expoコマンドでインストール。

$ expo install expo-tracking-transparency

実装もサンプルコードそのままインポート。

import { requestTrackingPermissionsAsync } from 'expo-tracking-transparency';

自分のアプリの場合はFirebaseAnalyticsを入れていたので、いったんこれを停止。

Analytics.setAnalyticsCollectionEnabled(false);

その上で、ユーザーの許可をもらえたら、再度有効にするとしました。

useEffect(() => {
    (async () => {
      const { status } = await requestTrackingPermissionsAsync();
      if (status === 'granted') {
        Analytics.setAnalyticsCollectionEnabled(true);
      }
    })();
  }, []);

Expoの公式ドキュメントにイマイチ書いてないような気がしますが、app.jsonのios>infoPlist>NSUserTrackingUsageDescriptionを追加すると自分の設定したメッセージが出せるようです。

"ios": {
    "infoPlist": {
        "NSUserTrackingUsageDescription": "We use Tracking to fix bugs and improve your experience."
},

これでアプリをビルドして、再提出したところ無事審査が通りました。リジェクトはほとんど食らう余地のない小さなアプリなのですが、この対応面倒そうなと思った割にはそうでもなかったです。