在寫這篇文章以前先吐槽一下本身的英文水平,以前一直沒感受,由於作的項目都是國內的項目,不多看英文文檔。可是,自從換了一個工做以後,
作的是國外的項目。而且,寫了給第三方寫了一個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詳解。