[Cordova] App 缺少 App Tracking Transparency,被 App Store 拒絕上架?

[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 才會通過囉~

 

參考資料:

(本頁面已被瀏覽過 9 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料