Facebook三方登录

Facebook三方登录

Facebook三方登录,是用于获取Facebook账号的基本信息,如头像、别名、手机号码等,通过获取到的信息去自身平台注册对应账号,方便用户的注册。

[TOC]

集成准备

1.创建Facebook应用

Facebook应用创建.png
应用信息填写.png

2.应用配置信息

补充应用信息.png
包名、类名填写

功能实现

1.配置仓库

// project/bulid.gradle:
allprojects {
    repositories {  
        jcenter()
    }
}

// app/bulid.gradle:
implementation 'com.facebook.android:facebook-login:[5,6)'

2.清单文件和资源

//网络权限

//配置facebookId,可查看应用id填写


//配置对应的FacebookActivity,用于登录跳转Facebook应用

//配置无安装Facebook时,网页跳转界面

    
        
        
        
        
    


//资源文件中进行配置
299548570997514 
fb299548570997514

3.获取散列密钥并配置

工具类地址:https://code.google.com/archive/p/openssl-for-windows/downloads

keytool -exportcert -alias name(key的别名) -keystore C:\Users\Administrator\Desktop\key\key_name.jks(key的实际路径) | 
E:\download\openssl-0.9.8k_X64\bin\openssl(工具的绝对路径) sha1 -binary |  
E:\download\openssl-0.9.8k_X64\bin\openssl base64

//命令执行成功以后会要求输入密码,最终生成32位的随机码,需要把这些随机码作为散列密钥配置到Facebook中

//用于配置debug的时候,也使用签名key进行应用签名
signingConfigs {
    release {
        v2SigningEnabled true
    }

    debug {
        //别名
        keyAlias 'name' 
        //key密码
        keyPassword 'pw123'
        //key路径
        storeFile file('F:\\name.jks')
        //本机密码
        storePassword 'storepw123'
    }
}

4.解决google play二次签名

1.登录你的google play应用获取sha-1


image.png

2.使用git bash,git提交工具,如果没有安装搜索git安装。之后右键桌面,找到git bash选项,输入指令
echo “你的sha-1” | xxd -r -p | openssl base64


image.png

最后会得到如图所示的一串24为字符,输入填写到facebook的key dashs中就可以完美解决登录问题

5.代码实现

Application

FacebookSdk.sdkInitialize(getApplicationContext());

Actvitity

//在Activity的onCreate时对CallbackManager进行初始化
CallbackManager mCallbackManager = CallbackManager.Factory.create();

//设置对应的回调监听
LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        LogUtil.d(TAG,"onSuccess-------------");
        showLoading(true);
        //成功以后去获取对应的Facebook账号信息
        getFacebookInfo(loginResult.getAccessToken());
    }

    @Override
    public void onCancel() {
        // App code
        LogUtil.d(TAG,"onCancel-------------");
    }

    @Override
    public void onError(FacebookException exception) {
        LogUtil.d(TAG, exception.toString());
        //如果是因为Facebook本身的鉴权问题,同时获取到token,则需要主动登出,防止重试无法登录
        if (exception instanceof FacebookAuthorizationException) {
            if (AccessToken.getCurrentAccessToken() != null) {
                LoginManager.getInstance().logOut();
            }
        }
    }
});

//配置回调,所有回调信息都会在mCallbackManager中
 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    mCallbackManager.onActivityResult(requestCode, resultCode, data);
}

//登录按钮点击事件调用代码
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

//获取Facebook用户信息,根据key值去获取,再执行平台的登录操作
public void getFacebookInfo(AccessToken accessToken) {
    GraphRequest.newMeRequest(accessToken, (object, response) -> {
        if (object != null) {
            thirdPartyNickName = object.optString("name");
            thirdPartyUserName = object.optString("id");
          
            //go Login 
            ...
        }else {
            //fail
            showLoading(false);
            XMToastUtil.showShortToast(PadLoginActivity.this, getString(R.string.dialog_login_facebook_fail));
        }
    }).executeAsync();
}

功能校验

1.集成校验

如果点击登录按钮,Facebook应用或者网页有对应的加载框,并含有Facebook的logo图标,代码代码集成是没问题的。

2.整体校验

若遇到无法登录的情况,那必然是密钥的配置存在问题,密钥库请使用最新的库,并且校验使用的key值是否为正式key,debug调试配置的key是否也是一致的。有的手机配置错误会提示密钥散列库中不匹配,同时会把需要配置的密钥显示出来。如若key的配置是正确的,那么可以在log日志中查看到对应的错误提示。

你可能感兴趣的:(Facebook三方登录)