1.添加依赖
在对应 Module 的 build.gradle 文件下添加以下代码:
1
| implementation 'com.facebook.android:facebook-login:[5,6)'
|
2.配置资源和清单
1.在 strings.xml 文件中添加如下配置:
1 2
| <string name="facebook_app_id">[APP_ID]</string> <string name="fb_login_protocol_scheme">fb[APP_ID]</string>
|
2.在 AndroidManifest.xml 清单文件中添加以下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<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>
|
3.添加集成代码
1.在 onCreate() 或 onCreateView() 方法中对facebook SDK进行初始化并注册回调 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| /** * 初始化Facebook */ private fun initFacebook(){ callbackManager = CallbackManager.Factory.create() if (Constants.DEBUG) { //打印facebook 识别应用的 key KLog.e("facebook key=${FacebookSdk.getApplicationSignature(this)}") } //添加回调 LoginManager.getInstance().registerCallback(callbackManager, object : FacebookCallback<LoginResult> { override fun onSuccess(loginResult: LoginResult) { // App code KLog.e("login", "token: " + loginResult.accessToken.token) val code = loginResult.accessToken.token //调用后台接口进行登录 viewModel?.facebookLogin(code) }
override fun onCancel() { // App code }
override fun onError(exception: FacebookException) { // App code KLog.e("login", "e: $exception") } }) }
|
2.在 onActivityResult() 方法中调用 callbackManager.onActivityResult() 将登录结果传递给 LoginManager , 代码如下:
1 2 3 4 5 6 7
| @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Facebook 登录结果传递给LoginManager callbackManager.onActivityResult(requestCode, resultCode, data); }
|
3.调用Facebook SDK进行登录,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| /** * 调用facebook 登录 */ private fun toFacebook(){ val accessToken = AccessToken.getCurrentAccessToken() val isLoggedIn = accessToken != null && !accessToken.isExpired if (isLoggedIn) { //判断Facebook是否登录 如果登录先退出 try { LoginManager.getInstance().logOut() AccessToken.setCurrentAccessToken(null) } catch (e: Exception) { e.printStackTrace() } } //调用facebook登录 LoginManager.getInstance().logInWithReadPermissions( this, listOf("public_profile", "email", "user_friends") ) }
|
5.由于一般情况下我们只是需要Facebook 返回的token识别用户,所以在退出该页面时在onDestroy()调用Facebook的退出API,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| /** * 退出Facebook登录 */ private fun outFacebook(){ //退出facebook val accessToken = AccessToken.getCurrentAccessToken() val isLoggedIn = accessToken != null && !accessToken.isExpired if (isLoggedIn) { //判断Facebook是否登录 如果登录先退出 try { LoginManager.getInstance().logOut() AccessToken.setCurrentAccessToken(null) } catch (e: Exception) { e.printStackTrace() } } }
|
注意:
虽然在一般情况下使用Facebook登录就会显示 facebook 识别应用的key,但是有些情况下会出现直接通过登录而不会显示key,这个时候我们可以调用 Facebook 的API进行获取,代码如下:
1
| FacebookSdk.getApplicationSignature(context)
|
到这里就集成完毕了