一、啟用『單一登入』
要使用FB登入功能,我們須把單一登入的功能開啟
(https://developers.facebook.com/apps/Your FB App ID/settings/)
(https://developers.facebook.com/apps/Your FB App ID/settings/)
二、新增Facebook 登入按鈕
在layout中加入LinkButton (Facebook所提供客製化按鈕)
<com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:layout_marginBottom="30dp"/>
🌟使用 LoginButton ,我們可以一併用到以下 SDK 提供的類別:
- LoginManager:使用要求的讀取或發布權限起始登入程序。
- CallManager:用於將呼叫傳回至 Facebook SDK 以及您的已註冊回呼。應該從起始活動 activity 或片段 fragment 的 onActivityResult 呼叫此函數。
- AccessToken:使用此類型的圖形 API 要求(GraphAPI)。它會顯示用戶編號及被接受和被拒絕的權限。
- Profile:此類別具有已登入用戶的基本資訊。
LoginButton 是套件 LoginManager 中可的 UI 控制項。使用者點擊這個按鈕時,將會以 LoginManager 中設定的權限初始化登入。此按鈕會追蹤登入狀態,並根據用戶的驗證狀態顯示正確的文字。
三、增加程式部分
由於目前的 APP 使用 Fragment 設計居多,所以 FB 開發者教學裡是以 Fragment 為主要教學方式。
1. 由於前面四種可用類別(LoginManager、CallManager、AccessToken、Profile)
如果有用到都會是反覆使用,所以可設定在此對應Activity欄位裡)
如果有用到都會是反覆使用,所以可設定在此對應Activity欄位裡)
CallbackManager callbackManager;
AccessToken accessToken;
2.首先要初始化FacebookSdk (一定要先)
FacebookSdk.sdkInitialize(getApplicationContext());
3.連結程式與Layout的Linkbutton
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
4.建立CallbackManager
callbackManager = CallbackManager.Factory.create();
5.設定當LoginButton收到回傳(callback)的處理動作→成功、失敗、取消
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { //回傳)的處理動作→成功、失敗、取消 });
6.將登入成功、取消、失敗等動作加入
//成功
如果登入成功,APP 會收到一組 AccessToken (剛剛程式裡的欄位變數 accessToken),之後要用到 graphAPI 的地方都用這組 token。
接著送一個 request 出去,在 onCompleted 裡面會拿到一個傳入變數 JSONObject (變數名稱是 object),包裹著使用者資訊(name 使用者姓名、link 個人頁面、id)。
@Override
public void onSuccess(LoginResult loginResult) {
accessToken = loginResult.getAccessToken(); //之後也許還會用到,先存起來
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
//當RESPONSE回來的時候
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//讀出姓名、ID、網頁連結
Log.d("FB" , "complete");
Log.d("FB" , object.optString("name"));
Log.d("FB" , object.optString("link"));
Log.d("FB" , object.optString("id"));
}});
//包入你想要得到的資料,送出 request
Bundle parameters = new Bundle();
parameters.putString("fields" , "id,name,link");
request.setParameters(parameters);
request.executeAsync();
}
(可利用圖形API測試取得代碼➜
請見圖形API測試工具文章)
//取消onCancel
@Override public void onCancel() { Log.d("FB" , "CANCEL"); }//失敗onError
@Override
public void onError(FacebookException exception) {
Log.d("FB", exception.toString());
}
沒有留言:
張貼留言