Приложение отклонено из-за рекламыIdentifier в Facebook SDK и Flurry SDK

Мое приложение было отклонено из-за advertisingIdentifier в Facebook sdk и Flurry SDK! Я обнаружил появление advertisingIdentifier в последних Facebook SDK (3.12) и Flurry SDK. Возможно, вы можете проверить свою библиотеку на наличие с помощью метода ниже:

Я открыл FacebookSDK.framework как библиотеку в терминале и набрал следующую команду

otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier

и тем же способом для Flurry SDK.

Но я не знаю, что делать.

В новостях: Flurry недавно обновил свой SDK, который не содержит "advertIdentifier", но Facebook еще нет.

Ответ 1

Получите исходный код https://github.com/facebook/facebook-ios-sdk вместо скомпилированной фреймворка. Просто удалите фреймворк и вставьте его в исходный код.

Перейдите в FBUtility.m и измените этот метод:

+ (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;
}

to

+ (NSString *)advertiserID {
   return @"";
}

Ответ 2

Update:

После ответа ниже я отправил приложение в магазин, но с приведенными ниже изменениями Facebook может отслеживать события без отслеживания атрибутов установки. Таким образом, проблема с нижеприведенным решением заключается в том, что он фактически запрещает Facebook связывать установки с рекламными кампаниями на facebook.

Исправить это следует, используя последний 3.13 Facebook SDK и просто удалить

-weak_framework AdSupport 

из вашего проекта, как предложено ниже.

Приложение теперь правильно компилируется без редактирования FBUtil.m, и он не связывает структуру AdSupport, которая удаляется из Pods.xconfig и Pods-Facebook-iOS-SDK.xconfig

Я оставил ниже ответ, чтобы вы могли увидеть мою предыдущую попытку удалить AdSupport из версии SDK версии 3.12, но НЕ ИСПОЛЬЗУЙТЕ ЭТО, если вы хотите установить отслеживание атрибуции объявлений. (Фактически вы можете использовать его только в том случае, если вы планируете рекламировать CPC, иначе facebook не сможет оптимизировать рекламные кампании по установке).

OLD REPLY:

В моем случае этого было недостаточно. Конечно, я хотел полностью удалить AdSupport Framework. В Facebook SDK 3.12 AdSupport Framework, кажется, ВСЕГДА импортирована/связана, даже если она не включена в ваш проект или файл подкачки (на самом деле я использую cocoapods для установки Facebook SDK).

Структура AdSupport действительно не была связана в моем проекте, но выполнение "otool -L" в моем исполняемом приложении показало, что структура все еще связана.

Чтобы избежать выполнения текущего FB SDK, вам необходимо отредактировать следующее:

В FBUtility.m

Комментарий:

//#import <AdSupport/AdSupport.h>

Измените следующие методы:

+ (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;
    */
    return @"";
}

+ (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 AdvertisingTrackingDisallowed;
}

Наконец, если вы используете поиск cocoapods в рабочей области проекта, все

-weak_framework AdSupport

И удалите все из них (вы найдете их в Pods.xconfig и Pods-Facebook-iOS-SDK.xcconfig)

Это сработало для меня, и теперь мой исполняемый файл приложения свободен от AdSupport.

Ответ 4

Вы должны удалить Facebook-SDK как версию пакета в папке проекта, а затем создать cocoapods и подключить последнюю версию этих файлов;

 pod 'FBSDKCoreKit'
 pod 'FBSDKShareKit'
 pod 'FBSDKLoginKit'