android - Facebook Android sdk 错误 - 使用反斜杠生成 postRequest 'extinfo' json 数组
问题描述
我需要使用自定义事件将我的 Android 应用程序与 Facebook Analytics 连接起来。
我关注了https://developers.facebook.com/docs/analytics/上的官方文档
将 facebook SDK 添加到项目中:
implementation 'com.facebook.android:facebook-android-sdk:5.15.3'
生成了所有必要的哈希,把所有必要的东西都放在 Manifest 中,一切都好。
应用程序已构建并启动,但事件从未出现在分析控制台中。
经过数小时的调试,我发现了问题所在。
在 Facebook SDK 库代码中,当创建对服务器的 postRequest 时,它具有(除其他外)名为“extInfo”的参数。此参数应包含带有字符串的 json 数组,按一定顺序排列。
现在,这就是 Facebook SDK postRequest 从应用程序发送时的样子:
如您所见, extinfo json 数组都被反斜杠污染了。当我在 Postman 中手动复制此请求时,服务器返回错误:
"message": "(#100) 字段 extinfo 必须是带有字符串键的有效 json 对象"
因此,在 Postman 中,我修改了 extinfo 参数 - 将其从反斜杠中清除:
在这种情况下,来自服务器的结果是:“成功”:真。事件开始出现在 Analytics Dashboard 中。
精彩的。但。
考虑到这个错误,如何在 Facebook SDK 的帮助下发送事件?是否有没有出现此错误的 sdk 版本?有没有办法调整 sdk 使其至少不发送 extinfo ?任何其他可能的解决方案,除了在没有 Facebook SDK 帮助的情况下发送请求(这是一个完整的编写负载,此外,如果它们更改请求结构,则必须重新编写代码)?
我在 Internet 上的任何地方都没有找到有关此错误的信息。如果有,请分享一个链接。谢谢你。
编辑:也尝试了实现 'com.facebook.android:facebook-core:7.1.0'。没运气。
解决方案
我找到了解决方案。就我而言,问题出在项目内部,与 Facebook SDK 无关。以前的开发人员为应用程序可以使用的主机创建了验证:
HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory)
val verify = fun(ip: String, _: SSLSession): Boolean {
println(ip)
return ip.contains("crashlytics", true) ||
ip.contains("firebase", true) ||
ip.contains("maps.googleapis.com", true) ||
ip.contains("facebook.com", true)
}
HttpsURLConnection.setDefaultHostnameVerifier(verify)
一旦我在列表中添加了 facebook.com,错误就消失了。但是,我仍然不明白为什么在日志中“extinfo”参数是用反斜杠生成的。