【问题标题】:Facebook Sdk Has Not Been Initialized FacebookSdk.sdkInitialize()Facebook Sdk 尚未初始化 FacebookSdk.sdkInitialize()
【发布时间】:2015-07-24 15:43:10
【问题描述】:

嘿,我知道以前有人问过这个问题,但似乎没有一个解决方案有帮助。我第一次在我的应用程序中使用 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.

【问题讨论】:

    标签: android react-native facebook-login android-facebook fbsdk


    【解决方案1】:

    您必须使用FacebookSdk.sdkInitialize(getApplicationContext()); 之前 setContentView(R.layout.activity_main); documentation 声明。如果您需要完整的 Facebook 登录示例,check this one here

    【讨论】:

    • 当我使用“FacebookSdk.sdkInitialize(getApplicationContext());”时,我收到错误:“无法解析符号 'FacebookSdk'”。如果我尝试“import com.facebook.FacebookSdk;”,我会得到同样的错误。我正在使用 Facebook SDK 3.23.1。如何在 v3.23.1 中初始化 SDK?您的解决方案似乎只适用于 Facebook SDK 4.x。
    • @JaimeMontoya 我真的推荐你使用newest version of the SDK
    • 理想情况下我绝对应该这样做。但是,在短期内,我会尝试使用 Facebook SDK v3.23.1,因为升级到 SDK 4.x 需要对源代码进行重大更改,而这些更改在一夜之间实际上并不适用。如何在 v3.23.1 中初始化 Facebook SDK?我一直在检查developers.facebook.com/docs/reference/android/3.23,我想知道是否可以初始化它。如果没有,我是否仍然可以在不初始化 SDK v3.23.1 的情况下在 Android 上实现 Facebook 应用事件?
    • Facebook Analytics 正在使用 SDK v3.23.1 为我工作。我只是使用 developers.facebook.com/docs/reference/android/3.23.1/class/… 中解释的 AppEventsLogger 类。我不必初始化 Facebook SDK,因为我什至做不到。 SDK v3.23.1 不包含 sdkInitialize() 方法。
    【解决方案2】:

    问题

    在为 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 文件并查看&lt;application&gt; 标记以确认此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

    这些是对我有用的步骤。

    【讨论】:

    • Run react-native run-android 可以,但是在 Android Studio 中运行还是有问题,我认为 React Native 有 Buck 的帮助
    • app id 是什么意思?
    【解决方案3】:

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

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

    &lt;application&gt;标签内。

    【讨论】:

    • FacebookSdk.sdkInitialize 已弃用。
    • 我在 androidManifest 的 中添加了上面的meta-data,我的构建不成功。之前是成功的,但我在服务器上遇到错误。
    【解决方案4】:

    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 run-android 重建您的项目

    【讨论】:

    • 即使在AndroidManifest.xml中正确配置了The SDK has not been initialized, make sure to call FacebookSdk.sdkInitialize() first.
    • 杀死服务器并重新启动它工作。
    【解决方案5】:

    只需执行 2 步,您的 Facebook Sdk iw 就会在 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>
    

    不需要这个 b'coz 现在已弃用

      FacebookSdk.sdkInitialize(getApplicationContext());
    

    【讨论】:

      【解决方案6】:

      检查documentation后,我发现他们要求在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);
         }
       }
      

      【讨论】:

      • 现在已弃用。
      【解决方案7】:

      看到这个问题中列出的回答,初始化 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 初始化已更改,the Facebook initialization is automatically

      1 将以下内容添加到 build.gradle (module: 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>
      

      【讨论】:

        【解决方案8】:

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

            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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-10
          • 1970-01-01
          • 1970-01-01
          • 2022-11-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多