Android 版 Facebook SDK 让用户能够使用 Facebook 登录登录到您的应用。当用户通过 Facebook 登录应用时,可以向应用授予权限,以便您可以代表他们在 Facebook 上检索信息或执行操作。
如需通过示例项目了解如何在 Android 应用中集成 Facebook 登录,请前往 GitHub,参阅其中的 FBLoginSample。
按照以下步骤,将 Facebook 登录添加到您的应用。
buildscript { repositories {}}
中: dependencies{}
部分,以便依赖于最新版的 Facebook 登录 SDK: 如果您使用 Android 版 Facebook SDK 版本 5.15 或更高版本,则不需要为 Chrome 自定义选项卡添加活动或意图筛选条件。此功能包含在 SDK 中。
FacebookActivity
添加到您的 Android 清单中。 /app/res/values/strings.xml
文件。facebook_app_id
、fb_login_protocol_scheme
以及 facebook_client_token
的 string
元素,并将值相应设置为应用编号和客户端口令。例如,如果您的应用编号为 1234
,并且客户端口令为 56789
,则您的代码格式如下所示: /app/manifest/AndroidManifest.xml
文件。 application
元素中,针对应用编号和客户端口令添加 meta-data
元素: application
元素中,为 Facebook 添加活动,并为 Chrome 自定义选项卡添加活动和意向筛选条件: <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter> </activity>
application
元素的后面添加 uses-permission
元素: application
元素的后面添加 uses-permission
元素: 您可以在 AndroidManifest.xml
文件中设置 AutoLogAppEventsEnabled
标记,以直接将应用事件自动记录功能设为“true”或“false”。
LoginButton
。LoginButton 是
一个用户界面元素,其中包含 LoginManager 中的可用功能
。用户点击该按钮时,系统就会使用 LoginManager 中设置的权限发起登录流程
。Facebook 登录需要取得高级 public_profile 权限,才能供外部用户使用。此按钮随登录状态变化,并根据用户的身份验证状态显示正确文本。 CallbackManager.Factory.create
处理登录响应。 Login button
的属性,并且使用 onCreate()
或 onCreateView()
方法注册回调。支持自定义的属性包括 LoginBehavior
、DefaultAudience
、ToolTipPopup.Style
以及 LoginButton
中的权限。例如: private static final String EMAIL = "email"; loginButton = (LoginButton) findViewById(R.id.login_button); loginButton.setReadPermissions(Arrays.asList(EMAIL)); // If you are using in a fragment, call loginButton.setFragment(this); // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } });
LoginManager
或 LoginButton
注册回调。如果使用 LoginButton
注册回调,则无需再使用 LoginManager 注册回调。 onCreate()
方法: callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } });
LoginResult
参数会获得新的 AccessToken
,以及最新授予或拒绝的权限。 registerCallback
即可完成登录,也可以选择通过 AccessTokenTracker
类(如下所述)关注当前的访问口令变动。 onActivityResult
方法调用 callbackManager.onActivityResult
,从而通过 callbackManager
将登录结果传递到 LoginManager
。 如果使用 AndroidX 活动或片段,则无须覆盖“onActivityResult”。
onActivityResult
转发至 callbackManager
。 LoginManager
会为该用户设置当前的 AccessToken
和 Profile
。FacebookSDK 会将该数据保存在共享首选项中,并在会话开始时设置此数据。您可以通过检查 AccessToken.getCurrentAccessToken()
和 Profile.getCurrentProfile()
来查看用户是否已登录。 AccessToken.getCurrentAccessToken
。您应在 Activity
的 onCreate
方法中检查它的有效性:/app/manifest/AndroidManifest.xml
文件的 queries
元素中。 下列代码展示了如何启用快捷登录。 LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() { @Override public void onCompleted(AccessToken accessToken) { // User was previously logged in, can log them in directly here. // If this callback is called, a popup notification appears that says // "Logged in as <User Name>" } @Override public void onFailure() { // No access token could be retrieved for the user } @Override public void onError(Exception exception) { // An error occurred } });