Android Facebook原生登陸

轉載請標明出處,謝謝 Android Facebook原生登陸

前言:

在寫這篇文章以前先吐槽一下本身的英文水平,以前一直沒感受,由於作的項目都是國內的項目,不多看英文文檔。可是,自從換了一個工做以後,
  作的是國外的項目。而且,寫了給第三方寫了一個SDK,須要使用Google登陸和Facebook登陸。那麼,就必須用原生登陸,說到原生登陸,那麼就逃不掉要看
  英文文檔。看了英文文檔以後才感受本身的英文是多麼的差勁。好了,廢話很少說,咱們進入今天的正題。如何使用Facebook登陸。
複製代碼

首先

固然是查看官方文檔了,官方文檔介紹的很清楚,而且更新比較及時。若是你不太想看英文文檔,而去各類百度。那麼,你可能會遇到各類各樣的問題。android

  • 一、引入Facebook的在線依賴app

    //facebook登陸
    implementation 'com.facebook.android:facebook-login:4.39.0'
    複製代碼
  • 二、在清單文件中配置在Facebook申請的 appID和schemeide

    <!-- 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)、Facebook登陸封裝類post

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)、接口this

public interface OnLoginSuccessListener {

void OnSuccess(LoginResult result);

void onCancel();

void onError(FacebookException error);
}
複製代碼

3)、LoginResult 類spa

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;
}
}
複製代碼
  • 二、如何使用呢?

1)、初始化Facebookcode

FaceBookLoginManager.getInstance().initFaceBook(this,
            new OnLoginSuccessListener() {
                @Override
                public void onSuccess(LoginResult result) {
                   
                }

                @Override
                public void onError(FacebookException ex) {
                    
                }

                @Override
                public void onCancel() {
                  
                }

            });
複製代碼

2)、設置回調token

/**
 * 設置登陸結果回調
 *
 * @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詳解

相關文章
相關標籤/搜索