在基本登入期間,應用程式會取得存取用戶公開個人檔案和電郵地址的權限。如需存取其他個人檔案資訊,或代表用戶在 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 的審查才能發佈。進一步了解審查程序,以及通過審查的所需條件。
登入審查指南