Facebook iOS SDK自动调用Graph API触发应用级速率限制问询
问题背景
在排查某iOS应用反复触发Graph API应用级速率限制(错误码#4)时,发现Facebook iOS SDK 18.x及旧版本会自动发起大量未手动调用的Graph API请求。该应用仅用SDK实现App Events功能,未集成Facebook Login,初始化代码如下:
ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) Settings.shared.graphAPIVersion = "v21.0"
速率限制响应显示请求量超标(total_cputime为0%,仅因请求数量过多):
HTTP/2 403 x-app-usage: {"call_count":9542,"total_cputime":0,"total_time":490} (#4) Application request limit reached
速率限制控制台显示24小时内Top请求端点均为SDK自动调用:
| Endpoint | Calls / 24h |
|---|---|
gr:get:Application | ~173,000 |
gr:get:Application/ios_skadnetwork_conversion_config | ~143,000 |
gr:get:Application/model_asset | ~34,000 |
每次应用启动时,设备日志都会多次出现以下提示:
FBSDKLog: starting with Graph API v2.4, GET requests for /<APP_ID>/model_asset should contain an explicit "fields" parameter
SDK发起的GET /<app-id>/model_asset和GET /<app-id>/ios_skadnetwork_conversion_config请求未携带fields参数,且未缓存响应而是重复发起请求(该现象与已知SDK问题表现一致)。
已尝试的无效操作
- 后台设置:关闭"Automatic event logging",设置"Log in-app events automatically"为"否"
- 禁用Automatic Advanced Matching
- 设置
Settings.shared.graphAPIVersion = "v21.0"(请求确实使用v21.0版本,但请求数量未减少)
对比同代码库的Android应用(使用react-native-fbsdk-next)无此问题,Android端的ModelManager.kt会主动传递fields参数。
问题
- 仅集成App Events的情况下,该请求量是否正常?是否为配置错误或已知SDK回归问题?
- 如何让SDK缓存
/model_asset和/ios_skadnetwork_conversion_config的响应,避免每次启动重复请求? Settings.shared.isAutoLogAppEventsEnabled = false是否能停止/ios_skadnetwork_conversion_config和gr:get:Application调用,还是仅停止事件POST请求?- 除了fork SDK添加fields参数外,是否有官方支持的方法减少这些自动请求?
内容的提问来源于stack exchange,提问作者Daniel Taub
相关产品推荐
相关产品推荐

