При входе в базовом режиме ваше приложение получает доступ к общедоступному профилю человека. Чтобы получить доступ к дополнительной информации профиля или опубликовать контент на Facebook от лица этого пользователя, нужно запросить дополнительные разрешения. Подробнее см. в справке по разрешениям при входе через Facebook.
Ваше приложение должно управлять разрешениями следующим образом:
Запросы API Graph. Прежде чем отправлять запросы API Graph, убедитесь в том, что у вас есть необходимые разрешения, а если понадобится, запросите их.
Отсутствующие и отозванные разрешения. Если разрешение Facebook отсутствует или отозвано, вам нужно попросить предоставить или восстановить его. Подробнее см. в разделе Обработка ошибок, SDK для iOS.
Своевременность запросов. Вы сможете повысить коэффициент конверсии, если будете запрашивать разрешения, только когда они действительно нужны, и предоставите функции, для использования которых не требуются все разрешения.
Чтобы запросить разрешения при входе с помощью FBSDKLoginButton
, настройте свойство permissions
:
let loginButton = FBLoginButton() loginButton.permissions = ["public_profile", "email"]
Если вместо FBSDKLoginButton
вы используете собственную кнопку входа, можно выполнять вход с помощью LoginManager
:
override func viewDidLoad() { super.viewDidLoad() ... loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside) } @objc func loginButtonClicked() { let loginManager = LoginManager() loginManager.logIn(permissions: ["email"], from: self) { result, error in // Process result or error } }
Перед вызовом loginManager
нужно проверить, доступен ли существующий маркер. Подробнее см. в статье Вход через Facebook для iOS.
Чтобы узнать, какие разрешения у вас уже есть, проверьте FBSDKAccessToken
.
if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"email"]) { // TODO: publish content. } else { FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; [loginManager logInWithPublishPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { //TODO: process error or result. }]; }
Чтобы узнать, отклонил ли кто-то ваш запрос разрешений, изучите FBSDKLoginResult
, возвращенный в обратный вызов FBSDKLoginManager
или в делегат FBSDKLoginButton
:
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; [loginManager logInWithPublishPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if ([result.declinedPermissions containsObject:@”email”]) { // TODO: do not request permissions again immediately. Consider providing a NUX // describing why the app want this permission. } else { // ... } }];
Чтобы узнать об ошибках разрешений при отправке запросов API Graph, проверьте объект NSError
:
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/feed" parameters:@{ @"message" : @"This is a status update" } HTTPMethod:@"POST"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if ([error.userInfo[FBSDKGraphRequestErrorGraphErrorCode] isEqual:@200]) { NSLog(@"permission error"); } }];
Подробнее см. в разделе Обработка ошибок, SDK для iOS.
Запросить дополнительные разрешения можно с помощью FBSDKLoginManager
. Отклоненные разрешения можно запросить повторно с использованием методов logInWith*:
. FBSDKLoginManager
определяет повторный запрос по доступности [FBSDKAccessToken currentAcccessToken]
.
Вы можете позволить людям отменять или отзывать разрешения, предоставленные вашему приложению. Например, в приложении может быть страница с настройками, где пользователи могут отключить некоторые функции.
Чтобы отозвать разрешения, выполните вызов к конечной точке API Graph.
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/email" parameters:nil HTTPMethod:@"DELETE"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // ... }];
Если вы хотите отозвать все права для этого приложения, выполните вызов API Graph, который удалит все разрешения. Используйте код из раздела Отзыв разрешений и измените путь запроса на /me/permissions
.
Для целей тестирования вы можете отменить права на отзыв разрешений без использования своего приложения. Сделать это можно с помощью Graph API Explorer.
Get Token
> Get Access Token
.Clear
.Отзыв одного разрешения:
/me/permissions/{permission-name}
, где {permission-name}
— имя разрешения, которое нужно отозвать, например email
.GET
на DELETE
.Submit
.