iOS 14通过Facebook SDK获得用户同意

polhcujo  于 2023-01-18  发布在  iOS
关注(0)|答案(9)|浏览(301)

我对iOS开发并不陌生,但这是我第一次使用Facebook SDK。我一直按照FB指南在我的应用中设置事件(安装SDK Swift包,在AppDelegate中添加FBSDKCoreKit方法),直到最后一次使用iOS 14获得用户同意的说明。
Facebook指南提供了以下代码片段,用于获取requestTrackingAuthorization()的同意:

FBAdSettings.setAdvertiserTrackingEnabled(true)

问题是FBAdSettings类在我的代码中似乎无效(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
        }
    }
}

我错过了什么?

aamkag61

aamkag611#

文档至少是误导性的。你必须导入FBSDKCoreKit.FBSDKSettings,代码片段是Settings.setAdvertiserTrackingEnabled(true)。正如你所看到的,它不是FBAdSettings,而只是Settings

qltillow

qltillow2#

正确解决方案是使用iOS受众网络SDK〉6.0
并做到:

import FBAudienceNetwork

它会起作用。

8hhllhi2

8hhllhi23#

您必须导入FBAudienceNetwork库
在Objective-C中

#include <FBAudienceNetwork/FBAdSettings.h>

在斯威夫特

import FBAudienceNetwork
nhaq1z21

nhaq1z214#

我发现,如果只想记录事件**,甚至不需要Settings.setAdvertiserTrackingEnabled(true)**方法。
因此您可以将其从授权请求中删除,实际上该请求足以激活事件日志记录。
您可以通过使用Facebook's Event Manager测试记录的事件来验证它。

xurqigkl

xurqigkl5#

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

nwwlzxa7

nwwlzxa76#

你需要Facebook的观众网络库。
Facebook在更新开发文档方面做得相当糟糕。

q3qa4bjr

q3qa4bjr7#

我使用目标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 ...
}

在pod目录所在的位置运行rm -rf Pods
最后安装了这些版本,以防万一:

  • FBSDK核心套件(12.2.1)
  • FB受众网络(6.9.0)
lf3rwulv

lf3rwulv8#

一个小提示

如果您有一个名为**“Settings”的函数,它将调用您为其他作业编写的“Settings”函数内的方法中的“setAdvertiserTrackingEnabled”,并给出错误。
您可以
更改“设置”函数名或使用“FBSDKCoreKit.设置”**。这样您就可以调用“setAdvertiserTrackingEnabled”。

2hh7jdfx

2hh7jdfx9#

要手动更改跟踪,从版本13.0.0及更高版本开始,您需要在以前使用Settings的地方使用Settings.shared
变更日志:
已删除不推荐使用的设置. setAdvertiserTrackingEnabled(_:)(请改用设置. shared. isAdvertiserTrackingEnabled属性设置值")
如果您使用的是13.0.0及更高版本,请使用

Settings.shared.isAdvertiserTrackingEnabled = true

代替

Settings.isAdvertiserTrackingEnabled = true

请注意,在iOS 14.5之后,您需要首先向用户请求权限,示例如下:

func requestTracking(){
                     if #available(iOS 14, *) {
                         ATTrackingManager.requestTrackingAuthorization(completionHandler: { (status) in
                             switch status {
                             case .authorized:
                                 Settings.shared.isAutoLogAppEventsEnabled = true
                                 Settings.shared.isAdvertiserTrackingEnabled = true
                                 Settings.shared.isAdvertiserIDCollectionEnabled = true
                                 break
                             case .denied:
                                 Settings.shared.isAutoLogAppEventsEnabled = false
                                 Settings.shared.isAdvertiserTrackingEnabled = false
                                 Settings.shared.isAdvertiserIDCollectionEnabled = false
                                 break
                             default:
                                 break
                             }
                         })
                     } else {
                         Settings.shared.isAutoLogAppEventsEnabled = true
                         Settings.shared.isAdvertiserTrackingEnabled = true
                         Settings.shared.isAdvertiserIDCollectionEnabled = true
                     }

相关问题