Когда я могу использовать SFSafariViewController, WKWebView или UIWebView с универсальными ссылками?

на Универсальный Ссылки на руководство по программированию поиска приложений iOS компания Apple говорит:

при создании экземпляра SFSafariViewController, WKWebView или UIWebView объект для обработки универсальной ссылки, iOS открывает ваш сайт в Safari вместо открытия приложения. Однако, если пользователь нажимает универсальный ссылка из встроенного SFSafariViewController, WKWebView, или Объект UIWebView, iOS открывает приложение.

что означает "обрабатывать универсальную ссылку"? Я не могу открыть данный URL с SFSafariViewController, WKWebView или UIWebView? Применяется ли это только во время -[UIApplicationDelegate application:continueUserActivity:restorationHandler:], или есть тайм-аут на месте? Означает ли это, что мы никогда не сможем открыть URL-адрес в SFSafariViewController, WKWebView или UIWebView?

1 ответов


Я не уверен, что полностью понимаю ваш вопрос.

просто чтобы охватить основы, я позволю Apple объяснить что такое универсальная ссылка:

универсальные ссылки позволяют пользователям открывать ваше приложение, когда они нажимают ссылки на ваш сайт в wkwebview и UIWebView просмотров и страниц Safari, в дополнение к ссылкам, которые приводят к вызову openURL:, например, те, которые происходят в почте, сообщения и другие приложения.

Итак, представьте себе вы работаете на клиенте Twitter, и, проходя через временную шкалу, вы сталкиваетесь с твитом со следующей видеосвязью YouTube:https://youtu.be/ejQod8liXm0

если вы нажмете его, так как это URL HTTP, вы ожидаете, что Safari откроет ссылку. Тем не менее, я думаю, что все разработчики iOS могут в значительной степени согласиться с тем, что родные приложения лучше, так что лучший пользовательский опыт будет для официальное приложение YouTube, чтобы открыть видео, даже от вашего стороннего клиента.

это то, что" универсальные ссылки " позволяют; если приложение YouTube регистрируется на iOS как приложение, ответственное за обработку https://www.youtube.com (*) ссылки,все в экосистеме iOS выигрывают, если мы следуем правилам API. То же самое происходит, если вы запускаете веб-сайт и хотите, чтобы любой из Ваших материалов запускал официальное приложение iOS, если оно установлено вашим пользователем, или чтобы пользователю было предложено как установить его для лучшего пользовательского опыта (и, конечно, чтобы помочь вашему бизнесу).

так, с этим из пути, давайте вернемся к исходному тексту:

если вы создаете экземпляр SFSafariViewController, wkwebview или UIWebView для обработки универсальной ссылки, iOS открывает ваш веб-сайт в Safari вместо открытия вашего приложения. Однако если пользователь нажимает универсальную ссылку из встроенного объекта SFSafariViewController, wkwebview или UIWebView, для iOS открывает ваше приложение.

это означает, что, если из вашего приложения ваш пользователь нажимает на универсальную ссылку на ваш контент (пример:http://www.your-company.com/foo), и вы не обнаруживаете это в коде вашего приложения через регулярное выражение, например, и вместо этого создаете экземпляр SFSafariViewController, WKWebView или UIWebView чтобы открыть его, как если бы это была обычная ссылка на The New York Times или что-то, ОС поймет, что вместо открытия этого в вашем app,вы хотите Safari, чтобы справиться с этим для вас. помните: вся цель универсальных ссылок заключается в том, чтобы пользователь получил лучший опыт, имея URL-адрес обрабатывается родным приложением, а не браузером.

вот что говорится в первом предложении. Что касается второго, он проясняет потенциальный последующий вопрос: Что делать, если пользователь нажимает на универсальную ссылку на мой контент из встроенного браузера из другого приложения, которое не мое? затем, в предложении говорится, что ОС будет вести себя нормально: она откроет ваше приложение, соблюдая универсальные правила ссылок.

TL; DR: вам нужно обнаружить универсальные ссылки на ваш контент из вашего приложения тоже в коде и обработать их. iOS не будет обрабатывать это для вас. Вместо этого, если вы попросите ОС открыть универсальную ссылку на содержимое вашего приложения во встроенном браузере из вашего приложения, она будет делать точно так, как сказано.

EDIT: Если вам нужна помощь в выборе между просьбой SFSafariViewController или -openURL:options:completitionHandler: API для открытия URL,эта ссылка должна помочь вам; моя рекомендация будет использовать -openURL:options:completitionHandler: во-первых, и если это не удается, то используйте SFSafariViewController или подобное.

надеюсь, это поможет и что я правильно понял ваш вопрос.

Ура! И счастливое Программирование iOS 11! :)