在基本登入期間,應用程式會取得權限,來存取用戶的公開個人檔案和電子郵件。若要存取其他個人檔案資訊或代表用戶在 Facebook 上發佈內容,您必須要求所需的權限:
預設公開個人檔案欄位:可供存取基本的個人檔案資訊。
讀取權限:其他由用戶新增至 Facebook 個人檔案的所有資訊皆受到其他讀取權限的保護。
寫入權限:應用程式需要個別的發佈權限來代表用戶張貼內容。
以下是在應用程式中管理權限的方式:
當應用程式向用戶發送 Facebook 要求時,應檢查是否具備必要的權限,然後依需求要求權限。
當 Facebook 傳回缺少權限錯誤時,應用程式應透過要求權限和重新嘗試來處理。
使用應用程式的用戶,可在 Facebook 中撤銷權限,但您也可以將此機制建置於應用程式內。
您還可透過建置能完全撤銷登入的機制,讓用戶從應用程式內移除基本的登入權限。
如需深入瞭解各種可用權限,請參閱權限指南。
用戶對於授予發佈權限尤其敏感,因此您應該只在用戶準備要從應用程式發佈內容時,才要求發佈權限,而不是在初始登入時就要求權限。
在基本登入期間,應用程式會取得權限,來存取用戶的公開個人檔案和電子郵件。如需存取其他個人檔案資訊或代表用戶在 Facebook 上發佈內容,您必須要求必要權限。
此處我們獲得 user_status
。您可將這些權限傳入 LoginButton
按鈕或自訂用戶介面來執行登入和授權。
在 MainFragment
類別中,修改 onCreateView()
的程式碼:
... LoginButton authButton = (LoginButton)view.findViewById(R.id.authButton); authButton.setFragment(this); authButton.setReadPermissions(Arrays.asList("user_status")); return view; ...
LoginManager
為單例執行個體,搭配 AccessToken 的 currentAccessToken 使用。currentAccessToken 會在成功登入後設定。如需要求其他權限,只要呼叫 logInWithPermissionName
方法即可。
logInWithPermissionName
方法一律會開啟用戶介面,並在需要時提示用戶要求其他權限。如需向用戶取得其他權限,請使用 Facebook Android SDK 提出以下要求:
LoginManager.getInstance().logInWithReadPermissions( fragmentOrActivity, Arrays.asList("email"));
以此方式要求尚未授予應用程式的權限。您可在初始登入後使用上述方式。
您可要求權限參考資料中所列的許多讀取權限。
您可在登入期間要求任意數量的讀取權限和發佈權限。但如果要求超過四項權限的話,完成登入的次數會大幅降低。
如果在登入期間要求具有 publish_actions
的發佈權限,會在登入用戶介面中產生第二個步驟。因此,您應該在登入期間要求最低數量的讀取權限,然後在用戶確實需要時才要求其他任何權限或發佈權限。如需最佳化權限要求,請參閱最佳化權限。
如需在應用程式中要求發佈權限,您可使用 LoginManager
。
LoginManager.getInstance().logInWithPublishPermissions( fragmentOrActivity, Arrays.asList("publish_actions"));
這除了應用程式在登入期間已經收到的權限之外,還可以要求其他權限。
用戶可以僅授予您要求的部分權限,但在登入時授予的 public profile
除外。
如需取得與目前存取權杖相關的權限清單,請呼叫:
AccessToken.getCurrentAccessToken().getPermissions();
如需取得受拒權限的清單,請呼叫:
AccessToken.getCurrentAccessToken().getDeclinedPermissions();
用戶有可能會拒絕將您要求的其中某項權限授予您的應用程式,因此您必須預先設想如何處理這種情況。如果應用程式必須具備其中一項受拒權限才能運作,您可以如上述範例所示,使用 LoginManager
再次要求這些權限。
您實作「Facebook 登入」時,您的應用程式可以選擇要求用戶提供有關其個人資料子集的權限。
如果您的應用程式要求預設公開個人檔案欄位和電子郵件以外的權限,就必須先經過 Facebook 審查才能發佈。進一步瞭解審查程序,以及要符合哪些條件才能通過審查。
登入審查指南