Android Facebook原生登入
前言:
在寫這篇文章之前先吐槽一下自己的英文水平,之前一直沒感覺,因為做的專案都是國內的專案,很少看英文文件。但是,自從換了一個工作之後, 做的是國外的專案。並且,寫了給第三方寫了一個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 accessTokenThe new access token. * @param recentlyGrantedPermissions The recently granted permissions. * @param recentlyDeniedPermissionsThe 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詳解 。