iOS 14 使用 Facebook SDK 获得用户同意

iOS 14 get user consent with Facebook SDK

我对 iOS 开发并不陌生,但这是我第一次使用 Facebook SDK。我一直在按照 FB 指南在我的应用程序中设置事件(安装 SDK Swift 包,将 FBSDKCoreKit 方法添加到 AppDelegate),直到最后一条关于使用 iOS 14 获得用户同意的说明。

Facebook 指南提供了此代码片段,供在获得 requestTrackingAuthorization() 同意时使用:

FBAdSettings.setAdvertiserTrackingEnabled(true)

问题是 FBAdSettings class 在我的代码中似乎无效(Xcode 抱怨它无法在范围内找到),尽管我做到了 import FBSDKCoreKit 并且没有其他 FB 模块可以导入。

这是我的完整代码:

import UIKit
import AppTrackingTransparency
import FBSDKCoreKit

extension ViewController {
    func requestTrackingPermission() {
        if #available(iOS 14, *) {
            ATTrackingManager.requestTrackingAuthorization { (status) in
                switch status {
                    case .authorized:
                        FBAdSettings.setAdvertiserTrackingEnabled(true)  //Cannot find 'FBAdSettings' in scope
                    ...
                }
            }
        } else {
            // Fallback on earlier versions
        }
    }
}

我在这里错过了什么?

该文档至少具有误导性。您必须导入 FBSDKCoreKit.FBSDKSettings 并且代码段是 Settings.setAdvertiserTrackingEnabled(true)。如您所见,它不是 FBAdSettings 而只是 Settings.

FBAdSettings在FBAudienceNetwork SDK中,与Facebook SDK不同。因此,您需要安装 FBAudienceNetwork SDK(https://developers.facebook.com/docs/audience-network/guides/adding-sdk/ios) 并改为导入 FBAdSettings。

我发现如果您只想记录事件,您甚至不需要方法 Settings.setAdvertiserTrackingEnabled(true)

因此您可以将其从授权请求中删除,实际上该请求足以激活事件记录。

您可以使用 Facebook's Event Manager 测试您记录的事件来验证它。

您必须导入 FBAudienceNetwork 库

在Objective-C

#include <FBAudienceNetwork/FBAdSettings.h>

在Swift

import FBAudienceNetwork

正确的解决方案是使用 iOS Audience Network SDK >6.0

并做:

 import FBAudienceNetwork

它会起作用。

你需要 Facebook audienceNetwork library.

Facebook 在更新其开发文档方面做得非常糟糕。

我的解决方案使用 Objective C:

在 Podfile 中(位于 ios/ 下)

target 'my_app' do:
     pod 'FBAudienceNetwork'
     pod 'FBSDKCoreKit'
   ... other code ...

在AppDelegate.m中:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#include <FBAudienceNetwork/FBAdSettings.h>


- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
       [FBAdSettings setAdvertiserTrackingEnabled:YES];
... other code ...
}

运行 rm -rf Pods 您的 pods 目录所在的位置。 运行pod install

最终安装了这些版本以防万一:

  • FBSDKCoreKit (12.2.1)
  • FBAudienceNetwork (6.9.0)

一个小技巧

如果您有一个名为 "Settings" 的函数,它会在 "Settings" 函数内部的方法中调用“setAdvertiserTrackingEnabled”你为另一份工作写信并给出错误。

您可以更改“设置”功能名称或使用"FBSDKCoreKit.Settings"。这样你就可以调用“setAdvertiserTrackingEnabled”。