web-dev-qa-db-ja.com

Swiftで電話をかけるためにopenURLを使用する方法は?

電話をかけるためのコードをObjective-CからSwiftに変換しましたが、Objective-Cでは、次のように開くURLの種類(電話、SMS、Webなど)を設定できます。

@"tel:xx"
@"mailto:[email protected]"
@"http://stackoverflow.com"
@"sms:768number"

Swiftのコードは:

UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")

tel:のスキームパラメータをリリースしていないことを読みましたが、Swiftが文字列が電話をかける、メールを送信する、または開くためのものであるかどうかを検出できますかまたは私が書くことができます:

(string : "tel//:9809088798")

39
user3739367

私はあなたが望むと確信しています:

UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)

(質問テキストでは、tel//:ではなくtel://と入力します)。

NSURLの文字列initは、整形式のURLを想定しています。たくさんの番号を電話番号に変えることはありません。 UIWebViewで電話番号の検出が表示される場合がありますが、NSURLよりも高いレベルで行われています。

編集:追加!以下のコメントごと

76
Lou Franco

Swiftの自己完結型ソリューション:

_private func callNumber(phoneNumber:String) {
  if let phoneCallURL:NSURL = NSURL(string:"tel://\(phoneNumber)") {
    let application:UIApplication = UIApplication.sharedApplication()
    if (application.canOpenURL(phoneCallURL)) {
      application.openURL(phoneCallURL);
    }
  }
}
_

これで、callNumber("7178881234")を使用して呼び出しを行うことができるはずです。

16
Zorayr

Swiftの場合:

var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
6
Vinod Joshi

空白を削除することを忘れないでください。削除しないと機能しません。

if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
        UIApplication.sharedApplication().openURL(telelphoneURL)
    }

「telprompt://」は、ユーザーに電話またはキャンセルするように促しますが、「tel://」は直接電話します。

6
Robert Wagstaff

@ confile:

問題は、iOS7で通話が終了した後、ソリューションがアプリに戻らないことです。 – 6月19日13時50分

&@ Zorayr

うーん、そうする解決策があるかどうか興味があります..iOSの制限かもしれません。

つかいます

UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)

呼び出し/キャンセルのプロンプトが表示されますが、アプリケーションに戻ります。私の知る限り、戻る方法はありません(プロンプトなし)

5
Glenn

Swift 3への小さな更新

UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
4

「+」を挿入する必要があります\は別の方法です

private func callNumber(phoneNumber:String) {
  if let phoneCallURL:NSURL = NSURL(string:"tel://"+"\(phoneNumber)") {
    let application:UIApplication = UIApplication.sharedApplication()
    if (application.canOpenURL(phoneCallURL)) {
      application.openURL(phoneCallURL);
    }
  }
}
4
Mauricio Lucon

次のコードスニペットは、SIMが存在するかどうか、デバイスが呼び出しを行うことができるかどうか、そしてOKの場合は呼び出しを行うかどうかを判断できます。

  var info = CTTelephonyNetworkInfo()
    var carrier = info.subscriberCellularProvider
    if carrier != nil && carrier.mobileNetworkCode == nil || carrier.mobileNetworkCode.isEqual("") {
       //SIM is not there in the phone
    }
    else if UIApplication.sharedApplication().canopenURL(NSURL(string: "tel://9809088798")!)
    {
    UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
    }
    else    
    {
      //Device does not have call making capability  
    }
2
Durai Amuthan.H

Swift 4:

func call(phoneNumber: String) {
    if let url = URL(string: phoneNumber) {
        if #available(iOS 10, *) {
            UIApplication.shared.open(url, options: [:],
                                      completionHandler: {
                                        (success) in
                                        print("Open \(phoneNumber): \(success)")
            })
        } else {
            let success = UIApplication.shared.openURL(url)
            print("Open \(phoneNumber): \(success)")
        }
    }
} 

次に、関数を使用します。

let phoneNumber = "tel://+132342424"
call(phoneNumber: phoneNumber)
0
wieblinger

Swift 3

if let phoneCallURL:URL = URL(string:"tel://\(phoneNumber ?? "")") {
            let application:UIApplication = UIApplication.shared
            if (application.canOpenURL(phoneCallURL)) {
                application.open(phoneCallURL, options: [:], completionHandler: nil);
            }
        }
0
Arshad