Facebook SDK - всплывающее окно входа в iOS6 нельзя закрыть

В моем приложении для iPhone я хочу, чтобы пользователь мог поделиться ссылкой на Facebook.

Когда они нажимают «поделиться», я использую следующий код для входа в Facebook с помощью нового SDK 3.1, затем использую FBRequestConnection в обработчике завершения (простой publish_action).

[FBSession openActiveSessionWithPublishPermissions:@[@"publish_actions"] defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:true completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {

    // Now call FBRequestConnection to post in the stream

}];

Когда у пользователя установлено приложение Facebook, оно просто делегирует вход в приложение. Однако, когда они этого не делают, он открывает страницу входа в WebView.

В iOS 5 он открывает Mobile Safari:

введите здесь описание изображения

Моя проблема в iOS 6, я получаю тот же поток, но вместо этого в модальном всплывающем окне (поверх моего приложения).

введите здесь описание изображения

У меня есть 2 проблемы с всплывающим окном:

<сильный>1. Закрытие

Его нельзя отменить или отменить. Для сравнения, приложение HelloFacebookSample из SDK имеет такое же всплывающее окно, но с крестообразной кнопкой для его закрытия.

введите здесь описание изображения

ПРИМЕЧАНИЕ. Теперь проблема решена благодаря ravi. Мне не хватало пакета ресурсов Facebook, который содержит изображение «закрыть».

<сильный>2. Принятие разрешений

На втором шаге всплывающего окна (см. экраны выше) нажатие ОК ничего не делает. Нажатие «X» вызывает обработчик завершения с ошибкой, и это здорово, но ничего не происходит с Хорошо. Это правильный способ входа в Facebook с помощью SDK 3.1? Мне не хватает обратного вызова, чтобы конкретно отреагировать на всплывающее окно?

Еще несколько уточнений:

Это происходит только в iOS6, когда приложение Facebook не установлено и учетная запись Facebook не настроена в настройках iOS.

Спасибо!


person Romain    schedule 07.10.2012    source источник
comment
+1 у меня похожая проблема после обновления FB до 3.0SDk   -  person iMeMyself    schedule 10.10.2012
comment
Возможно ошибка в SDK. Просто примечание; Facebook рекомендует запрашивать разрешения на публикацию во время публикации (а не при подключении): Developers.facebook.com/docs/howtos/ios-6   -  person Kristofer Sommestad    schedule 10.10.2012
comment
Спасибо, Кристофер - под выполнением publish_action позже я имел в виду, как только поступит обратный вызов входа в систему. думаю должно быть нормально   -  person Romain    schedule 11.10.2012
comment
Причина, по которой запросы разрешений на чтение и публикацию были разделены, заключалась в том, чтобы убедиться, что пользователь чувствует себя комфортно с приложением, прежде чем оно начнет публиковать сообщения от его имени. Повторный запрос разрешений на публикацию после входа в систему приведет к такому же снижению количества разрешений. (Плюс больше действий, которые вы ожидаете от пользователя, чтобы начать работу)   -  person James Pearce    schedule 11.10.2012
comment
На данный момент приложение ничего не делает, пока пользователь не выберет публикацию на Facebook, после чего оно входит в систему, используя openActiveSessionWithPublishPermissions, а затем публикует сообщения, используя FBRequestConnection. Это приемлемо? Насколько я понимаю, вы говорите, что мне нужно быть осторожным, когда приложение начинает логиниться в Facebook при запуске?   -  person Romain    schedule 11.10.2012
comment
Вы спрашиваете, можно ли сначала (и только) запрашивать разрешения на публикацию?   -  person James Pearce    schedule 13.10.2012
comment
Извините, я не понимаю, что вы имеете в виду. Подводя итог, я доволен тем, как мы теперь запрашиваем разрешения (взято из примеров Facebook), но не понимаю, почему мы застреваем во всплывающем окне.   -  person Romain    schedule 14.10.2012
comment
[Здесь][1] это то, что я сделал, чтобы решить эту проблему. [1]: stackoverflow.com/questions/12712824/   -  person Lio    schedule 23.10.2012


