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.清单文件和资源

//网络权限
<uses-permission android:name="android.permission.INTERNET"/>
//配置facebookId,可查看应用id填写
<meta-data
     android:name="com.facebook.sdk.ApplicationId"
     android:value="@string/facebook_app_id" />

//配置对应的FacebookActivity,用于登录跳转Facebook应用
<activity
     android:name="com.facebook.FacebookActivity"
     android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
     android:label="@string/app_name" />
//配置无安装Facebook时,网页跳转界面
<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>

//资源文件中进行配置
<string name="facebook_app_id">299548570997514</string> 
<string name="fb_login_protocol_scheme">fb299548570997514</string>

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<LoginResult>() {
    @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日志中查看到对应的错误提示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ios集成facebook三方登录需要pc端墙外环境在开放平台注册APP信息,以及手机端的墙外环境测试登录流程,主...
    miG92阅读 2,243评论 0 0
  • faceBook 三方登录遇到坑,当你按照步骤一步一步完成后没测试时,授权的网页显示让你授权(如果你已经授权)则提...
    Someone_Joker阅读 1,923评论 0 2
  • 无题 文/舟亮 昨宵风冷露凝霜, 喜鹊高飞向暖阳。 淡月一弯心若洗, 静居幽谷觅禅床。
    舟亮阅读 368评论 0 0
  • 在我大学之前,我从未想过说考驾照,因为感觉自己四肢发达头脑简单。 在2017年暑假被爸妈强制报班去考驾照,我至今都...
    先生姓张l阅读 110评论 0 0
  • 这一篇我们分享一下关于客房的装饰,客户设计的时候同样考虑的也是空间感和实用性,首先在和床和衣柜这一块我们利用到了飘...
    sunnyhe阅读 615评论 0 0