Facebook SDK [android] step.3 Facebook登入與基本權限


Facebook SDK [android]          :程式碼           :補充說明資料
[建立專案與申請應用程式編號]
step.1建立專案與申請應用程式編號

[在專案中加入編號]
step.2在專案中加入編號



一、前置作業(詳請參考上一篇文章 Facebook SDK )

1.使用Maven來下載設定相關函式庫


a.建立完專案,將Project結構的視角切換到『Project』


b.找到『build.gradle』(專案),加入程式碼 


repositories { jcenter() }



c.到『build.gradle』( /app/build.gradle ),加入程式碼 

implementation 'com.facebook.android:facebook-android-sdk:[4,5)'

2.設定應用程式:將應用程式編號設定於string.xml

<string name="app_name">專案名稱</string>
<string name="facebook_app_id">應用程式編號</string>
<string name="fb_login_protocol_scheme">fb+應用程式編號</string>

3.將應用程式與自己的套件名稱和預設類別建立連結

4.並填入自己電腦的開發金鑰

二、新增登入按鈕

1.AndroidManifest.xml檔案中,在application元素後方加入

a.uses-permissionm元素
<uses-permission android:name="android.permission.INTERNET"/>

b.facebook應用程式編號(利用上方在string設定的應用程式編號)
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
c.使用facebook程式(利用上方在string設定的專案名稱)
<activity android:name="com.facebook.FacebookActivity"    android:configChanges=        "keyboard|keyboardHidden|screenLayout|screenSize|orientation"    android:label="@string/app_name" />

d.chrome自訂頁籤(TAB)等活動(activity)與篩選器(filter)(利用上方在string設定的fb+應用程式編號)
<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="fb212876559470511" />
</intent-filter>
</activity>

2.在layout檔中加入登入按鈕(記得要排版面喔)
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>

3.在MainActivity.java檔中完成下方程式(或是在任何activity)

a.先設定好要使用的欄位
LoginButton loginButton;
CallbackManager callbackManager;
b.建立registerFacebook()方法
c.由於程式很長,所以寫在registerFacebook()方法中
。在OnCreate中進行初始化
callbackManager = CallbackManager.Factory.create();
loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions("email");

。按下登入按鈕loginButton時必須考慮登入的結果;
成功或失敗或是無法預期的錯誤等,
所以要註冊回呼(callback)的機制(一般來說也是在onCreate時進行)
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override 
public void onSuccess(LoginResult loginResult) {
//成功時的處理 
}
 @Override
public void onCancel() {
//取消不登入時的處理
}
@Override
public void onError(FacebookException error) {
        //發生無法預期的『例外』情況    }
});
d.建立onActivityResult方法來呼叫回呼結果(CODE-Override Method)
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
    callbackManager.onActivityResult(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
}
所有與FB有關的activity應該都要透過callbackManger來記錄回呼權限
所以都要上述onActivityResult方法~

4.在專案中檢查是否登入成功或是目前登入狀態
一但登入成功,FB應用程式會透過上圖的『LoginResult loginResult』註冊一個SharedPreference
loginResult裡會有註冊的狀態和新增或取消的相關權限

(補充)5.客製化登入按鈕
如果想要客製化按鈕的話,就使用普通的Button或是ImageButton等
(下方圖片使用普通Button為例)

有些權限只需要讀取,如
Arrays.asList("public_profile"公開的個人檔案 
Arrays.asList("user_status") 使用者狀態 
Arrays.asList("email ") 使用者 email (通常也是帳號) 

呼叫方式
LoginManager.getInstance().logInWithReadPermissions
( Activity 的名稱.this, Arrays.asList("email") );

有些需要寫入或是 
publish LoginManager.getInstance().logInWithPublishPermissions(
fragmentOrActivity, Arrays.asList("publish_actions") );

取得目前同意的所有權限 
AccessToken.getCurrentAccessToken().getPermissions(); 

取得目前拒絕的所有權限 
AccessToken.getCurrentAccessToken().getDeclinedPermissions(); 


6.建立測試人員
角色-測試人員-新增測試人員
(注意!需要fbid或是username)


7.測試一下吧~



留言

這個網誌中的熱門文章

[unity2D] 透過鍵盤進行上下左右移動

[unity 2D] 簡單認識button(上)

[ 開放資料part1 ] [android] 利用EXCEL檔案格式來取得開放資料吧