Swift: как открыть новое приложение при нажатии UIButton

У меня есть приложение, и когда нажимается uibutton, я хочу открыть другое приложение, которое уже установлено (например, Waze). Как я могу сделать это? Большое спасибо.

6 ответов

Решение

Попробуй это. Например, вы хотите открыть приложение Instagram:

    var instagramHooks = "instagram://user?username=johndoe"
    var instagramUrl = NSURL(string: instagramHooks)
    if UIApplication.sharedApplication().canOpenURL(instagramUrl!)
    {  
        UIApplication.sharedApplication().openURL(instagramUrl!)

     } else {
        //redirect to safari because the user doesn't have Instagram
        UIApplication.sharedApplication().openURL(NSURL(string: "http://instagram.com/")!)
    }

Во втором приложении

Перейдите к plist-файлу SecondApp, и вам нужно добавить схемы URL со строкой iOSDevTips(конечно, вы можете написать еще одну строку. Это ваше дело).

2 В FirstApp

Создайте кнопку с нижеуказанным действием:

- (void)buttonPressed:(UIButton *)button
{
  NSString *customURL = @"iOSDevTips://";

  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
  {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
  }
  else
  {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
                              message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL]
                              delegate:self cancelButtonTitle:@"Ok" 
                              otherButtonTitles:nil];
    [alert show];
  }

}

Вот и все. Теперь, когда вы можете нажать кнопку в FirstApp, она должна открыть SecondApp.

Для получения дополнительной информации обратитесь сюда

Вы можете посмотреть Waze Community для справки.

Фрагмент кода Objective-C:

if ([[UIApplication sharedApplication]
canOpenURL:[NSURL URLWithString:@"waze://"]]) {

  // Waze is installed. Launch Waze and start navigation
  NSString *urlStr =
    [NSString stringWithFormat:@"waze://?ll=%f,%f&navigate=yes",
    latitude, longitude];

  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlStr]];

 } else {

  // Waze is not installed. Launch AppStore to install Waze app
  [[UIApplication sharedApplication] openURL:[NSURL
    URLWithString:@"http://itunes.apple.com/us/app/id323229106"]];
}

Фрагмент кода Swift:

if UIApplication.shared.canOpenURL(URL(string: "waze://")!) {
    // Waze is installed. Launch Waze and start navigation
    let urlStr = String(format: "waze://?ll=%f, %f&navigate=yes", latitude, longitude)
    UIApplication.shared.openURL(URL(string: urlStr)!)
} else {
    // Waze is not installed. Launch AppStore to install Waze app
    UIApplication.shared.openURL(URL(string: "http://itunes.apple.com/us/app/id323229106")!)
}

В Swift 4 вы можете использовать:

    if let url = URL(string: "\(myUrl)") {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }

В swift4 waze

class FullMapVC: UIViewController {

    var lat:CLLocationDegrees?
    var long:CLLocationDegrees?

    func wazeMaps()
    {
        let openUrl = URL(string: "waze://?ll=\(String(describing: lat!)),\(String(describing: long!))&navigate=yes")!
        UIApplication.shared.open(openUrl , options:[:]) { (success) in
            if !success
            {

            }
        }
    }

}

замените URL, если вы хотите использовать карты Google

 let openUrl = URL(string: "comgooglemaps://?saddr=&daddr=\(String(describing: lat!)),\(String(describing: long!))&directionsmode=driving")!

Для Swift 4/5 / ... вы можете сделать это правильно следующим образом:

      if let url = URL(string: url), UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url)
} else {
    // display error ?
}
Другие вопросы по тегам