Android 接入Facebook原生登录(非firebase方式)

296 阅读1分钟

(自备科学上网工具)参考官方文档facebook sdk文档(登陆)
正式步骤如下: 首先来到Facebook的开发者官网facebook 开发者平台
在这里我们可以创建一个项目或者使用已创建好的项目进行下一步 然后在产品里选择自己想要加入的功能,包括登录或者统计分析等功能 然后开始导入sdk,从sdk文档里的第三步直接开始即可,在第六步添加密钥时建议同时添加开发密钥跟发布密钥,如果密钥不对,可通过以下代码获取

try {
     PackageInfo info = getPackageManager().getPackageInfo(
                       "{your-package-name}",                  //Insert your own package name.  
                        PackageManager.GET_SIGNATURES);
     for (Signature signature : info.signatures) {
         MessageDigest md = MessageDigest.getInstance("SHA");
         md.update(signature.toByteArray());
         Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
         }
} catch (NameNotFoundException e) {
              
} catch (NoSuchAlgorithmException e) {
              
}

单点登录可忽略,接下来是设置相关的点击事件,如果嫌fb自带的按钮不好看,可自己随便写个Button,自带的按钮实现起来比较简单,所以只介绍自定义的按钮怎么实现登录功能
首先注册一个回调:

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

检查登录的状态:

AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();

如果没有登录,调用以下这行代码即可登录

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

在activity的回调里,将页面的回调传给自己自定义的那个回调,就完成了整个流程

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    callbackManager.onActivityResult(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
}