FacebookSdk.sdkInitialize (контекст) застарілий


102

Я використовую facebook-android-sdk-4.19.0 в Android Studio, і я дотримувався посібника для швидкого запуску 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, виявляється, що всі методи FacebookSdk.sdkInitialize () застаріли. Документація тут https://developers.facebook.com/docs/reference/android/current/class/FacebookSdk/ нічого не говорить про те, який метод використовувати для ініціалізації sdk замість sdkInitialize (). Який метод я повинен використовувати?


1
Якщо відповідь допомогла вам, будь ласка, позначте як правильну відповідь або якщо у вас все-таки є та сама проблема, ми можемо продовжувати пошук.
Юпі

Відповіді:


132

З документації про оновлення SDK:

Facebook SDK тепер автоматично ініціюється при запуску програми. Якщо ви використовуєте SDK Facebook в основному процесі і не потребуєте зворотного дзвінка після завершення ініціалізації SDK, тепер ви можете видалити дзвінки на FacebookSDK.sdkInitialize. Якщо вам потрібен зворотний дзвінок, вам слід вручну викликати зворотний дзвінок у своєму коді.

Зверніться до: https://developers.facebook.com/docs/android/upgrading-4x

ОНОВЛЕННЯ

У SDK 4.22 title, description, captionі imageполе FBSDKShareLinkContentзастаріли. Подумайте про видалення їх із використання.


1
А як щодо зворотного виклику автоматичної ініціалізації?
Костянтин Конопко

8
Як FBK SDK вдається ініціалізувати себе "on Application start"без необхідності нічого додавати Application.onCreate()??
Себастьян

5
Відповідаючи на власний коментар: починаючи з v4.19.0, ініціалізація SDK у Facebook проводиться ContentProvider, заявлений у маніфесті програми: github.com/facebook/facebook-android-sdk/commit/…
Sébastien

Спасибі Себастьєн, я витрачаю багато часу, щоб розібратися у формі, де називається sdkInitialize ()
Vahe Gharibyan

2
Якщо я видаляю рядок sdkInitialize, деякі користувачі все-таки відповідають винятку: "sdk Facebook повинен бути ініціалізований перед викликом activateApp", версія sdk: 4.27.0, версія Android 5.0
diousk

13
FacebookSdk.sdkInitialize(getApplicationContext()); 

Цей метод застарілий, тому просто видаліть цей рядок коду у своєму класі. оскільки згідно з останніми Facebook, нам зараз не потрібно ініціалізувати SDK вручну, він ініціалізується сам по собі.


4

Тож замість виклику застарілих методів ви можете зателефонувати AppEventsLogger.activateApp(Application)всередину класу програми onCreate ()

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теж один і той же Applicationоб’єкт. Чи можу я запитати, у чому необхідність заміни getApplication()? Я просто використовую this(що теж те саме MyApplication.this), і він отриманий якApplication
vida

1

Моєю вимогою було відключити autoInit при запуску програми та ініціалізувати його з методу onCreate діяльності. Перед запуском програми AutoInit змусив мій трепетний додаток запустити час на повільних мережних з'єднаннях.

  1. Вимкнути AutoInit з маніфесту

    <meta-data android:name="com.facebook.sdk.AutoInitEnabled"
        android:value="false"/>
  2. Ініціалізуйте Fb sdk у методі onCreate діяльності

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

1

FacebookSdk.sdkInitialize(getApplicationContext());

Немає необхідності в цьому методі, як каже Facebook doc: Ця функція ініціалізує SDK Facebook автоматично викликається при запуску програми, якщо відповідні записи вказані в AndroidManifest, наприклад, ідентифікатор програми facebook. Автоматичне ведення журналу подій з "activateApp" можна керувати за допомогою параметра "com.facebook.sdk.AutoLogAppEventsEnabled".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.