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

66

嘿,我知道这个问题之前已经被问过了,但是似乎没有任何解决方案能够帮助。我在我的应用程序中第一次使用Facebook SDK。

我尝试过的方法:

我尝试了大多数在互联网上找到的解决方法,但是没有关于这个的任何信息。

这是我的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.
14个回答

57

问题

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

我发现FacebookSdk.sdkInitialize已经被弃用。 在这里看一下

经过一番搜索,我发现该指南没有包含添加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"/>
    
    请打开 android/app/src/main/res/values/strings.xml 文件,并确保有一个名为 "facebook_app_id" 的字符串标签,其值为您的应用程序ID:
  2. <string name="facebook_app_id">YOUR_APP_ID_HERE</string>
    
  3. 运行 react-native run-android

这些是对我有效的步骤。


运行 react-native run-android 是有效的,但在 Android Studio 中运行时仍然存在问题,我认为 React Native 需要 Buck 的帮助。 - onmyway133
2
什么是应用程序 ID? - Zeeshan Ahmad Khalil

51

根据文档,你必须在setContentView(R.layout.activity_main);之前使用FacebookSdk.sdkInitialize(getApplicationContext());。如果需要完整的Facebook登录示例,请查看这个链接


当我使用“FacebookSdk.sdkInitialize(getApplicationContext())”时,会出现错误:“无法解决符号'FacebookSdk'”。如果我尝试“import com.facebook.FacebookSdk;”,我会得到同样的错误。 我正在使用Facebook SDK 3.23.1。如何在v3.23.1中初始化SDK?你的解决方案似乎只适用于Facebook SDK 4.x。 - Jaime Montoya
@JaimeMontoya 我非常推荐您使用最新版本的SDK - Menelaos Kotsollaris
理想情况下,我肯定会这样做。但是在短期内,我正在尝试使用Facebook SDK v3.23.1,因为升级到SDK 4.x需要对源代码进行重大更改,这不现实地一夜之间就能完成。我该如何初始化v3.23.1中的Facebook SDK?我一直在研究https://developers.facebook.com/docs/reference/android/3.23/,我想知道是否可能进行初始化。如果不行,我是否仍然可以在Android上实现Facebook应用事件而不初始化SDK v3.23.1? - Jaime Montoya
Facebook Analytics正在使用SDK v3.23.1为我工作。我只是按照https://developers.facebook.com/docs/reference/android/3.23.1/class/AppEventsLogger/中说明的使用AppEventsLogger类。我不需要初始化Facebook SDK,因为我甚至无法这样做。SDK v3.23.1不包括sdkInitialize()方法。 - Jaime Montoya

38

对于SDK v13.+,你必须添加应用ID客户端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开发者帐户中找到您的客户端令牌:

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


1
如果仪表板中的客户端令牌为空,该怎么办? - BugsBunnyBR
2
这是新版本的正确答案。需要客户端令牌。谢谢。 - Mahmut K.
1
@BugsBunnyBR,我也遇到了同样的问题。你在控制台中重置了客户端令牌吗? - Rajat Beck
1
是的,我已经向负责该账户的人请求重置了。 - BugsBunnyBR
只是为了澄清,如果您拥有“开发人员”级别的权限并可以访问控制台,但仍无法生成ID,则需要向“管理员”(在角色->角色下可见)请求重置。 一旦他们将其重置为“开发人员”,您就应该能够从控制台检索密钥。 - AdamWardVGP

32

您不再需要使用FacebookSdk.sdkInitialize。请检查您的:

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

<application>标签内部。


为什么?它仍然在文档中。 https://developers.facebook.com/docs/android/getting-started/ - Ilia Grabko
1
FacebookSdk.sdkInitialize已经过时。 - Guilherme Simão Couto
1
我在androidManifest的<application>标签中添加了上述“元数据”,但我的构建不成功。之前它是成功的,而且我在服务器上也遇到了错误。 - Zeeshan Ahmad Khalil
兄弟,你真救了我。我卡在这里已经两天了。 - Anuj Raghuvanshi

10
< p > 为什么 < code > sdkInitialize() 被弃用有其原因。

进入 Android 文件夹中的 manifest 文件并添加以下内容。

<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 run-android重新构建你的项目。


12
即使在AndroidManifest.xml中正确配置了,但仍然会出现“SDK尚未初始化,请确保首先调用FacebookSdk.sdkInitialize()”的错误提示。 - Alex Burdusel
重启服务器后它就正常工作了。 - Mangalprada Malaya

5

只需两步,您的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());

如何获取应用程序 ID - Prince Hamza

4

根据这个问题列出的回答,初始化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尚未初始化 FacebookSdk.sdkInitialize()

FacebookSdk.sdkInitialize() 现在已经被弃用。

现在(2021年),Facebook 初始化已更改,Facebook 初始化自动完成

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

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

添加 Facebook 应用 ID 和客户端 Token

将 Facebook 应用 ID 和客户端 Token 添加到项目的字符串文件中,并更新 Android Manifest:

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>

1
请注意,facebook_client_token已在最近几个月中添加。 - Mike Casan Ballester
1
为我解决了问题,我添加了facebook_client_token。 - 2xSamurai

3

在查阅了文档后,我发现他们要求在Application类的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);
   }
 }

2
此功能已被弃用。 - lenooh

1

我的应用程序崩溃了,因为在https://developers.facebook.com/的“设置/基本信息”中没有提供隐私政策网址。(实际上已经提供了,但我不得不再次“保存更改”。看起来是Facebook的一个错误)。

该应用程序之前一直运行良好,现在错误消息Facebook Sdk Has Not Been Initialized FacebookSdk.sdkInitialize()消失了。希望这可以帮到你。


为什么会被投票否决?我费了很大劲才发现这是来自于隐私政策,而不是编码问题。 - Mike Casan Ballester
1
我同意Mike的观点。大多数情况下,错误会混淆视听。例如,我在做了所有步骤后,仍然收到了FacebookSdk.sdkInitialize() first的错误,这让我很困扰。最后发现,这行代码根本不必要,但我在strings.xml或AndroidManifest.xml中漏掉了facebook_client_token。之后它正常工作了。看了Mike的回答,似乎即使我已经解决了问题,如果我的情况和Mike的情况相似,我可能也会从答案中得到提示!因此我给Mike点了赞。 - Khazaddoom

0

对我来说,这个问题是由于我的应用程序中一个名为 react-native-fbsdk 的包引起的。 请检查您的 package.json 文件是否相同。

我使用 npm uninstall fbsdk 移除了该包并重新构建了我的应用程序,然后它完美地工作了。

希望这个解决方案对您有用!


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