При входе в базовом режиме ваше приложение получает доступ к общедоступному профилю и электронному адресу человека. Для доступа к дополнительной информации в профиле и публикации на Facebook материалов от имени этого человека необходимо запросить дополнительные разрешения:
поля общедоступного профиля по умолчанию — доступ к основной информации профиля;
разрешения на чтение — вся прочая информация, которую кто-то добавляет в свой профиль Facebook, защищена другими разрешениями на чтение;
разрешения на запись — приложениям требуется отдельное разрешение на публикацию материалов от имени человека.
Управлять разрешениями в приложении можно несколькими способами:
отправляя запросы какому-либо пользователю на Facebook, ваше приложение должно проверить необходимые разрешения и при необходимости запросить их;
если приложение получит сообщение о том, что разрешение Facebook отсутствует, оно должно запросить это разрешение и повторить попытку;
пользователи вашего приложения могут отменять разрешения на Facebook, но эту возможность можно также интегрировать в приложение;
вы можете разрешить людям удалять базовые привилегии входа в своем приложении (для этого нужно интегрировать механизм отзыва входа).
Подробнее о различных доступных разрешениях см. в руководстве по разрешениям.
Люди не всегда готовы предоставлять разрешения на публикацию, поэтому запрашивайте их только тогда, когда человек готов опубликовать что-либо из вашего приложения (а не во время первоначального входа).
При входе в базовом режиме ваше приложение получает доступ к общедоступному профилю и электронному адресу человека. Для доступа к дополнительной информации в профиле и публикации на Facebook материалов от имени этого человека необходимо запросить дополнительные разрешения.
В этом примере мы получаем user_status
. Вы можете передать эти разрешения на кнопку LoginButton
или в пользовательский интерфейс для входа и получения разрешений.
Измените код метода onCreateView()
в классе MainFragment
:
... LoginButton authButton = (LoginButton)view.findViewById(R.id.authButton); authButton.setFragment(this); authButton.setReadPermissions(Arrays.asList("user_status")); return view; ...
LoginManager
— это единичный экземпляр, который использует текущий маркер доступа элемента currentAccessToken. Текущий маркер доступа будет задан после успешного входа. Для запроса дополнительных разрешений нужно просто вызвать методы logInWithPermissionName
.
Методы logInWithPermissionName
всегда открывают пользовательский интерфейс и уведомляют человека о том, что нужны дополнительные разрешения (если это так). Чтобы получить дополнительные разрешения, создайте запрос, используя Facebook SDK для Android:
LoginManager.getInstance().logInWithReadPermissions( fragmentOrActivity, Arrays.asList("email"));
Используйте этот способ для запроса разрешений в дополнение к уже полученным. Его можно использовать после первоначального входа.
Вы можете запрашивать многие разрешения на чтение, перечисленные в Справке по разрешениям.
Во время входа вы можете запрашивать любое количество разрешений на чтение или публикацию. Если запрашивается более четырех разрешений, количество входов обычно существенно сокращается.
С 24 апреля 2018 г. разрешение pubish_actions
удалено. Подробнее см. в журнале важных изменений. Чтобы дать пользователям приложения возможность делиться контентом на Facebook, рекомендуем использовать наши средства публикации.
Запрос разрешений на публикацию через publish_actions
при входе создает второй шаг в пользовательском интерфейсе входа. Поэтому при входе следует запрашивать как можно меньше разрешений на чтение. Все дополнительные разрешения на чтение и разрешения публикацию нужно запрашивать только тогда, когда пользователь действительно нуждается в них. Сведения об оптимизации запросов разрешений см. в разделе Оптимизация разрешений.
Для запроса разрешений на публикацию в приложении можно использовать LoginManager
.
LoginManager.getInstance().logInWithPublishPermissions( fragmentOrActivity, Arrays.asList("publish_actions"));
Используйте этот способ для запроса разрешений в дополнение к тем, которые уже получены приложением при входе.
Люди могут давать не все разрешения, которые вы запрашиваете в дополнение к разрешениям public profile
, предоставляемым во время входа.
Чтобы получить список разрешений, связанных с текущим маркером доступа, используйте следующий вызов:
AccessToken.getCurrentAccessToken().getPermissions();
Чтобы получить список отклоненных разрешений, используйте такой вызов:
AccessToken.getCurrentAccessToken().getDeclinedPermissions();
Предусмотрите обработку случаев, когда человек отказывается предоставить приложению одно из запрошенных разрешений. Если вашему приложению для работы требуется одно из отклоненных разрешений, вы можете повторно запросить его с помощью LoginManager
, как показано в примерах выше.
Если вы реализовали вход через Facebook, приложение может дополнительно запросить у человека разрешения на доступ к некоторым его персональным данным.
Если приложение запрашивает дополнительные разрешения, кроме разрешений для полей общедоступного профиля по умолчанию и электронного адреса, специалисты Facebook могут предоставить его после предварительной проверки. Узнайте больше о том, в чем она заключается и как успешно пройти ее.
Руководство по проверке входа