2014-12-23 1 views
1

Я хочу, чтобы иметь возможность аутентифицировать транзакцию с веб-сайта Safari через пользовательское приложение для iPhone, а затем выполнить обратный вызов, который возвращает пользователя в одно и то же окно Safari ... Немного похоже на логин в стиле Facebook OAuth.Как создать аутентификацию в стиле Facebook в браузере с перенаправлением браузера?

  1. пользователя на веб-странице, нажмет кнопку, чтобы сделать транзакции
  2. Safari запускает наше пользовательское приложение с помощью схемы и параметров (How to open a native iOS app from a web app)
  3. App проверяет подлинность пользователя
  4. пользователя перенаправляется обратно в Safari с некоторый обратный вызов, который информирует веб-страницу о том, что транзакция прошла успешно (предпочтительно в том же окне)

Это Шаг 4 Я не знаю, как это сделать. Думаю, я мог бы легко перенаправить пользователя обратно в браузер в другом окне, но можно ли отправить их обратно в то же окно, в котором они были раньше, с обратным вызовом?

ответ

3

Обновление: Возможно, после некоторых экспериментов я заметил что-то интересное в поведении Сафари. Если у Safari открыта вкладка с URL-адресом, а не с корнем сайта, он не откроет новую вкладку, если ваше приложение снова запросит тот же URL-адрес.

Так что в вашем случае, если вы пришли из facebook.com/auth и ваше приложение открыто http://facebook.com/auth, то вкладка будет повторно использована! Вы также можете безопасно передавать веб-параметры; они будут проигнорированы в решении обработки вкладок. Я не тестировал http vs https, чтобы убедиться, что это также игнорируется, но это то, о чем нужно знать.

Старый ответ:

да это возможно, однако только документально способ открыть Safari приведет к новой вкладке открывается для «запрос».

Документально способ сделать это, чтобы использовать схему URL, как это:

if([[UIApplication sharedApplication] canOpenURL:myURL]) 
{ 
    [[UIApplication sharedApplication] openURL:myURL]; 
} 

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html

Почему я говорю, что это возможно потому, что Google Maps делает это с прошивкой 8. Если вы используйте мобильный Safari для поиска адреса, затем выберите результирующее представление карты, которое откроет приложение Google Maps (если оно установлено). Приложение Google maps будет иметь баннер в верхней части страницы с надписью «RETURN TO SAFARI». Если вы нажмете на этот баннер, он вернет вас в Safari, не открывая новую вкладку именно так, как вам хотелось бы.

Такое же поведение также распространяется и на Chrome. Документация здесь также говорится, новая вкладка будет создана при открытии URL в Chrome, если вы сделаете несколько вызовов:

https://developer.chrome.com/multidevice/ios/links#creating-a-new-tab

Конечно Chrome является их собственным приложением и в этом случае они хорошо в пределах их права на использование недокументированных функций. Как Google добился этого с помощью Safari, я не могу сказать.

Я бы предложил идеально найти способ поддержки обоих браузеров, которые Google сделал с помощью своего приложения карт, чтобы дать пользователям последовательный опыт и уважать их выбор браузера.На мой взгляд, эта функциональность разумна; если Safari запустила ваше приложение, почему вы не сможете вернуть пользователя на эту страницу.

+0

Можете ли вы не отправить информацию о пользователе в полезную нагрузку? Таким образом, вы могли бы решить, какое приложение используется и вернуть пользователя там ... http://www.w3schools.com/jsref/prop_nav_useragent.asp – jowie

+0

Вы получите идентификатор пакета вызывающего приложения в обратном вызове делегата ваш AppDelegate - при условии справедливости вещей, Safari также должен отправить обратно свой идентификатор. – Mills

+0

Странное, недокументированное поведение в Safari. Потрясающие! :) – jowie

 Смежные вопросы

  • Нет связанных вопросов^_^