"Приложение должно запросить базовое разрешение на чтение во время установки"


Я использую встроенные в iOS фреймворки для подключения. После запроса разрешений "publish_stream" FB возвращает ошибку:

Error Domain=com.apple.accounts Code=7 "The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time." UserInfo=0x145ad6a0 {NSLocalizedDescription=The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.}

Что здесь происходит? Отображение двух всплывающих окон разрешений пользователя-это далеко не идеальный пользовательский опыт.

3 18

3 ответа:

В самый первый раз вы должны попросить разрешения на чтение. Вы не можете изначально авторизировать пользователя с любым типом разрешений на публикацию/запись. Что вы должны сделать после этого, там, где это имеет смысл в вашем приложении, попросите разрешения publish_stream. Определенно не делайте первоначальное разрешение, а затем немедленно попросите разрешения publish_stream.

Смотрите эту заметку в https://developers.facebook.com/docs/tutorial/iossdk/upgrading-from-3.0-to-3.1/, раздел " просьба о прочтении & Разрешения На Запись Отдельно". Даже если это относится к Facebook SDK для iOS, это расширение того же требования во встроенном фреймворке.

Я хотел бы добавить, что в документах Facebook есть дополнительная оговорка:

// if a user has *never* logged into your app, you MUST include one of
// "email", "user_location", or "user_birthday".  Other read 
// permissions can also be included here.

Неспособность сделать это приводит к той же ошибке.

В последнем SDK (v3. 5) Вам также нужно передать @"basic_info" в массиве разрешений. Раньше это подразумевалось, но теперь нет. Если вы этого не сделаете, вы получите сообщение "приложение должно запросить базовое разрешение на чтение во время установки"

  [FBSession openActiveSessionWithReadPermissions:@[@"email", @"basic_info"]
                                 allowLoginUI:YES
                            completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                              [self sessionStateChanged:session state:state error:error];
                            }];

Из метода docs:

ReadPermissions-массив строк, представляющих чтение разрешения для запроса во время потока проверки подлинности. Основная информация разрешение должно быть явно запрошено при первом входе в систему, и нет более длинный вывод, (при условии активной миграции.) Это не допускается. чтобы передать этому методу разрешения на публикацию.