"Приложение должно запрашивать базовое разрешение на чтение во время установки"
Я использую 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.}
Что здесь происходит? Отображение двух пользовательских всплывающих окон - это менее идеальный пользовательский интерфейс.
Ответы
Ответ 1
В первый раз вы должны запросить разрешения на чтение. Вы не можете сначала аутентифицировать пользователя с любыми разрешениями публикации/записи. Что вам следует делать после этого, когда это имеет смысл в вашем приложении, попросите разрешение publish_stream. Определенно не делайте первоначального разрешения, а затем сразу же запрашивайте разрешение publish_stream.
См. это примечание в разделе https://developers.facebook.com/docs/tutorial/iossdk/upgrading-from-3.0-to-3.1/, раздел "Запрос на чтение и запись разрешений отдельно". Хотя это относится и к SDK для iOS для Facebook, это расширение того же требования во встроенной структуре.
Ответ 2
Я хотел бы добавить, что в документах 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.
Несоблюдение этого требования приводит к той же ошибке.
Ответ 3
В последнем 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 - массив строк, представляющих чтение разрешений для запроса во время потока аутентификации. Основной_инфо разрешение должно быть явно запрошено при первом входе в систему, и нет более длинный вывод (при условии активной миграции). Не допускается передать разрешения публикации для этого метода.