应用程序因Facebook SDK和Flurry SDK中的advertisingIdentifier而被拒绝

cha*_*wki 23 iphone facebook objective-c ios

我的应用程序因advertisingIdentifierFacebook sdk和Flurry SDK 被拒绝了!我advertisingIdentifier在最新的Facebook SDK (3.12)Flurry SDK中发现了一个问题.也许您可以使用以下方法检查您的图书馆是否出现:

我打开了FacebookSDK.framework作为终端中的库并输入以下命令

otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier
Run Code Online (Sandbox Code Playgroud)

和Flurry SDK一样.

但我不知道该怎么做.

对于新闻:Flurry最近更新了他们的SDK,其中不包含"advertisingIdentifier",但Facebook还没有.

Die*_*ego 17

更新:

由于我在下面回答,我已将该应用程序提交到商店,但通过下面建议的编辑,Facebook只能跟踪事件而无需进行安装归因跟踪.因此,下面的解决方案的问题是它有效地禁止Facebook将安装链接到Facebook上的广告活动.

对此的修复应该是使用最新的3.13 Facebook SDK并简单地删除

-weak_framework AdSupport 
Run Code Online (Sandbox Code Playgroud)

来自您的项目,如下所示.

该应用程序现在正确编译而无需编辑FBUtil.m,它没有链接AdSupport框架从Pods.xconfig和Pods-Facebook-iOS-SDK.xconfig中删除

我在下面留下了回复,以便您可以看到我之前尝试从SDK的3.12版本中删除AdSupport,但如果您想要安装广告归因跟踪,请不要使用它.(事实上​​,只有在您计划进行每次点击费用广告时才能使用它,否则Facebook将无法优化安装广告系列).

旧的回复:

在我看来,这似乎还不够.当然,我想完全删除AdSupport Framework.在Facebook SDK 3.12中,AdSupport Framework似乎总是导入/链接,即使它没有包含在您的项目或pod文件中(实际上我使用cocoapods来安装Facebook SDK).

AdSupport框架确实没有在我的项目中链接,但在我的应用程序可执行文件上执行"otool -L"表明框架仍然被链接.

为了避免当前的FB SDK执行此操作,您需要编辑以下内容:

在FBUtility.m

评论这个:

//#import <AdSupport/AdSupport.h>
Run Code Online (Sandbox Code Playgroud)

编辑以下方法:

+ (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;
}
Run Code Online (Sandbox Code Playgroud)

最后,如果您在项目工作区中使用cocoapods搜索全部

-weak_framework AdSupport

并删除所有这些(你会在Pods.xconfig和Pods-Facebook-iOS-SDK.xcconfig中找到它们)

这对我有用,现在我的app可执行文件免费提供给AdSupport.

  • "-weak_framework AdSupport"将在您下次运行pod更新时返回.我添加了以下脚本来构建阶段以自动修复它:sed -i bak"s/-weak_framework AdSupport //"Pods/*.xcconfig它不适用于pod更新后的第一次构建,所以不要归档pod更新后立即. (4认同)

And*_*rew 12

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;
}
Run Code Online (Sandbox Code Playgroud)

+ (NSString *)advertiserID {
   return @"";
}
Run Code Online (Sandbox Code Playgroud)

  • 是啊,没错.虽然它违反了Appstore规则,但这条规则直到一周前才得到执行,所以从Facebook的角度来看(以及许多其他SDK提供商),使用它是完全没问题的.我确实希望他们能尽快更新他们的代码. (2认同)