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.LoginButtonandroid: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>() { @Overridepublic void onSuccess(LoginResult loginResult) { //成功時的處理} @Overridepublic void onCancel() { //取消不登入時的處理} @Overridepublic 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.測試一下吧~














留言
張貼留言