Как запустить сафари и открыть URL из приложения iOS
На странице настроек я хочу включить три ссылки на
- Мой сайт поддержки приложений
- Руководство по приложению YouTube
- Мой основной сайт (т. Е. Связанный с ярлыком "Создано Дейлом Дитрихом".)
Я искал этот сайт и в Интернете, и мою документацию, и я не нашел ничего очевидного.
ПРИМЕЧАНИЕ. Я не хочу открывать веб-страницы в своем приложении, я просто хочу отправить ссылку на Safari, и эта ссылка будет открыта там. Я видел множество приложений, делающих одно и то же на их странице настроек, поэтому это должно быть возможно.
13 ответов
Вот что я сделал:
Я создал IBAction в заголовочных файлах.h следующим образом:
- (IBAction)openDaleDietrichDotCom:(id)sender;
Я добавил UIButton на странице настроек, содержащей текст, на который я хочу сослаться.
Я подключил кнопку к IBAction в File Owner соответственно.
Затем выполните следующее:
Obj C
- (IBAction)openDaleDietrichDotCom:(id)sender {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.daledietrich.com"]];
}
стриж
(IBAction в viewController, а не в заголовочном файле)
if let link = URL(string: "https://yoursite.com") {
UIApplication.shared.open(link)
}
Быстрый Синтаксис:
UIApplication.sharedApplication().openURL(NSURL(string:"http://www.reddit.com/")!)
Новый синтаксис Swift для iOS 9.3 и более ранних версий
Начиная с какой-то новой версии Swift (возможно, swift 2?), UIApplication.sharedApplication() теперь является UIApplication.shared (я полагаю, лучше использовать вычисляемые свойства). Кроме того, URL больше не является неявно конвертируемым в NSURL, должен быть явно конвертирован как!
UIApplication.sharedApplication.openURL(NSURL(string:"http://www.reddit.com/") as! URL)
Новый синтаксис Swift с iOS 10.0
Метод openURL устарел и заменен более универсальным методом, который принимает объект опций и асинхронный обработчик завершения начиная с iOS 10.0
UIApplication.shared.open(NSURL(string:"http://www.reddit.com/")! as URL)
Здесь требуется одна проверка, чтобы открываемый URL мог открываться устройством или симулятором или нет. Потому что иногда (большинство в симуляторе) я обнаружил, что это вызывает сбои.
Objective-C
NSURL *url = [NSURL URLWithString:@"some url"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
Swift 2.0
let url : NSURL = NSURL(string: "some url")!
if UIApplication.sharedApplication().canOpenURL(url) {
UIApplication.sharedApplication().openURL(url)
}
Посмотрите на -openURL:
метод на UIApplication. Это должно позволить вам передать экземпляр NSURL в систему, который определит, в каком приложении его открыть и запустить это приложение. (Имейте в виду, что вы, вероятно, захотите проверить -canOpenURL:
во-первых, на тот случай, если URL-адрес не может быть обработан приложениями, установленными в настоящее время в системе, хотя это, вероятно, не является проблемой для простого http://
ссылки.)
И, в случае, если вы не уверены, что указан URL text
имеет схему:
NSString* text = @"www.apple.com";
NSURL* url = [[NSURL alloc] initWithString:text];
if (url.scheme.length == 0)
{
text = [@"http://" stringByAppendingString:text];
url = [[NSURL alloc] initWithString:text];
}
[[UIApplication sharedApplication] openURL:url];
Не осуждаемая версия Objective C будет:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://apple.com"] options:@{} completionHandler:nil];
РешениеSwift 3 с кнопкой Готово
Не забудь import SafariServices
if let url = URL(string: "http://www.yoururl.com/") {
let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true)
present(vc, animated: true)
}
Swift 3.0
if let url = URL(string: "https://www.reddit.com") {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:])
} else {
UIApplication.shared.openURL(url)
}
}
Это также поддерживает устройства под управлением более старых версий iOS
Поскольку этот ответ устарел с iOS 10.0, лучшим ответом будет:
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}else{
UIApplication.shared.openURL(url)
}
y en Objective-c
[[UIApplication sharedApplication] openURL:@"url string" options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Opened url");
}
}];
Swift 5:
func open(scheme: String) {
if let url = URL(string: scheme) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:],
completionHandler: {
(success) in
print("Open \(scheme): \(success)")
})
} else {
let success = UIApplication.shared.openURL(url)
print("Open \(scheme): \(success)")
}
}
}
Применение:
open(scheme: "http://www.bing.com")
Справка:
openURL (:) устарел в iOS 10.0, вместо этого вы должны использовать следующий метод экземпляра в UIApplication:open (: options: завершение Handler:)
Пример использования Swift
Откроется " https://apple.com/" в Safari.
if let url = URL(string: "https://apple.com") {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
https://developer.apple.com/reference/uikit/uiapplication/1648685-open
В SWIFT 3.0
if let url = URL(string: "https://www.google.com") {
UIApplication.shared.open(url, options: [:])
}
Попробуй это:
NSString *URL = @"xyz.com";
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:URL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]];
}
В Swift 1.2, попробуйте это:
let pth = "http://www.google.com"
if let url = NSURL(string: pth){
UIApplication.sharedApplication().openURL(url)
Решение Swift 4:
UIApplication.shared.open(NSURL(string:"http://yo.lo")! as URL, options: [String : Any](), completionHandler: nil)