gpt4 book ai didi

ios - 如何以编程方式禁用 Facebook 无代码事件?

转载 作者:IT王子 更新时间:2023-10-29 05:51:15 24 4
gpt4 key购买 nike

问题

几个月来我们一直有一个运行良好的在线应用程序,然后突然这段代码崩溃了:

ViewController.swift

self.tableView.delegate = self.viewModel.tableViewHandler

使用了这段代码

损坏的代码

component.swift

public override weak var delegate: UITableViewDelegate? {
get { return super.delegate }
set {
if let del = newValue as? TableViewDelegateProxy {
super.delegate = del
} else if let del = super.delegate as? TableViewDelegateProxy {
del.targetDelegate = newValue
} else {
super.delegate = newValue
}
}
}

我们不知道为什么,但我们用这段代码修复了它:

固定代码

ViewController.swift

self.tableView.fixedDelegate = self.viewModel.tableViewHandler

component.swift

// IMPORTANT NOTE: That is the correct way to set a delegate,
// otherwise overriding `delegate` property fails
public var fixedDelegate: UITableViewDelegate? {
get { return self.delegate }
set {
self.delegateProxy.targetDelegate = newValue
self.delegate = self.delegateProxy
}
}

最初我们认为这是后端的问题(格式错误的 JSON 或类似的东西),但后来我们意识到以下几点:

  • 损坏的代码 在使用调试配置 编译时有效,但在使用发布配置
  • 时损坏
  • 固定代码 在使用调试配置 编译时有效,在使用发布配置
  • 时也有效

我们回溯了 Git 历史中的许多版本,并且始终如此,这让我们相信我们的 Xcode 或 Objc/Swift 运行时库可能发生了一些变化,导致了这种怪异。

问题

我们的 Xcode IDE 可以改变什么来解释这一点?它可能是远程或在幕后发生变化的东西吗?我们如何进一步调试它?

引用资料

1)Xcode版本:10.1版(10B61)
2) Swift版本:

xcrun swift -version
Apple Swift version 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1)
Target: x86_64-apple-darwin18.2.0

3) obj-c 库:

 otool -L /usr/lib/libobjc.A.dylib
/usr/lib/libobjc.A.dylib:
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 400.17.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)

更新

先看这个answer , 我们需要关闭 this以编程方式标记

_serverConfiguration.isCodelessEventsEnabled

不确定如何从 sdk(Android 或 iOS)

我们尝试过的

1) 我们无法通过 FB SDK 找到任何方法,例如这个:https://developers.facebook.com/docs/reference/androidsdk/current/facebook/com/facebook/facebooksdk.html/

2) 我们尝试对通过 curl 联系 FB API 进行逆向工程,它适用于电子邮件等场景:

curl --header "Content-Type: application/json" \
--request POST \
--data '{"app_events_feature_bitmask":0}' \
"https://graph.facebook.com/***?access_token=<app_secret>"

它返回了这个

{"success":true}

但应用事件功能没有任何变化:

curl -i -X GET "https://graph.facebook.com/***?fields=app_events_feature_bitmask&access_token=<app_secret>"

它返回旧值:

{"app_events_feature_bitmask":37,"id":"***"}

3) ask FB tech support

最佳答案

如果我们注释掉 this code,结果证明这是一些 facebook 远程配置的东西:

  //  UITableView
void (^tableViewBlock)(UITableView *tableView,
SEL cmd,
id<UITableViewDelegate> delegate) =
^(UITableView *tableView, SEL cmd, id<UITableViewDelegate> delegate) {
if (!delegate) {
return;
}

[self matchView:tableView delegate:delegate];
};
[FBSDKSwizzler swizzleSelector:@selector(setDelegate:)
onClass:[UITableView class]
withBlock:tableViewBlock
named:@"match_table_view"];

它工作得很好。一旦此标志为 turned on,此功能似乎就会打开:

#if !TARGET_OS_TV
- (void)enableCodelessEvents {
if (_serverConfiguration.isCodelessEventsEnabled) { <-----
if (!_eventBindingManager) {
_eventBindingManager = [[FBSDKEventBindingManager alloc] init];
}

if ([FBSDKInternalUtility isUnity]) {
[FBSDKAppEvents sendEventBindingsToUnity];
} else {
[_eventBindingManager updateBindings:[FBSDKEventBindingManager
parseArray:_serverConfiguration.eventBindings]];
}
}
}
#endif

问题是:是什么打开了这个标志? (即来自一些 fb 远程配置)

_serverConfiguration.isCodelessEventsEnabled

这就是我们想知道的

更新:简短回答:你不能(以编程方式,通过仪表板,甚至通过自己联系 fb 支持)

Facebook 技术支持回复我,用简单的英语说明这个选项根本不可能:

enter image description here

长话短说:通过安装 FB App Events SDK您将自动打开启用无代码事件的 FB 远程配置,并且无法将其关闭。

结论

我们能够重现该问题(具体来说,通过在 facebook 管理员上执行几个步骤来打开 fb 远程事件标志)

首先运行一个示例应用程序并测试标志是否打开/关闭:

enter image description here

转到事件管理器并单击 + 添加新数据源 > 应用事件

enter image description here

enter image description here

enter image description here

当你点击那个按钮时你会看到这个

enter image description here

那是旗帜打开的时候!

关于ios - 如何以编程方式禁用 Facebook 无代码事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com