Facebook Sdk 尚未初始化 FacebookSdk.sdkInitialize()

Facebook Sdk Has Not Been Initialized FacebookSdk.sdkInitialize()

嘿,我知道之前有人问过这个问题,但是 none 的解决方案似乎有帮助。我是第一次在我的应用程序中使用 Facebook SDK。

我尝试过的:

我已经尝试了在 Internet 上找到的大部分内容,但没有得到任何相关信息。

这是我的 MainActivity.java:

 public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FacebookSdk.sdkInitialize(getApplicationContext());
   } 
}

这是我的 Activitymain.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:facebook="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

 <com.facebook.login.widget.LoginButton
    android:id="@+id/connectWithFbButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_gravity="center_horizontal"
    android:text="  connect_with_facebook" /> 
</LinearLayout>

看我的Logcat:

 05-13 16:30:39.332: E/AndroidRuntime(10264): Caused by: The SDK has not been initialized, make sure to call FacebookSdk.sdkInitialize() first.

你必须使用 FacebookSdk.sdkInitialize(getApplicationContext()); before setContentView(R.layout.activity_main); as documentation states out. In case you need a complete facebook login example, .

像这样使用初始化回调构造函数:

    Handler mHandler = new Handler();
            FacebookSdk.InitializeCallback initializeCallback = new FacebookSdk.InitializeCallback() {
                @Override
                public void onInitialized() {

                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            //UI Code Here
                        }
                    });
                }
            };
    //before setContentView()   
 FacebookSdk.sdkInitialize(getActivity().getApplicationContext(),initializeCallback);

检查 documentation 后,我发现他们要求 在应用程序 class onCreate() 方法中初始化 FacebookSdk .

来自 Facebook 文档的快照代码:

  public class MyApplication extends Application {
 // Updated your class body:
 @Override
 public void onCreate() {
    super.onCreate();
    // Initialize the SDK before executing any other operations,
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
   }
 }

您不再需要使用 FacebookSdk.sdkInitialize。检查您是否:

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

<application> 标签内。

问题

在为一个 react-native 项目集成 Android SDK 时,我完成了 Android with React Native v0.30+ Project Configuration 指南和 运行 react-native run-android 然后得到了这个屏幕:

我了解到 FacebookSdk.sdkInitialize 已被弃用。 see here

经过一番搜索,我发现该指南没有包含为我的应用程序添加 Facebook 应用程序 ID 的步骤。

解决方案

  1. 打开 android/app/src/main/AndroidManifest.xml 文件并查看 <application> 标签以确认此 meta-data 标签存在:

    <meta-data android:name="com.facebook.sdk.ApplicationId"
              android:value="@string/facebook_app_id"/>
    
  2. 打开 android/app/src/main/res/values/strings.xml 文件并确认其中有一个 "facebook_app_id" 字符串标记,其中您的应用程序 ID 作为值:

    <string name="facebook_app_id">YOUR_APP_ID_HERE</string>
    
  3. 运行 react-native run-android.

这些步骤对我有用。

sdkInitialize() 被弃用是有原因的。

转到 android 文件夹中的清单文件并添加以下内容

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

之后,在您的 strings.xml 文件 (res/values/strings.xml) 中附加字符串条目:

<string name="facebook_app_id">APP_ID</string>

关闭 Metro Builder 并使用 react-native 重建项目 运行-android

只需执行 2 步,您的 Facebook Sdk 即可在 React Native 中运行

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

    <string name="facebook_app_id">YOUR_APP_ID_HERE</string>

不需要这个,因为它现在已弃用

  FacebookSdk.sdkInitialize(getApplicationContext());

看到这个问题中列出的回复,初始化 Facebook 的旧方法是:

public class MyApplication extends Application {

 @Override
 public void onCreate() {
    super.onCreate();
    // Initialize the SDK before executing any other operations,
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
   }
 }

但是我们可以得到消息:

Facebook Sdk Has Not Been Initialized FacebookSdk.sdkInitialize()

FacebookSdk.sdkInitialize() 现已弃用。

现在 (2021) Facebook 初始化已更改,the Facebook initialization is automatically

1 将以下内容添加到 build.gradle(模块:app)文件的 dependencies {} 部分,为 Android 编译最新版本的 Facebook SDK:

implementation 'com.facebook.android:facebook-android-sdk:latest.release'

添加您的 Facebook 应用程序 ID 和客户端令牌

将您的 Facebook 应用程序 ID 和客户端令牌添加到项目的字符串文件并更新您的 Android 清单:

1 打开您的 /app/res/values/strings.xml 文件。

2 将名称属性 facebook_app_id 和值作为您的 Facebook 应用程序 ID 的字符串元素添加到文件中。例如

<string name="facebook_app_id">Facebook App ID</string>
<string name="facebook_client_token">Facebook Client ID</string>

3 打开/app/manifests/AndroidManifest.xml

4 向清单中添加一个 uses-permission 元素:

<uses-permission android:name="android.permission.INTERNET"/>

5 向应用程序元素添加元数据元素:

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

如果这对任何人有帮助。对我来说,我必须做出这个改变

implementation 'com.facebook.android:facebook-login:latest.release' // for FB login 

以上代码行必须添加到依赖项对象的末尾,而不是介于两者之间的任何位置。 这是在 android/app/build.gradle 文件

我的应用程序崩溃了,因为 隐私政策 url 未在“Settings/Basic”中提供https://developers.facebook.com/。 (实际上它已经提供了,但我不得不再次“保存更改”。似乎是来自 Facebook 的错误)。

应用程序运行正常,错误消息 Facebook Sdk Has Not Been Initialized FacebookSdk.sdkInitialize() 消失了。希望对您有所帮助。

对于 SDK v13.+,您必须添加 Apple IDClient Token.

  1. 在你的应用项目中打开/app/res/values/strings.xml文件并添加:
<string name="facebook_app_id">1234</string>
<string name="facebook_client_token">56789</string>
  1. 在你的应用项目中打开/app/manifests/AndroidManifest.xml文件并添加:
<application android:label="@string/app_name" ...>
    ...
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
    ...
</application>

您可以在您的 FB Developer 帐户中找到您的客户令牌:

应用程序 > 仪表板 > 设置 > 高级 > 安全 > 客户端令牌。