Подтвердить что ты не робот

Ограничить разрешения при доступе к Facebook с использованием структуры учетных записей

Мне нужна помощь в этом...

Итак, проблема, с которой я сталкиваюсь, заключается в том, что при получении учетной записи Facebook из ACAccount представление предупреждения сообщает слишком много разрешений. Я получаю окно предупреждения, когда я использую логин ACAccount для facebook.

В нем говорится APP_NAME would like to access your basic profile info and list of friends

Это отображается даже тогда, когда мои разрешения установлены пустым массивом.

NSArray * FB_PERMISSIONS = @[];
// or FB_PERMISSIONS = @[@"public_profile", @"likes", @"email"];
// It does not matter what the array is -> The alert has extra sentences.

ACAccountType *FBaccountType= [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *key = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"];;
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,FB_PERMISSIONS,ACFacebookPermissionsKey, nil];
[_accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:

Что я пытаюсь сделать здесь?

Мне просто нужно "public_profile", "email" и "нравится". Предупреждение сообщает APP_NAME would like to access your profile, and likes on your behalf. In addition, APP_NAME would like to access your basic profile info and list of friends

Почему это второе предложение? Как я могу избавиться от него? Я вижу несколько приложений, где вторая строка, в которой говорится об основном профиле и списке друзей, не отображается.

Ожидаемый результат:

APP_NAME would like to access your profile and likes.

Update:

Проверьте мой ответ для решения.

4b9b3361

Ответ 1

В документах FB SDK ничего не говорится об этом. Они сделали это так, чтобы пользователи могли использовать пользовательский интерфейс Pop Pop Facebook и выбирать разрешения, которые они хотят разрешить. Я думаю, что философия дизайна Facebook заключается в том, чтобы дать пользователю больше контроля и прозрачности. Но при всплывающем меню ОС скрывается множество разрешений. Я думаю, это философия Apple, чтобы показать минимальную информацию. Это лучше всего подходит для сценариев разработчиков, поскольку пользователи обычно выходят из себя, когда видят так много разрешений, задаваемых приложением.

В любом случае, если вы посмотрите FBSDKLoginManager+Internal.h, вы можете проверить возможности входа в систему. Дальше копая, я обнаружил, что FBSDKLoginButton бессмыслен. Лучший способ сделать это - использовать свой собственный экземпляр FBSDKLoginManager и установить тип учетной записи системы как native, а если вы получите error code 306, вернитесь к механизму входа по умолчанию.

Как-то → > Этот способ не показывает дополнительных разрешений. Я понятия не имею, как это сделать. Все, что я знаю, это то, что теперь все встает на свои места.

Кроме того, вам нужно будет настроить отдельный прослушиватель для ACAccountStoreDidChangeNotification, чтобы вы могли привязать некоторые кромки. Но да,\m/

Ответ 2

Исправление

Исправление этой проблемы связано с добавлением кода в файл заголовка представления, а также добавлением кода в файл вида. Примеры кода приведены ниже.

В файл заголовка представления добавьте:

//  ViewController.h
#import <FBSDKLoginKit/FBSDKLoginKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet FBSDKLoginButton *loginButton;
@end

И в файл вида добавьте:

loginButton.readPermissions = 
@[@"public_profile", @"email", @"likes"];

Обратите внимание, что комментарий в первом примере был только для справки.

Почему это произошло?

Причина, по которой возникла ваша проблема, заключалась в том, что по умолчанию для платформы учетных записей и Facebook API подразумевается каждое разрешение. Это требует от вас более конкретного кода. Я уверен, что вы должны сделать первый пример кода, который должен был попасть в ваш заголовочный файл. Я понимаю, что приведенный выше код не является тем, что вы поместите в файл, над которым работаете, но он просто дает вам общее представление об этом.

Все еще запутано?

Если вы все еще смущены, прокомментируйте ниже, и я попытаюсь обновить свой ответ. Было бы очень полезно, если бы вы могли отправить код, который вы делали, с массивами, заполненными не пустым. Если бы я был неясен, скажите мне, и я сделаю все возможное, чтобы помочь. Извините, если есть какие-либо неудобства!

Источники

В основном, я нашел информацию здесь: https://developers.facebook.com/docs/facebook-login/permissions/overview и здесь: https://developers.facebook.com/docs/facebook-login/ios#permissions Facebook очень заслуживает доверия и заслуживает доверия. Я думаю...

Ответ 3

Есть ли причина, по которой вы не используете API Facebook? Запрос доступа через API iOS потребует, чтобы пользователь был зарегистрирован в Facebook через настройки iOS. Если вы сделаете тот же запрос с Facebook API, он сможет определить, зарегистрирован ли пользователь через настройки, приложение FB или Safari. И если пользователь не войдет в систему, он попросит их сделать это (в отличие от просто ошибки и указания им сделать это с помощью настроек)

Версия 4.X: https://developers.facebook.com/docs/facebook-login/ios/permissions

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithReadPermissions:@[@"public_profile", @"likes", @"email"]
                fromViewController:self
                           handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
  //TODO: process error or result
 }];

Версия 3.X

[FBSession openActiveSessionWithReadPermissions: @[@"public_profile", @"likes", @"email"]
                                   allowLoginUI:YES
                              completionHandler:
 ^(FBSession *session, FBSessionState state, NSError *error) {
     // Handle completion by calling AppDelegate
 }];