選擇一個應用程式或建立一個新的應用程式
在dependencies裡面加入implementation 'com.facebook.android:facebook-login:4.29.0'
在 strings.xml裡面加入兩條:
<string name="facebook_app_id">選擇APP的ID</string>
<string name="fb_login_protocol_scheme">fb+選擇APP的ID</string>
在 AndroidManifest.xml裡面的application標籤裡面加入:
<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>
之後要先去下載OpenSSL用它來產生相應的key:http://gnuwin32.sourceforge.net/packages/openssl.htm 選 Complete package, except sources
下載安裝完後到C:\Program Files (x86)\GnuWin32\bin裡面把openssl.exe複製放到C:\Users\CIIS(使用者名稱)\.android,打開cmd先cd到C:\Users\CIIS(使用者名稱)\.android再輸入 keytool -exportcert -alias
androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
密碼android得到密碼並在FB開發網頁上輸入。
在layout裡面加入com.facebook.login.widget.LoginButton元件,然後在java裡面宣告CallbackManager,然後在GraphRequest裡面看要request那些user的attribute,回傳在GraphJSONObjectCallback中,用JsonObject去抓
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton;
loginButton = findViewById(R.id.fb_sign);
loginButton.setReadPermissions("email");
// 在 fragment內使用的話
//loginButton.setFragment(this);
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d("TAG","success");
AccessToken accessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
System.out.println(object);
// Application code
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,picture");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// App code
Log.d("TAG","cancel");
}
@Override
public void onError(FacebookException exception) {
// App code
Log.d("TAG","error");
}
});
其實也可以直接用callbackManager去request:
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
}
});
還有記得要在onActivityResult function的super前面加上:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
最後是可以取得道的帳戶屬性:
https://developers.facebook.com/docs/facebook-login/permissions#reference