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

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

  • Мой сайт поддержки приложений
  • Учебник YouTube для приложений
  • Мой основной сайт (т.е. связанный с меткой "Создано Dale Dietrich".)

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

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

Ответ 1

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

  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) 
}

Ответ 2

Swift Синтаксис:

UIApplication.sharedApplication().openURL(NSURL(string:"http://www.reddit.com/")!)

Новый синтаксис Swift для iOS 9.3 и более ранних версий

Как и в случае с новой версией Swift (возможно, быстрой 2?), UIApplication.sharedApplication() теперь является UIApplication.shared(лучше использовать рассчитанные свойства, которые я предполагаю). Кроме того, URL-адрес уже неявно конвертируется в NSURL, должен быть явно преобразован с помощью:

UIApplication.sharedApplication.openURL(NSURL(string:"http://www.reddit.com/") as! URL)

Новый быстрый синтаксис с iOS 10.0

Метод openURL устарел и заменен более универсальным методом, который принимает объект options и асинхронный обработчик завершения с iOS 10.0

UIApplication.shared.open(NSURL(string:"http://www.reddit.com/")! as URL)

Ответ 3

Здесь требуется одна проверка, чтобы открываемый 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)
}

Swift 4.2

guard let url = URL(string: "some url") else {
    return
}
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

Ответ 4

Посмотрите на метод -openURL: в UIApplication. Он должен позволить вам передать экземпляр NSURL в систему, который определит, какое приложение откроет его и запустит это приложение. (Имейте в виду, что вы, вероятно, захотите проверить -canOpenURL: во-первых, на всякий случай, если URL-адрес не может быть обработан приложениями, установленными в системе, хотя это, вероятно, не проблема для простых ссылок http://.)

Ответ 5

И если вы не уверены, имеет ли поставляемый 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];

Ответ 6

Не устаревшая версия Objective-C будет:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://apple.com"] options:@{} completionHandler:nil];

Ответ 7

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.

Ответ 8

Swift 3 Решение с помощью кнопки "Готово"

Не забывайте import SafariServices

if let url = URL(string: "http://www.yoururl.com/") {
            let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true)
            present(vc, animated: true)
        }

Ответ 9

Поскольку этот ответ устарел с 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");
        }
    }];

Ответ 10

openURL (:) устарел в iOS 10.0, вместо этого вы должны использовать следующий метод экземпляра для UIApplication: open (: options: completeHandler:)

Пример использования 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

Ответ 11

В SWIFT 3.0

               if let url = URL(string: "https://www.google.com") {
                 UIApplication.shared.open(url, options: [:])
               }

Ответ 12

Попробуйте следующее:

NSString *URL = @"xyz.com";
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:URL]])
{
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]];
}

Ответ 13

В Swift 1.2 попробуйте следующее:

let pth = "http://www.google.com"
    if let url = NSURL(string: pth){
        UIApplication.sharedApplication().openURL(url)

Ответ 14

Решение Swift 4:

UIApplication.shared.open(NSURL(string:"http://yo.lo")! as URL, options: [String : Any](), completionHandler: nil)