前言:
在写这篇文章之前先吐槽一下自己的英文水平, 之前一直没感觉, 因为做的项目都是国内的项目, 很少看英文文档. 但是, 自从换了一个工作之后,
做的是国外的项目. 并且, 写了给第三方写了一个 SDK, 需要使用 Google 登录和 Facebook 登录. 那么, 就必须用原生登录, 说到原生登录, 那么就逃不掉要看
英文文档. 看了英文文档之后才感觉自己的英文是多么的差劲. 好了, 废话不多说, 我们进入今天的正题. 如何使用 Facebook 登录.
首先
当然是查看官方文档了, 官方文档介绍的很清楚, 并且更新比较及时. 如果你不太想看英文文档, 而去各种百度. 那么, 你可能会遇到各种各样的问题.
1, 引入 Facebook 的在线依赖
- //Facebook 登录
- implementation 'com.facebook.android:facebook-login:4.39.0'
2, 在清单文件中配置在 Facebook 申请的 appID 和 scheme
- <!-- facebook 登录 -->
- <meta-data
- Android:name="com.facebook.sdk.ApplicationId"
- Android:value="@string/facebook_app_id" />
- <activity
- Android:name="com.facebook.FacebookActivity"
- Android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
- Android:label="@string/app_name" />
- <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/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>() {
- @Override
- public void onSuccess(LoginResult loginResult) {
- if (loginResult != null) {
- if(mListener=null){
- mListener.onSuccess(result);
- }
- }
- }
- @Override
- public void onCancel() {
- if(mListener=null){
- mListener.onCancel();
- }
- }
- @Override
- public 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() {
- @Override
- public void onSuccess(LoginResult result) {
- }
- @Override
- public void onError(FacebookException ex) {
- }
- @Override
- public 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() {
- @Override
- public void onClick(View view) {
- FaceBookLoginManager.getInstance().faceBookLogin(MainActivity.this);
- }
- });
最后
到此, Facebook 的登录就完成了, 当然, 上面的工具类还可以进一步封装, 并且整理成一个在线依赖库.
如果你对打包成在线依赖库不太熟的话, 建议你去看我的另一篇文章 Android 发布项目到 jitpack 详解.
来源: http://www.jianshu.com/p/71b5d3739cd6