【问题标题】:app rejected because of advertisingIdentifier in Facebook SDK and Flurry SDK应用因 Facebook SDK 和 Flurry SDK 中的广告标识符而被拒绝
【发布时间】:2014-03-01 17:34:36
【问题描述】:

我的应用因 Facebook sdk 和 Flurry SDK 中的advertisingIdentifier 而被拒绝!我在最新的 Facebook SDK (3.12) 和 Flurry SDK 中发现了 advertisingIdentifier 的出现。也许您可以使用以下方法检查您的图书馆是否发生:

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

otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier

Flurry SDK 也是如此。

但我不知道该怎么办。?

新闻:Flurry 最近更新了他们的 SDK,其中不包含“advertisingIdentifier”,但 Facebook 还没有。

【问题讨论】:

  • 广告标识符不是您应该使用的访问器吗(假设 iOS6 +)?
  • 最近广告标识符的使用已被禁止,如果您实际上没有展示广告(而只是将其用于跟踪)。
  • 但在我的应用中我不想使用任何广告!
  • 新闻:Flurry 更新了他们的 SDK,不包含“advertisingIdentifier”

标签: ios iphone objective-c facebook


【解决方案1】:

更新:

自从在下面回答后,我已将应用程序提交给商店,但根据下面建议的编辑,Facebook 只能跟踪事件而不进行安装归因跟踪。 因此,以下解决方案的问题在于它有效地禁止 Facebook 将安装链接到 facebook 上的广告活动。

解决此问题的方法是使用最新的 3.13 Facebook SDK 并简单地删除

-weak_framework AdSupport 

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

该应用现在无需编辑 FBUtil.m 即可正确编译,并且不链接 AdSupport 框架已从 Pods.xconfig 和 Pods-Facebook-iOS-SDK.xconfig 中删除

我在下面留下了回复,以便您可以看到我之前尝试从 3.12 版本的 SDK 中删除 AdSupport,但如果您想进行安装广告归因跟踪,请不要使用它。 (事实上​​,只有当你打算做 CPC 广告时才可以使用它,否则 facebook 将无法优化安装广告活动)。

旧回复:

这对我来说似乎还不够。 可以肯定的是,我想完全删除 AdSupport 框架。 在 Facebook SDK 3.12 中,AdSupport Framework 似乎总是被导入/链接,即使它没有包含在您的项目或 pod 文件中(实际上我正在使用 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 广告支持

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

这对我有用,现在我的应用程序可执行文件不受 AdSupport 的约束。

【讨论】:

  • "-weak_framework AdSupport" 将在您下次运行 pod update 时返回。我在构建阶段添加了以下脚本以自动修复它: sed -i bak "s/ -weak_framework AdSupport//" Pods/*.xcconfig 虽然它不适用于 pod 更新后的第一个构建,所以不要存档pod 更新后立即进行。
  • 我尝试使用此处提供的 FB SDK github.com/facebook/facebook-ios-sdk。不幸的是,代码似乎不是基于 ARC 的,它会抛出保留、释放错误。我可以使用任何其他代码库或如何解决这个问题?谢谢!
  • 我为修复 pod 更新创建了最新版本的命令:find Pods/. -name "*.xcconfig" -type f -print0 | xargs -0 sed -i '' -e "s/-framework\ \"AdSupport\"//" -e "s/-framework\ \"iAd\"//g"
【解决方案2】:

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

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

【讨论】:

  • 这是否意味着每个嵌入facebook sdk 3.12的应用都会因为这段代码而被拒绝?
  • 这真的取决于苹果的审查团队。他们确实不时会错过一些事情,但简短的回答可能是肯定的。如果你展示广告 - 不过,你会没事的。
  • 所以 Facebook 及其 sdk 假设每个人都想展示广告?我觉得很奇怪。
  • 不,它没有。仅当“设置”中的设置不限制其使用时,它才会使用广告商标识符,即使这样,它也会出于我认为的正当理由(如安装跟踪)而使用它。这里的问题是,Apple 希望此标识符仅用于广告目的,如果您的应用中没有广告,则意味着您没有将其用于预期目的,因此您的应用会被拒绝。跨度>
  • 是的,没错。尽管它违反了 Appstore 规则,但该规则直到一周前才强制执行,因此从 Facebook(以及许多其他 SDK 提供商)的角度来看,使用它是完全可以的。不过,我确实希望他们很快更新他们的代码。
【解决方案3】:

请阅读:

https://developers.facebook.com/bugs/242477629268301/

无需更改代码。

【讨论】:

【解决方案4】:

您必须在项目文件夹中将 Facebook-SDK 作为捆绑版本删除,然后创建一个 cocoapods 并连接它们的最新版本;

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

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 2014-10-13
    • 2014-11-08
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多