Calvert's murmur

修正 FacebookSDK 使用 Advertising Identifier(IDFA) 造成的 App 退審

2014-08-23

約 2508 字 / 需 13 分鐘閱讀

這次 App 送審被 Apple 以違反 PLA 3.3.12 而退審,內容大致上是說 Advertising Identifier(IDFA) 僅可基於廣告目的使用於應用程式內,但審核團隊沒發現需用 IDFA 來呈現廣告的地方。

因送審的 App 內僅使用 iAd,而 iAd 是不需 AdSupport framework、ASIdentifierManager 或 Advertising Identifier 的,所以唯一的可能性就是第三方 Framework 使用了 IDFA。

Apple 在退審原因內提示可透過 stringsotool 指令來幫忙找出問題點,最終揪出兇手就是 FacebookSDK,在 FBUtility.m 引入了 AdSupport 並使用 advertisingIdentifier

暫時的解決方法如下:

  1. git clone FacebookSDK 到本機

  2. 開啟 src/Core/FBUtility.m,將此行註解

    //#import <AdSupport/AdSupport.h>
  3. + (NSString *)advertiserID {
        NSString *advertiserID = nil;
        Class ASIdentifierManagerClass = [FBDynamicFrameworkLoader loadClass:@"ASIdentifierManager"     withFramework:@"AdSupport"];
        if ([ASIdentifierManagerClass class]) {
            ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager];
            advertiserID = [[manager advertisingIdentifier] UUIDString];
        }
        return advertiserID;
    }

    改為

    + (NSString *)advertiserID {
        return @"";
    }
  4. + (FBAdvertisingTrackingStatus)advertisingTrackingStatus {
        if ([FBSettings restrictedTreatment] == FBRestrictedTreatmentYES) {
            return AdvertisingTrackingDisallowed;
        }
        FBAdvertisingTrackingStatus status = AdvertisingTrackingUnspecified;
        Class ASIdentifierManagerClass = [FBDynamicFrameworkLoader loadClass:@"ASIdentifierManager" withFramework:@"AdSupport"];
        if ([ASIdentifierManagerClass class]) {
            ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager];
            if (manager) {
                status = [manager isAdvertisingTrackingEnabled] ? AdvertisingTrackingAllowed : AdvertisingTrackingDisallowed;
            }
        }
        return status;
    }

    改為

    + (FBAdvertisingTrackingStatus)advertisingTrackingStatus {
        return AdvertisingTrackingDisallowed;
    }
  5. 使用 scripts/build_framework.sh 重新打包 FacebookSDK。

  6. 返回原專案引用新打包的 FacebookSDK 重建 App 並送審。

註:若 App 內使用了 iAd 以外的廣告服務且廣告有正常顯示,應該不會因違反 PLA 3.3.12 而退審。

參考資料:

Tags: iOS