Как запустить сафари и открыть URL из приложения iOS

На странице настроек я хочу включить три ссылки на

  • Мой сайт поддержки приложений
  • Руководство по приложению YouTube
  • Мой основной сайт (т. Е. Связанный с ярлыком "Создано Дейлом Дитрихом".)

Я искал этот сайт и в Интернете, и мою документацию, и я не нашел ничего очевидного.

ПРИМЕЧАНИЕ. Я не хочу открывать веб-страницы в своем приложении, я просто хочу отправить ссылку на Safari, и эта ссылка будет открыта там. Я видел множество приложений, делающих одно и то же на их странице настроек, поэтому это должно быть возможно.

13 ответов

Вот что я сделал:

  1. Я создал IBAction в заголовочных файлах.h следующим образом:

    - (IBAction)openDaleDietrichDotCom:(id)sender;
    
  2. Я добавил UIButton на странице настроек, содержащей текст, на который я хочу сослаться.

  3. Я подключил кнопку к IBAction в File Owner соответственно.

  4. Затем выполните следующее:

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 в iOS10

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)
Другие вопросы по тегам