1:google登录

google登录和Facebook登录都是提供的自定义view按钮:

 <com.google.android.gms.common.SignInButtonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/google_sign"></com.google.android.gms.common.SignInButton>


google客户端校验初始化如下:

  private GoogleSignInClient mGoogleSignInClient;public void initGoogleClient(){GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();mGoogleSignInClient = GoogleSignIn.getClient(this, gso);}

google按钮点击事件:

 googleLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent signInIntent = mGoogleSignInClient.getSignInIntent();startActivityForResult(signInIntent, 1001);}});

:这里按钮可以是google中的signInButton,也可以是我们自己设置的button。
接着在onActivityResult接收。

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode==1001){Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);try {GoogleSignInAccount account = task.getResult(ApiException.class);Account account1=account.getAccount();L.e(TAG,"name:"+account1.name+"--type:"+account1.type+"--"+account.getId()+"--"+account.getIdToken());} catch (ApiException e) {e.printStackTrace();L.e(TAG,"account失败+"+e.getStatusCode()+"--"+e.getStatusMessage());}}}

另一种是服务端校验,android端获取ServerAuthCode发送给后端,
这里不同的是:GoogleSignInOptions 的初始化

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestScopes(new Scope(Scopes.DRIVE_APPFOLDER)).requestServerAuthCode(getResources().getString(R.string.server_client_id)).requestEmail().build();

这里server_client_id是google后台创建的
证书地址


如图,这是我创建好的截图,如果没有点击

选择OAuth client ID:

这里使用requestServerAuthCode是使用的web application

2:Facebook登录

2.1 开发者后台

Facebook 开发者后台
创建应用拿到应用编号;

2.2导入sdk

 implementation 'com.facebook.android:facebook-login:[5,6)'

2.3编辑清单和文件

首先在values下的strings.xml添加facebook_app_id和fb_login_protocol_scheme:

<string name="facebook_app_id">xxx</string> <string name="fb_login_protocol_scheme">fb+facebook_app_id</string>

然后在清单中添加对应的activity等数据:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"
/><activityandroid:name="com.facebook.FacebookActivity"android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:label="@string/app_name" /><activityandroid: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>

2.4关联应用

这一步骤,主要提供包名,跳转的mainactivity,以及秘钥散列。
秘钥散列可根据提供的秘钥散列库中的工具获取:

openssl-for-windows

获取命令如下:

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME\.android\debug.keystore" | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" sha1 -binary | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" base64

2.5设置按钮

首先,设置布局按钮,使用第三方给定的按钮

    <com.facebook.login.widget.LoginButtonandroid:id="@+id/login_button_facebook"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="30dp"android:layout_marginBottom="30dp"/>

如图:

当然也可以使用自己设置的按钮

   <Buttonandroid:id="@+id/facebook_login"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="30dp"android:layout_marginBottom="30dp"android:text="facebook 登录"/>

十分简单就是写了个按钮,具体的关联在代码中。

2.6实现

使用LoginButton时添加下面的代码:

