встраивание Javascript в SFSafariViewController

Я не уверен, что это возможно. В настоящее время я разрабатываю приложение для хранения паролей (например, менеджер паролей). Одной из его функций является предоставление пользователю возможности автоматического входа в веб-браузер этого устройства. Мне удалось заставить его работать с помощью UIWebView и WKWebView, но я не могу найти способ заставить его работать с помощью SFSafariViewController. Я прочитал несколько документов и блогов об этом и даже прочитал SFSafariViewController.h, но там нет подсказки, которая могла бы привести меня к функции, которую я хотел. Я хочу знать, как сделать функцию, подобную «evaluateJavaScript», в SFSafariViewController или, если это невозможно, есть ли у вас другие предложения о том, как этого добиться?

Примечание. Я использую Objective-C.

Заранее спасибо! Удачного кодирования!


person mCube    schedule 26.01.2016    source источник
comment
Я не думаю, что это возможно — SFSafariViewController Apple не разрешает взаимодействие: «Действия пользователя и взаимодействие с SFSafariViewController не видны вашему приложению» (документы).   -  person Jed Fox    schedule 27.01.2016
comment
Есть ли другой способ реализовать автоматический вход из приложения по указанному URL-адресу? Я думаю о том, чтобы установить веб-API на свой сервер, сделать там трюк и опубликовать его на URL-адресе входа на сайт, на котором я хотел войти. Это возможно?   -  person mCube    schedule 04.02.2016
comment
Вы должны просто использовать UIWebView или WKWebView. Если вы хотите войти в систему с системным представлением, вы можете использовать AFNetworking для отправки запроса POST на ваш сервер.   -  person Jed Fox    schedule 04.02.2016
comment
Да, я попробовал это и даже сделал это. Но мой клиент хотел, чтобы Safari открывался после входа в систему. Возможно ли это?   -  person mCube    schedule 04.02.2016
comment
Да! Просто позвоните [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"your URL here"]].   -  person Jed Fox    schedule 04.02.2016
comment
Это вызовет Safari. Но аутентифицированный сеанс не будет пройден, верно? Я имею в виду, что если я запросил sample.com как openURL, он будет рассматриваться как другой экземпляр и по-прежнему будет запрашивать учетные данные пользователя.   -  person mCube    schedule 04.02.2016
comment
Вы можете (например) передать токен аутентификации в URL-адресе, который передаст сеанс, а затем будет признан недействительным.   -  person Jed Fox    schedule 04.02.2016
comment
Давайте продолжим обсуждение в чате.   -  person mCube    schedule 04.02.2016


Ответы (1)


SFSafariViewControllers находятся в песочнице. Поскольку они по сути являются Safari и имеют доступ к файлам cookie. Разрешить доступ к ним любому приложению было бы угрозой безопасности.

Однако, если веб-служба, в которую вы хотите, чтобы пользователь входил, принадлежит вам, вы можете настроить API и собственную схему URL-адресов.

Следуйте этой документации.

Если вы пытаетесь сохранить пароли и т. д. с сайтов, которые вы не поддерживаете, то, к сожалению, это невозможно с использованием файла SFSafariViewController.

Надеюсь это поможет,

Лиам

person Liam Ferris    schedule 28.01.2016
comment
Большое спасибо за ваш ответ. Я проверю это позже. :) - person mCube; 04.02.2016