Android 集成google 和 facebook 登录

最近公司项目刚好集成了google 和 facebook 登录,中间遇到了一些问题,所以记录下来. 

主要问题如下:

1)如何集成google 和 facebook 登录,主要参考官方文档。

2)应用上线后,google和facebook 登录失败

 

集成google 登录 ,整个流程如下:

第一步:

firebase官网:https://console.firebase.google.com/?hl=zh-cn&pli=1  

在firebase 中添加应用,并且添加sha1, 下载相应的google-service.json文件

第二步:

登录google 开发者后台:https://console.developers.google.com/apis/,添加 api key, 并配置包名,sha1值。

 

第三步:

代码

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestId()
        .requestProfile()
        .requestEmail()
        .requestIdToken(GOOGLE_CLIENT_ID)
        .build();


GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(AppCore.getmCurrentActivity())
        .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
        .build();

Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(intent, GOOGLE_SIGN_IN);  //RC_SIGN_IN是requestcode
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == GOOGLE_SIGN_IN) {  //google登录
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleSignInResult(result);
    } 
}
private void handleSignInResult(GoogleSignInResult result) {
    if (result.isSuccess()) {
        GoogleSignInAccount account = result.getSignInAccount();
    } else {
        javaBridgeToCpp.signInFormGoogleCallback("error", "", "", "", "", 1000, mForceLogin);
        Toast.makeText(AppActivity.this, "Google SignIn Failed", Toast.LENGTH_SHORT).show();
    }
}

注意: 这里的GOOGLE_CLIENT_ID 是 web_client_id. 如下

Facebook 登录

第一步:

在facebook 开发者中心,网址:https://developers.facebook.com/docs/facebook-login/android

配置包名,启动Activity, 密钥散列值。

 

第二步:

callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
        new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                getLoginInfo(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
            }

            @Override
            public void onError(FacebookException exception) {
                Toast.makeText(AppActivity.this, "Facebook Login Fail", Toast.LENGTH_SHORT).show();
            }
        });

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

 

 

public void getLoginInfo(final AccessToken accessToken) {
    GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
        @Override
        public void onCompleted(JSONObject object, GraphResponse response) {
            if (object != null) {
                String name = object.optString("name");  //比如:Zhang San
                String gender = object.optString("gender");  //性别:比如 male (男)  female (女)
                String email = object.optString("email");  //邮箱:比如:56236545@qq.com
               
                JSONObject object_pic = object.optJSONObject("picture");
                JSONObject object_data = object_pic.optJSONObject("data");
                String photo = object_data.optString("url");
                javaBridgeToCpp.signInFormFacebookCallback("success", name, photo, email, accessToken.getToken(),             1000, mForceLogin);
            }
        }
    });

    Bundle parameters = new Bundle();
    parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name");
    request.setParameters(parameters);
    request.executeAsync();
}

注意点:google play上线后会自动给apk 重新签名,  因此上线后,会导致google和facebook 登录失败,解决方法是将google play

的签名文件的sha1值保存到firebase 后台并重新下载google-service.json 文件,以及将google play 的签名文件的密钥散列值保存到facebook 开发者后台。

 

参考文章:

https://blog.csdn.net/robin_java/article/details/52540711

https://blog.csdn.net/Yzw_92_4_11/article/details/78281956

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值