callbackManager = CallbackManager.Factory.create();LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() {@Overridepublic void onSuccess(LoginResult loginResult) {// App code}@Overridepublic void onCancel() {// App code}@Overridepublic void onError(FacebookException exception) {// App code   }});

然后添加回调:

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

如果是自定义的,则需要添加:

  //这里是自定义按钮的点击事件,如果是loginButton 则不需要做操作,faceLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {LoginManager.getInstance().logInWithReadPermissions(TestActivity.this, Arrays.asList("public_profile"));}});

下面的这个文件是我整合google登录的Facebook登录的utils类:

package in.wp.cheetahs.utils;import android.app.Activity;
import android.os.Bundle;import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;import org.json.JSONObject;import java.util.Iterator;import in.wp.baselib.utils.L;/*** create by zj on 2019/9/26*/
public class ThirdLoginUtils {private GoogleSignInClient mGoogleSignInClient;private CallbackManager callbackManager;private static ThirdLoginUtils thirdLoginUtils;private Activity activity;private ThirdLoginUtils(Activity activity){this.activity=activity;}public static ThirdLoginUtils getInstace(Activity activity){if (thirdLoginUtils==null){thirdLoginUtils=new ThirdLoginUtils(activity);}return thirdLoginUtils;}public CallbackManager getCallManager(){return callbackManager;}public GoogleSignInClient getmGoogleSignInClient(){return mGoogleSignInClient;}public void initGoogleClient(){GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();mGoogleSignInClient = GoogleSignIn.getClient(activity, gso);}public void initFacebookClient(ThirdLoginCallBack callBack) {callbackManager = CallbackManager.Factory.create();LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {@Overridepublic void onSuccess(LoginResult loginResult) {AccessToken accessToken = loginResult.getAccessToken();getFacebookInfo(accessToken,callBack);}@Overridepublic void onCancel() {}@Overridepublic void onError(FacebookException error) {}});}public void getFacebookInfo(AccessToken accessToken,ThirdLoginCallBack callBack) {Bundle parameters = new Bundle();parameters.putString("fields", "id,name,gender,picture");GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {@Overridepublic void onCompleted(JSONObject object, GraphResponse response) {if (object != null) {String thirdIco;String thirdName;String thirdId;try {Iterator iterator = object.keys();while (iterator.hasNext()) {String key = (String) iterator.next();String value = object.getString(key);L.e("xx", key + "--" + value);}//获取用户头像JSONObject object_pic = object.optJSONObject("picture");if (object_pic != null) {JSONObject object_data = object_pic.optJSONObject("data");thirdIco = object_data.optString("url");}else {thirdIco="";}thirdName = object.optString("name");thirdId = object.optString("id");if (callBack!=null){callBack.onFacebookSuccess(thirdId,thirdName,thirdIco);}} catch (Exception e) {}}}});request.setParameters(parameters);request.executeAsync();}public interface ThirdLoginCallBack{void onFacebookSuccess(String id,String name,String icon);}}

涉及到的一些问题,当我把相关代码拉取到新项目时,会出现api12500的错误。后来发现是firebase中一个设置的问题:
选中项目->project setting->Support email将email添加上即可

Google登录和facebook登录相关相关推荐

  1. 前端学习——第三方登录(Google登录、Facebook登录)

    文章目录 前言 一.前端对接第三方登录有什么用? 二.使用环境 三.FB第三方登录 引入且封装成组件 四.G第三方登录 引入且封装成组件 五.页面上使用 总结 前言 本文介绍了作者本人学习前端Java ...

  2. App上传GooglePlay后,微信登录及Facebook登录异常

    App上传GooglePlay后,微信登录及Facebook登录异常 微信登录异常的处理 原因 因为App上传到Google Play后,会被重新签名(Play App Signing).所以保存在微 ...

  3. (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇

    最近接Android,IOS的Facebook登录,分享 以及Google登录,分享流程以及遇到的问题整理. 一. Android接入 google登录 第一步,前往 [ firebase] http ...

  4. 微软、Google、Twitter、Facebook登录

    文章目录 微软.Google.Twitter.Facebook登录 1.背景 2.微软登录 (1)官方文档地址 (2)时序图 a.步骤10 b.步骤12 3.谷歌登录 (1)官方文档地址 (2)时序图 ...

  5. Google和facebook登录

    准备工作是你要在官网创建应用,获取它们给你的id Google 登录 1,在google开发者后台创建应用 2,通过后台进行申请获取id 最近在试着用google登录,当然这只是简单的登录,直接用的它 ...

  6. Android 集成google 和 facebook 登录

    最近公司项目刚好集成了google 和 facebook 登录,中间遇到了一些问题,所以记录下来. 主要问题如下: 1)如何集成google 和 facebook 登录,主要参考官方文档. 2)应用上 ...

  7. Android 集成原生google,facebook 登录分享sdk

    前言 海外版app集成三方登录分享,早期采用umeng sdk,由于googleplay对用户隐私及用户数据的使用有比较严格规定.正好 umeng sdk会后台采集app信息,触发用户隐私相关政策条款 ...

  8. 在GoogPlay上发布的包Facebook登录失败提示签名问题

    在googplay提审的包发布后,发现Facebook登录功能异常,提示如下: 意识到可能是hashkey出问题了,但是之前测试都是好的,原来是上传包到googlePlay后有个二次签名,会修改has ...

  9. Android使用mob实现第三方登录(Facebook、Twitter)

    文章目录 基本配置 1.申请各平台账号,获取各自的key和secret 2.添加依赖 3.添加插件 4.配置MobSdk 5.配置平台 6.mob在项目中的初始化 本文只是做记录和梳理流程,建议到mo ...

最新文章

  1. DataTable转ListModel通用类
  2. linux实时备份,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  3. react native的学习
  4. 八城联动 丨 神策 2020 数据驱动用户大会「杭州站」邀您赴约!
  5. JPA HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError
  6. c++11-type_traits类型萃取
  7. 从 Hive 大规模迁移作业到 Spark 在有赞的实践
  8. 0419 一些不错的UI作品,以后陆续更新
  9. linux 2行数据为一条记录 该如何操作这一条记录_Linux 日志文件系统原来是这样工作的...
  10. VMware 安装版中 安装VMware tools 图解
  11. Archlinux 试用
  12. ehcache 在web项目中使用
  13. 兼容pc端和移动端的轮播图插件 swiper.js
  14. Lex和Yacc实现句子识别
  15. 网易云自动签到云函数【详细版】-2022.5.4
  16. SPSS如何进行Cox回归分析操作
  17. linux删文件,捋一捋
  18. Openstack中用keypair生成和访问虚机的方法
  19. VSCode详细安装教程(Windows 7)附安装包
  20. 任志强:松房贷等政策出台后 房价将U型缓慢回升

热门文章

  1. Linux 文件授权
  2. 实现判断商品折扣价格
  3. 品优购的界面设计要求_品优购项目
  4. Linux 远程桌面 速度快,虫洞TCP加速,提升远程桌面和SSH访问速度
  5. Block 基本使用介绍
  6. 在Android项目上集成Google语音(不使用手机自带引擎)
  7. 【OpenCV图像处理】十七、图像的导向滤波
  8. Spring Boot2 redis
  9. 365天挑战LeetCode1000题——Day 120 基于时间的最大报酬问题模板
  10. 一种通用强人工智能系统的实现