[Cordova] App 缺少 App Tracking Transparency,被 App Store 拒絕上架?
最近想發布 Cordova 寫的 iOS app 時,
突然被 App Store Connect 在審查時拒絕,
原來是 iOS 14.5 版之後,App 都得要使用 App Tracking Transparency,
來請求使用者給予權限,才能追蹤使用者:
但是我的 App 裡面,哪裡有用到什麼追蹤碼呢?
查了一下,因為 App 裡面有附 Google Admob 的廣告,
廣告自然就會追蹤使用者的行為,因此我的 App 也得負連帶責任…
那在 Cordova 裡面,要怎麼處理這個 App Tracking Transparency 呢?
查了一下,我們可以用 cordova-plugin-idfa 這個外掛來幫忙~
1. 安裝 cordova-plugin-idfa 外掛
執行下面指令安裝外掛:
cordova plugin add cordova-plugin-idfa
2. 編輯 config.xml
打開 Cordova 專案目錄下的 config.xml,
在 <platform name="ios">
區塊裡面,
增加一個 NSUserTrackingUsageDescription
的項目,例如:
<platform name="ios"> <edit-config target="NSUserTrackingUsageDescription" file="*-Info.plist" mode="merge"> <string>此追蹤碼將會被用來傳送個人化的廣告給您。</string> </edit-config> </platform>
3. 呼叫 idfa 外掛提示使用者
在程式開始要產生廣告 (也就是開始會追蹤使用者) 時,
要呼叫 idfa 外掛來提示使用者給予權限,
下面的程式是 cordova-plugin-idfa 官網給的範例:
const idfaPlugin = cordova.plugins.idfa; idfaPlugin.getInfo() .then(info => { if (!info.trackingLimited) { return info.idfa || info.aaid; } else if (info.trackingPermission === idfaPlugin.TRACKING_PERMISSION_NOT_DETERMINED) { return idfaPlugin.requestPermission().then(result => { if (result === idfaPlugin.TRACKING_PERMISSION_AUTHORIZED) { return idfaPlugin.getInfo().then(info => { return info.idfa || info.aaid; }); } }); } }) .then(idfaOrAaid => { if (idfaOrAaid) { console.log(idfaOrAaid); } });
4. 編譯 Cordova iOS App
跟平常一樣,執行下面指令來編譯 Cordova iOS App:
cordova prepare ios cordova compile --release ios
5. 執行 App
下面是 App 在 iOS 模擬器中執行的結果。
當 idfa 外掛被呼叫後,App 就彈出了一個提示訊息來告知使用者,
這個 App 會追蹤使用者的行為:
但是,上面的訊息裡面,
並沒有我們列在 config.xml 中 NSUserTrackingUsageDescription
的字串
「此追蹤碼將會被用來傳送個人化的廣告給您。」
這是怎麼一回事呢?
如果將這樣的 App 提交給 Apple 的話,一樣會被打槍,
只要沒有說明追蹤使用者的原因的話,就沒辦法通過…
檢查一下 platforms/ios/<project>/<project>-Info.plist 檔案,
發現 NSUserTrackingUsageDescription
沒有像 config.xml 一樣被加進去…
就算重新跑一次 cordova prepare ios
和 cordova compile
也沒有用…
研究了半天,如果這種情況發生的話,
似乎只能將 iOS 平台移除再重新加入,
這樣 platforms/ios/<project>/<project>-Info.plist 檔案才會有 config.xml 下的資料:
cordova platform rm ios cordova platform add ios
確認 <project>-Info.plist 裡面也有正確的字串後,
再重新編譯一次 App 並執行,
這時我們自訂的訊息就會出現在畫面上了:
這樣的 App 提交給 App Store 才會通過囉~
參考資料:
- 保護使用者隱私的 App Tracking Transparency
- Implement App Tracking Transparency for Ionic 4 Angular and Cordova based iOS app
- Implement App Tracking Transparency for Ionic Angular and Cordova iOS app
- Implement App Tracking Transparency for Ionic 4 Angular and Cordova based iOS app