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