Android 接入Facebook原生登錄(非firebase方式)

參考官方文檔facebook登錄

自備科學上網工具。

首先創建自己的項目,或者基于已有項目上進行設置。

然后選擇自己的項目,進入到下一步控制面板,在產品里選擇自己想要的功能,比如說登錄或者分析

選擇Facebook登錄后,開始代碼接入,到這里我們可以從官方文檔的第三步直接開始了,在項目的build.gradle文件里添加jcenter,在APP的build.gradle里添加Facebook登錄的依賴

```

????jcenter();

????implementation 'com.facebook.android:facebook-login:[8.1)';

```

我因為還用了Facebook分析,所以直接接入了整個依賴

? ??implementation'com.facebook.android:facebook-android-sdk:9.0.0';

接下來需要在strings.xml文件里將應用編號寫入

? ??<string name="facebook_app_id">00000000</string>?

????<string name="fb_login_protocol_scheme">fb00000000</string>

上面的應用編號,在文檔里有,直接拷貝即可,你選的是什么項目,文檔里提供的代碼就是對應項目的id

再然后就是設置包名跟默認活動類名了,都是全路徑

然后需要設置開發密鑰跟發布密鑰,建議兩個都給設置上,代碼如下

開發密鑰:

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME\.android\debug.keystore" | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" sha1 -binary | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" base64

發布密鑰:

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64

如果密鑰有問題,一般是測試環境下的密鑰不對,可采用代碼獲取然后填上去

try { PackageInfo info = getPackageManager().getPackageInfo( "{your-package-name}", //Insert your own package name. PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) {

} catch (NoSuchAlgorithmException e) {? ? ? ? ? ? ? ? ?

}

這個代碼可以順便測試下自己設置的release包是否正確,到這一步基本上接入就已經完成了,我們可以通過代碼來嘗試下登錄是否OK,fb有提供默認的按鈕,較為簡單,本文不做過多介紹,如果想使用不同的UI,可隨便自定義一個按鈕,然后注冊fb登錄回調

callbackManager = CallbackManager.Factory.create();

LoginManager.getInstance().registerCallback(callbackManager,

? ? ? new FacebookCallback<LoginResult>() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onSuccess(LoginResult loginResult) {

? ? ? ? ? ? ? ? // App code

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onCancel() {

? ? ? ? ? ? ? ? // App code

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onError(FacebookException exception) {

? ? ? ? ? ? ? ? // App code?

? ? ? ? ? ? }

});

在activity的回調里調用上面我們實現的Facebook回調,將數據傳給Facebook的回調

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

? ? callbackManager.onActivityResult(requestCode, resultCode, data);

? ? super.onActivityResult(requestCode, resultCode, data);

}

剩下的就是自己的邏輯處理了,如果要獲取登錄狀態,代碼如下:

AccessToken accessToken = AccessToken.getCurrentAccessToken();

boolean isLoggedIn = accessToken != null && !accessToken.isExpired();

如果要執行登錄功能,可在自定義的按鈕里寫以下代碼:

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容