FacebookSdk.sdkInitialize (Context)已过时。

115

我正在使用Android Studio中的facebook-android-sdk-4.19.0,并按照Facebook快速入门指南在https://developers.facebook.com/docs/android/getting-started(点击“快速入门”按钮以使用您自己的Facebook帐户登录)中进行操作。 在指南中,要求将以下代码复制并粘贴到片段中以跟踪应用程序日志。

import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
    }
}
然而,在我将代码复制粘贴到Android Studio时,所有的FacebookSdk.sdkInitialize()方法似乎都已过时。这里的文档https://developers.facebook.com/docs/reference/android/current/class/FacebookSdk/并没有说明使用哪种方法来初始化SDK来替代sdkInitialize()。那么我应该使用哪种方法呢?

1
如果我的答案有帮到你,请将其标记为正确答案。如果问题依旧存在,我们可以继续寻找解决方案。 - Yupi
Facebook添加了弃用警告,但在评论中他们说“如果需要,可以手动调用此方法。”(https://github.com/facebook/facebook-android-sdk/commit/e610fe89f44dad8c4402fb34d0eb68abe4522af2#diff-1b1024d6bc6def0e7c192dab15687476)。因此,不应该添加弃用警告。出于性能原因,我们不希望在应用程序启动时初始化Facebook SDK。我们只在用户需要使用Facebook登录功能时才手动进行初始化。 - undefined
6个回答

142

关于升级SDK的文档:

现在,Facebook SDK会自动在应用程序启动时初始化。如果您在主进程中使用Facebook SDK且不需要在SDK初始化完成时回调,则可以删除对FacebookSDK.sdkInitialize的调用。如果您需要回调,则应在代码中手动调用回调函数。

请参阅:https://developers.facebook.com/docs/android/upgrading-4x

更新:

在SDK 4.22中,FBSDKShareLinkContenttitledescriptioncaptionimage字段已被弃用。建议将它们从使用中删除。


1
自动初始化的回调怎么样? - Konstantin Konopko
10
FB SDK如何在应用启动时自行初始化,而无需在Application.onCreate()中添加任何内容? - Sébastien
7
回复我的评论:自从v4.19.0版本以来,Facebook SDK的初始化是由一个ContentProvider完成的,该ContentProvider在应用程序清单中声明:https://github.com/facebook/facebook-android-sdk/commit/e610fe89f44dad8c4402fb34d0eb68abe4522af2#diff-1b1024d6bc6def0e7c192dab15687476 - Sébastien
4
如果我删除sdkInitialize这行代码,仍有一些用户会遇到异常:"调用activateApp之前必须初始化Facebook sdk",sdk版本:4.27.0,Android版本5.0。 - diousk
Facebook添加了弃用警告,但在评论中他们说“如果需要,可以手动调用此方法。”(https://github.com/facebook/facebook-android-sdk/commit/e610fe89f44dad8c4402fb34d0eb68abe4522af2#diff-1b1024d6bc6def0e7c192dab15687476)。因此,不应该添加弃用警告。由于性能原因,我们不希望在应用启动时初始化Facebook SDK。我们只在用户需要使用Facebook登录功能时手动初始化。 - undefined
显示剩余5条评论

16
FacebookSdk.sdkInitialize(getApplicationContext()); 

这种方法已经被弃用了,所以只需在您的类中删除此行代码即可。因为根据最新的 Facebook 要求,我们现在不需要手动初始化 SDK,它会自行初始化。


9

我的要求是在应用程序启动时禁用autoInit,并从Activity的onCreate方法中初始化它。在应用程序启动前进行AutoInit会导致我的Flutter应用在网络连接较慢时启动花费时间。

  1. Disable AutoInit from manifest

    <meta-data android:name="com.facebook.sdk.AutoInitEnabled"
        android:value="false"/>
    
  2. Initialise Fb sdk in activity's onCreate method

    FacebookSdk.fullyInitialize();
    AppEventsLogger.activateApp(application);
    

4

因此,您可以在应用程序类的onCreate()中调用AppEventsLogger.activateApp(Application)而不是调用已弃用的方法。

public class MyApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        AppEventsLogger.activateApp(getApplication());
    }
}

1
根据此文档public static void activateApp(Context context)已被弃用。建议使用此文档。因此,我将MainActivity.this替换为getApplication() - Nikhil Wagh
2
MyApplication.this is also the same Application object. May I ask what's the need for replacing it with getApplication()? I simply use this(which is also the same as MyApplication.this) and it's received as Application - vida

2

FacebookSdk.sdkInitialize(getApplicationContext());

这个方法其实不需要调用,因为Facebook的文档中已经说明了:如果在AndroidManifest文件中正确添加了Facebook应用程序ID等条目,则此函数将在应用程序启动时自动调用以初始化Facebook SDK。通过“com.facebook.sdk.AutoLogAppEventsEnabled”清单设置可以控制来自“activateApp”的自动事件日志记录。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接