Facebook SDK 4.7.0 记录 AppEventsLogger 的 ClassNotFoundException

Posted

技术标签:

【中文标题】Facebook SDK 4.7.0 记录 AppEventsLogger 的 ClassNotFoundException【英文标题】:Facebook SDK 4.7.0 logs ClassNotFoundException for AppEventsLogger 【发布时间】:2015-10-17 15:05:05 【问题描述】:

我通过 Gradle 在我的 android 应用程序中集成了 FB SDK,用于登录和跟踪事件。登录工作正常,但是一旦我尝试记录应用事件,logcat 就会每 15 秒向我显示一次异常:

D/com.facebook.appevents.AppEventsLogger: Got unexpected exception: java.lang.ClassNotFoundException: com.facebook.a.b

它被扔进去 PersistedEvents' readAndClearStore() method

这是我记录事件的代码:

AppEventsLogger logger = AppEventsLogger.newLogger(this);
    Bundle parameters = new Bundle();
    parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "EUR");
    parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "product");
    parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, id);

    logger.logEvent(AppEventsConstants.EVENT_NAME_VIEWED_CONTENT,
            1.99,
            parameters);

我的意思是com.facebook.a.b 对我来说似乎是一个proguard 问题。但是在 FB SDK 文档中,他们明确指出您不需要输入任何 proguard 规则即可使其工作。当我不缩小我的应用程序以及从 github 下载 sdk 并将其作为模块包含时,也会显示此错误。

【问题讨论】:

这些日志是否来自发布应用程序?还是调试? 但是,如果您为 fb sdk 逃避 proguard,它会起作用吗? -keep class com.facebook.** *; 您在哪里指定缩小选项?你是如何禁用它的?显然它不工作。 AppEventsLogger 尝试每 15 秒记录一次事件(如果有)时正在使用缺少的类。 只是在此处添加此内容:在某些时候它开始工作而我没有进行任何更改,因此我没有进一步调查。奇怪的问题。通过查看赞成票,似乎也给其他人带来麻烦..:/ 将最新的 facebooksdk 更新到您的 android 应用程序(Facebook Sdk 的最新版本为 (4.16.1) 【参考方案1】:

几天前我在 Facebook SDK(v4.11.0) 中遇到了类似的记录器问题:

D/com.facebook.a.a(PID): Got unexpected exception: java.io.WriteAbortedException: Read an exception; java.io.NotSerializableException: org.json.JSONObject

在他们的documentation 中,他们说:

您无需执行任何其他步骤即可将 ProGuard 用于 Facebook Android SDK。有关 Proguard 的说明,请参阅 Android 工具项目站点,运行 ProGuard。

在查看了导致我在发布环境中没有记录任何事件的原因后,我将以下规则添加到我的 proguard 文件中,然后神奇地开始正常工作:

-keep class com.facebook.**  *; 

我们已经向 facebook 开发者团队开出了一张票,以便获得更多相关信息。 https://developers.facebook.com/bugs/250752828645777/

【讨论】:

【参考方案2】:

在 gradle 中使用而不是 sdk:4.11.0:

compile('com.facebook.android:facebook-android-sdk:3.23.0') 
    exclude module: 'bolts-android'

我也无法使用 fb sdk: 4.11.0 登录,因为这个版本的 fb sdk 确实提供了 Facebook 类的异常。使用更高版本的 fb sdk,新类正在取代旧类。

即使在新版本 23 中,ActionBaractivity 也很重要,因此需要使用 AppCompatActivity。

【讨论】:

以上是关于Facebook SDK 4.7.0 记录 AppEventsLogger 的 ClassNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

Facebook App Event sdk 4.38.0 在 ViewHierarchy.setAppearanceOfView 中抛出 NPE

通过Facebook Native app - iOS Facebook SDK分享时,“引用”缺失

最新的 Facebook SDK 未从 App 注销

iOS Facebook 最新 SDK 无法通过原生 App 但浏览器登录

如何退出 Facebook SDK 事件记录?

Facebook SDK 4.0 iOS 不再快速切换到设备上安装的 Facebook APP