嘿,我知道之前有人问过这个问题,但似乎没有任何解决方案有帮助。我第一次在我的应用程序中使用 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.
在为一个 react-native 项目集成 Android SDK 时,我完成了 Android with React Native v0.30+ 项目配置 指南,并运行
react-native run-android
然后得到这个屏幕:
我了解到
FacebookSdk.sdkInitialize
已被弃用。 看这里
经过一番搜索,我发现该指南没有包含为我的应用程序添加 Facebook App ID 的步骤。
打开
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为值:
<string name="facebook_app_id">YOUR_APP_ID_HERE</string>
奔跑
react-native run-android
.这些是对我有用的步骤。
您必须使用
FacebookSdk.sdkInitialize(getApplicationContext());
beforesetContentView(R.layout.activity_main);
如documentation所述。如果您需要完整的 Facebook 登录示例,请在此处查看。
你不需要再使用 FacebookSdk.sdkInitialize 了。检查您是否:
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
在
<application>
标签里面。
对于 SDK v13.+,您必须添加 App ID 和 Client Token。
<string name="facebook_app_id">1234</string>
<string name="facebook_client_token">56789</string>
<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 帐户中找到您的客户令牌:
App > Dashboard > Settings > Advanced > Security > Client token.
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 重建您的项目
只需执行 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());
看到这个问题的回复,原来初始化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(模块:app)文件的 dependencies {} 部分以编译最新版本的 Facebook SDK for Android:
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 App 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>
检查文档后,我发现他们要求在应用程序类onCreate()
方法
中初始化FacebookSdk。
来自 Facebook 文档的 Snap 代码:
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);
}
}
像这样使用初始化回调构造函数:
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);
如果这对任何人有帮助。对我来说,我必须做出这个改变
implementation 'com.facebook.android:facebook-login:latest.release' // for FB login
上面的代码行必须添加到依赖项对象的末尾,而不是介于两者之间的任何位置。 这是在 android/app/build.gradle 文件中
我的应用程序崩溃了,因为 隐私政策 url 没有在 https://developers.facebook.com/ 的“设置/基本”中提供。 (实际上它已经提供了,但我不得不再次“保存更改”。似乎是来自 Facebook 的错误)。
应用程序运行良好,错误消息
Facebook Sdk Has Not Been Initialized FacebookSdk.sdkInitialize()
消失了。希望这有帮助。
对我来说,这个问题是由于我的应用程序中有一个名为 react-native-fbsdk 的包引起的。 请检查您的
package.json
文件是否相同。
我使用
npm uninstall fbsdk
删除了包并通过应用程序重建并且它运行良好。
希望这个解决方案对你有用!
从 AndroidManifest.xml 中删除
android:exported=true
并且 targetSdkVersion 应该小于 31