Facebook 登录的接入流程【Android】

1,162 阅读2分钟

一、接入前的准备

1.1 创建应用

先创建应用,再按官方文档接入。不用在接入文档中填写应用的参数,应用创建后,在 “用例” 中配置。

1.2 权限配置

“身份验证和账户创建”, 在定制中可以配置获取用户数据的权限,不过这里的数据只有 email(邮箱)和 public_profile(默认的公开资料)。一般来说只需要 public_profile,游戏可能会需要 gaming_profile(玩家资料)。如果要获取更多的数据,就要添加 “额外 Facebook 用户数据 ” ,然后在定制中添加需要的权限。

1.3 快速接入

通过 “身份验证和账户创建”->“定制”->“前往快速启动” ,这个可以直接实现对应用的配置而且接入流程也很清晰。

官方文档:Android - Facebook 登录

二、接入登录

2.1 参数配置

先在 AndroidManifest 中配置好 facebook 的参数。(建议参数写在 values 中,这样修改的时候也不用改到AndroidManifest 文件)

<activity
  android:name="com.facebook.FacebookActivity"
  android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
  />

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

<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" />

2.2 登录管理类

创建登录管理类,初始化的时候需要通过LoginManager.getInstance().registerCallback() 注册登录回调。

    private CallbackManager mCallbackManager;

    public void init() {

        mCallbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                //通知登录成功
                mFacebookLoginCallback.success();
            }

            @Override
            public void onCancel() {
                //通知登录取消
                mFacebookLoginCallback.failure();
            }

            @Override
            public void onError(FacebookException exception) {
                Log.d(TAG, "registerCallback.onError");
                if (exception instanceof FacebookAuthorizationException) {
                    if (AccessToken.getCurrentAccessToken() != null) {
                        // 如果当前用户已登录,且fb登陆验证异常,则调一下fb的登出
                        LoginManager.getInstance().logOut();
                        //通知登录失败
                        mFacebookLoginCallback.failure();
                        return;
                    }

                }
                //通知登录失败
                mFacebookLoginCallback.failure();
            }
        });
    }

一般的第三方账号绑定,其本质还是调用渠道登录,拿到 token / uid 之类的和自己的平台账号绑定,所以建议登录的时候传入自定义的登录回调,在不同的调用位置进行处理,如登录/绑定

登录传入的权限要和接入前的权限配置一致,不然会导致登录有问题。

    public void loginWith(Activity activity, Collection<String> permissions, FacebookLoginCallback callback) {
        mFacebookLoginCallback = callback;
        if (permissions == null) {
            permissions = Arrays.asList("public_profile", "email");
        }
        LoginManager.getInstance().logInWithReadPermissions(activity, permissions);
    }

2.3 登出

登出方法直接调LoginManager.getInstance().logOut()

2.4 登录回调

然后在 onActivityResult 中调用 callbackManager.onActivityResult() ,这里调用记得判空。

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }