參考官方文檔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"));