Управление разрешениями в Android

При входе в базовом режиме ваше приложение получает доступ к общедоступному профилю и электронному адресу человека. Для доступа к дополнительной информации в профиле и публикации на 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 могут предоставить его после предварительной проверки. Узнайте больше о том, в чем она заключается и как успешно пройти ее.

Руководство по проверке входа