Android Studio Facebook account API安裝及使用

曾國維
7 min readJan 14, 2018

--

選擇一個應用程式或建立一個新的應用程式

在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

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response