不推荐使用的 FacebookSdk 方法抛出 RuntimeException

Posted

技术标签:

【中文标题】不推荐使用的 FacebookSdk 方法抛出 RuntimeException【英文标题】:Deprecated FacebookSdk method throws RuntimeException 【发布时间】:2017-06-14 12:30:00 【问题描述】:

我有FacebookSdk.sdkInitialize(getApplicationContext()),其中 sdkInitialize() 显示为已弃用。根据article,我们可以删除该行。但是我在AppEventsLogger.activateApp(this) 之后的行出现以下错误:

androidRuntime: FATAL EXCEPTION: main                                                                              Process: com.daimler.moovel.android:auth, PID: 4011                                java.lang.RuntimeException: Unable to create application com.daimler.moovel.android.DebugApplication: The Facebook sdk must be initialized before calling activateApp                                              at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5879)                                             at android.app.ActivityThread.-wrap3(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1699)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: The Facebook sdk must be initialized before calling activateApp
at com.facebook.appevents.AppEventsLogger.activateApp(AppEventsLogger.java:226)
at com.facebook.appevents.AppEventsLogger.activateApp(AppEventsLogger.java:208)

那么我错过了什么?

【问题讨论】:

【参考方案1】:

现在不需要AppEventsLogger.activateApp(this); 如果你在 manifest.xml 中设置了 facebook_id 就不需要了 你只需要在 manifest.xml 中的 Application 标签中添加以下内容

 <meta-data
   android:name="com.facebook.sdk.ApplicationId"          
   android:value="@string/facebook_app_id" /> 

其中 facebook_app_id 在 string.xml 中定义

【讨论】:

很好地修复了它。 嘿,你怎么知道它不再需要了?你有文档吗? @j2emanue 这是Legacy SDK Initializationdevelopers.facebook.com/docs/app-events/…中的文档【参考方案2】:

那是因为你升级了你的 Facebook SDK 并且你正在尝试使用 AppEventsLogger providinig this as Context 的实现:

AppEventsLogger.activateApp(this);

从 SDK 4.19 及更高版本替换为:

AppEventsLogger.activateApp(getApplication());

有关此的文档说:

通知事件系统应用程序已启动,激活和停用事件应开始自动记录。这应该从您的应用程序的 OnCreate 方法中调用。

如果Facebook SDK 现在在应用程序启动时自动初始化,则具有逻辑。

试试吧,希望能解决你的问题。

【讨论】:

yupi,我已经加了AppEventsLogger.activateApp(getApplication());,在fabric上仍然有一些用户崩溃,不知道如何解决,只有部分用户会崩溃

以上是关于不推荐使用的 FacebookSdk 方法抛出 RuntimeException的主要内容,如果未能解决你的问题,请参考以下文章

停止 Gradle 构建的推荐方法

如何不抛出一般指定的异常?

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

Facebook SDK + CodeIgniter 会话

Xcode 没有找到 openActiveSessionWithReadPermissions: FacebookSDK for iOS 方法

为啥空数组引用的数组访问表达式不抛出 NullPointerException?