Android Facebook原生登录
前言:
在写这篇文章之前先吐槽一下自己的英文水平,之前一直没感觉,因为做的项目都是国内的项目,很少看英文文档。但是,自从换了一个工作之后,做的是国外的项目。并且,写了给第三方写了一个SDK,需要使用Google登录和Facebook登录。那么,就必须用原生登录,说到原生登录,那么就逃不掉要看英文文档。看了英文文档之后才感觉自己的英文是多么的差劲。好了,废话不多说,我们进入今天的正题。如何使用Facebook登录。
首先
当然是查看官方文档了,官方文档介绍的很清楚,并且更新比较及时。如果你不太想看英文文档,而去各种百度。那么,你可能会遇到各种各样的问题。
1、引入Facebook的在线依赖
//facebook登录 implementation 'com.facebook.android:facebook-login:4.39.0'
2、在清单文件中配置在Facebook申请的 appID和scheme
<!-- facebook登录 --><meta-dataandroid: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>
注意: 上面的 @string/facebook_app_id 换成你在facebook申请的AppID,@string/fb_login_protocol_scheme 换成Facebook给你分配的scheme。
其次
上面的配置算是搞定了,那么就是代码的编写了,我这里为了方便,所以封装了一个Facebook登录类。
- 1、首先看工具类的封装
1)、Facebook登录封装类
private static CallbackManager mFaceBookCallBack;private static FaceBookLoginManager sInstance;private FaceBookLoginManager() {}/*** 单例** @return*/
public static FaceBookLoginManager getInstance() {if (sInstance == null) {synchronized (FaceBookLoginManager.class) {if (sInstance == null) {sInstance = new FaceBookLoginManager();}}}return sInstance;
}/*** 开始** @param context*/
public void faceBookLogin(Context context) {LoginManager.getInstance().logInWithReadPermissions((Activity) context,Arrays.asList("public_profile"));
}/*** 初始化*/
public void initFaceBook(final Context context,final OnLoginSuccessListener mListener) {mFaceBookCallBack = CallbackManager.Factory.create();if (mFaceBookCallBack != null) {LoginManager.getInstance().registerCallback(mFaceBookCallBack,new FacebookCallback<LoginResult>() {@Overridepublic void onSuccess(LoginResult loginResult) {if (loginResult != null) {if(mListener=null){mListener.onSuccess(result);}}}@Overridepublic void onCancel() {if(mListener=null){mListener.onCancel();}}@Overridepublic void onError(FacebookException error) {if(mListener=null){mListener.onError(error);}}});}
}/*** 设置登录结果回调** @param requestCode 请求码* @param resultCode 结果码* @param data 数据*/
public void setOnActivityResult(int requestCode, int resultCode, Intent data) {if (mFaceBookCallBack != null) {mFaceBookCallBack.onActivityResult(requestCode, resultCode, data);}
}
2)、接口
public interface OnLoginSuccessListener {void OnSuccess(LoginResult result);void onCancel();void onError(FacebookException error);
}
3)、LoginResult 类
public class LoginResult {
private final AccessToken accessToken;
private final Set<String> recentlyGrantedPermissions;
private final Set<String> recentlyDeniedPermissions;/*** The constructor.** @param accessToken The new access token.* @param recentlyGrantedPermissions The recently granted permissions.* @param recentlyDeniedPermissions The recently denied permissions.*/
public LoginResult(AccessToken accessToken,Set<String> recentlyGrantedPermissions,Set<String> recentlyDeniedPermissions) {this.accessToken = accessToken;this.recentlyGrantedPermissions = recentlyGrantedPermissions;this.recentlyDeniedPermissions = recentlyDeniedPermissions;
}/*** Getter for the new access token.* @return the new access token.*/
public AccessToken getAccessToken() {return accessToken;
}/*** Getter for the recently granted permissions.* @return the recently granted permissions.*/
public Set<String> getRecentlyGrantedPermissions() {return recentlyGrantedPermissions;
}/*** Getter for the recently denied permissions.* @return the recently denied permissions.*/
public Set<String> getRecentlyDeniedPermissions() {return recentlyDeniedPermissions;
}
}
- 2、如何使用呢?
1)、初始化Facebook
FaceBookLoginManager.getInstance().initFaceBook(this,new OnLoginSuccessListener() {@Overridepublic void onSuccess(LoginResult result) {}@Overridepublic void onError(FacebookException ex) {}@Overridepublic void onCancel() {}});
2)、设置回调
/*** 设置登录结果回调** @param requestCode 请求码* @param resultCode 结果码* @param data 数据*/
public void setOnActivityResult(int requestCode, int resultCode, Intent data) {if (mFaceBookCallBack != null) {mFaceBookCallBack.onActivityResult(requestCode, resultCode, data);}
}
3)、调用登录
mBtnSend=findViewById(R.id.btn_send);mBtnSend.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {FaceBookLoginManager.getInstance().faceBookLogin(MainActivity.this);}});
最后
到此,Facebook的登录就完成了,当然,上面的工具类还可以进一步封装,并且整理成一个在线依赖库。
如果你对打包成在线依赖库不太熟的话,建议你去看我的另一篇文章Android 发布项目到jitpack详解。
Android Facebook原生登录相关推荐
- Cocos Creator Android 平台 Facebook 原生登录
在做海外项目中,经常需要接入Facebook SDK ,现将CocosCreator Android 平台 Facebook 登录的接入流程记录下来,以备有需要的朋友做参考. 一.准备工作 1.首先在 ...
- Android facebook VK 登录与分享 开源SDK
自己封好的SDK 直接调用 就可以登录 包含facebook VK 登录分享 首先导入SDK 在项目gradle 添加FB,VK的引用 如果你不需要修改源码 直接导入arr文件 比较方便 reposi ...
- Android FaceBook sdk 登录接入
最近鼓捣一些外面的东西,学习了下FaceBook sdk的接入过程.当然会用到一些工具才可以进行这些操作的,这里就不多说了.大家可以看看这个Android 版 Facebook 登录官方文档,跟着步骤 ...
- Android Facebook第三方登录 20200529
2020年5月29日09点43分 登录Facebook开发者后台 创建应用 这里点击产品的加号,在右侧选择Facebook登录里面的设置.这样左边的产品下面才会有一个Facebook登录. 打开And ...
- Android FaceBook原生广告接入教程(精简版)
公司项目主要做海外市场,并且是资讯类的产品,所以接入一些广告公司的广告是一项不错的创收,昨天下午产品告诉我要马上接入Facebook的原生广告需求,于是下午就开始阅读Facebook广告接入的官方开发 ...
- Android 微信原生登录,支付,以及一些奇奇怪怪的问题。(wxApi.isWXAppInstalled 一直返回false)
导入依赖 implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.3.1' 登录 将微信注册到APP 可以在on ...
- 11: facebook原生登录
2019独角兽企业重金招聘Python工程师标准>>> 使用https://github.com/bisrael/cordova-plugin-facebook插件 cordova ...
- Android 集成原生google,facebook 登录分享sdk
前言 海外版app集成三方登录分享,早期采用umeng sdk,由于googleplay对用户隐私及用户数据的使用有比较严格规定.正好 umeng sdk会后台采集app信息,触发用户隐私相关政策条款 ...
- Android接入三方登录——QQ、微信、Facebook、Twitter
Android接入三方登录--QQ.微信.Facebook.Twitter 避坑指南 facebook错误1: facebook错误2: QQ 微信 Facebook Twitter 补充: 避坑指南 ...
最新文章
- 设计模式之原型模式prototype
- java访问map_java.map使用
- 用javah 导出类的头文件, 常见的错误及正确的使用方法
- wxWidgets:wxDragImage类用法
- Vue项目中Table设置 render 函数
- windows内核情景分析---进程线程1
- Java Pattern类和Matcher类的使用
- C#设计模式之23-访问者模式
- java链接mysql原始方法_java连接mysql数据库的方法
- JavaScript运算符优先级
- 征集对智能视觉组eIQ的使用反馈
- 微型计算机内存一般为多少,微型计算机内存容量的基本计量单位
- 2020 蓝桥杯大学模拟赛(三) - 程序设计:养猫题解
- 用于图像分割的卷积神经网络:从R-CNN到Mask R-CNN
- 合宙air105上手记录
- 儿童全脑九大能力,3-6岁的家长都应该知道
- CCSv5.3的安装
- 记录一次错误:Springboot访问前端页面“No mapping for GET”
- 2022年湖北省大学生电子设计竞赛A题(单项交流电子负载)赛后总结
- rpm, tar, gz, bz, bz2, rar, zip, lha, deb, 解压
热门文章
- java随机抓取网站上的图片_抓取一个网站特定的全部图片(JAVA)
- 如何清除WinME系统_restore目录下的病毒
- mysql normsinv_软件教程热搜榜_最新软件教程热门新闻_软件教程资讯大全-PC下载网资讯网...
- 树莓派常用的软件(记录)
- faceu激萌相机里面vue_faceu激萌是什么_faceu激萌功能特点介绍_3DM手游
- 困扰一周的配环境问题——RTX3090+CUDA11.1
- PSD 格式文件除了 PS ,还能用什么软件打开?
- 计算机一级考试实训在线做,程序设计能力
在线实训系统
- 概率统计Python计算:用样本均值和方差计算总体参数的点估计
- 关于windows下安装wampserver服务器系统丢失msvcr100.dll及VCRUNTIME140.dll的解决办法