Ответы (2)


Я не могу комментировать, так как моя репутация меньше 50, поэтому постараюсь указать свои наблюдения в качестве ответа.

Я тоже заметил эту проблему при использовании Facebook sdk3.1 на ios6. В моем случае я использую создание объекта facebook в старом стиле и вызываю для него [facebook authorize:permissions], но я изменил исходный код, чтобы всегда использовать «FBSessionLoginBehaviorForcingWebView», так что мой вход всегда осуществляется через веб-вход в приложение.

В моем случае мне не хватало FBUserSettingsViewResources.bundle и FacebookSDKResources.bundle, поэтому я не смог увидеть крестик (но я смог нажать на это место и получить обратный вызов - (void)fbDidNotLogin:(BOOL)cancelled {) .

person ravi    schedule 10.10.2012
comment
Большое спасибо, это определенно шаг в правильном направлении! Мне тоже не хватало комплекта ресурсов. Теперь я могу видеть и нажимать кнопку закрытия. Кнопка «ОК» справа по-прежнему ничего не делает, что может быть другой проблемой. - person Romain; 11.10.2012
comment
даже после добавления FBUserSettingsViewResources.bundle и FacwebookSDKResources.bundle я не вижу кнопку отмены.. - person iMeMyself; 11.10.2012
comment
@ravi: если вы не возражаете, я спрошу, что вы получаете во втором всплывающем окне WebView, говорящем You have already authorized this app [Okay]? И если да, то знаете ли вы, какой метод вызывается при нажатии Okay? Я не могу понять, почему мой не подключен должным образом. - person Romain; 14.10.2012
comment
@Gromix: я попытался удалить приложение FB, удалил учетные данные IOS FB. Я запустил образец Hackbook на своем устройстве ios6, но не увидел второго всплывающего окна Webview, о котором вы упомянули. Но несколько недель назад я прочитал на самом SO инженера Facebook, который сказал, что кнопка «ОК» не работает, в том смысле, что она не открывает приложение снова. Они планировали исправить это в следующем релизе. Я пытался найти ссылку, где я это читал, но не смог найти - person ravi; 15.10.2012
comment
@Gromix: попробуйте спросить пользователя [stackoverflow.com/users/1025173/shireesh-asthana] о рабочем процессе OAuth. и переключение на приложение при нажатии кнопки "ОК" - person ravi; 15.10.2012
comment
Это объяснило бы это, хотя Hackbook, кажется, также работает для меня. У меня есть пользовательские обработчики URL-адресов, поэтому это может быть странная комбинация, блокирующая OAuth iOS6 (но не iOS5?). Я буду следить за постами Шириша и за новым релизом! Тем временем я изменил его, чтобы пользователи iOS6 могли публиковать сообщения только с использованием встроенной интеграции, но не входить в систему. Надеюсь, я скоро разберусь с рабочим потоком OAuth — большое спасибо за вашу помощь! - person Romain; 16.10.2012
comment
где находится образец проекта HelloFacebookSample? - person MasterRazer; 06.11.2012
comment
developers.facebook.com/docs/getting-started / есть инструкции по установке, и как только вы загрузите SDK, вы сможете найти образцы - person ravi; 06.11.2012

Я также столкнулся с этой проблемой, и это действительно известная ошибка:

https://developers.facebook.com/bugs/539702426044893?browse=search_507daefc9af416244781488 >

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

Редактировать: Итак, немного покопавшись, я наткнулся на этот поток переполнения стека: с веб-просмотром?

Я понял, что диалоговое окно, которое мы видим, представляет собой uiWebView, который на самом деле является запасным вариантом, если приложение не может открыть диалоговое окно в сафари. Я смог обойти свою проблему, сбросив настройки своего симулятора, что по существу очистило файлы cookie. Судя по вашему снимку экрана, вы тоже работаете в симуляторе. Интересно, если бы вы сбросили симулятор, если бы у вас были те же результаты?

В меню iOS Simulator -> Сбросить содержимое и настройки...

person Patrick Robert Burns    schedule 16.10.2012