首页 > 解决方案 > 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'。没运气。

标签: androidjsonfacebookfacebook-graph-apifacebook-analytics

解决方案


我找到了解决方案。就我而言,问题出在项目内部,与 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”参数是用反斜杠生成的。


推荐阅读