programing

신속한 전화번호 호출

powerit 2023. 8. 1. 20:52
반응형

신속한 전화번호 호출

저는 특정 번호를 사용하지 않고 변수로 호출되는 번호로 전화를 걸거나 적어도 당신의 전화기에 있는 번호를 끄집어내라고 말하려 합니다.변수에서 호출되는 이 번호는 파서를 사용하거나 웹 사이트 sql에서 가져와 검색한 번호입니다.변수에 저장된 전화번호를 함수로 호출하려고 버튼을 눌렀지만 소용이 없었습니다.무엇이든 감사에 도움이 될 것입니다!

    func callSellerPressed (sender: UIButton!){
 //(This is calls a specific number)UIApplication.sharedApplication().openURL(NSURL(string: "tel://######")!)

 // This is the code I'm using but its not working      
 UIApplication.sharedApplication().openURL(NSURL(scheme: NSString(), host: "tel://", path: busPhone)!)

        }

시도해 보십시오.

if let url = NSURL(string: "tel://\(busPhone)") where UIApplication.sharedApplication().canOpenURL(url) {
  UIApplication.sharedApplication().openURL(url)
}

전화번호가 안에 있다고 가정하면busPhone.

NSURLinit(string:)옵션을 반환합니다. 따라서 를 사용합니다.if let우리는 반드시url이다.NSURL(및 아님)NSURL?가 반환한 바와 같이init).


Swift 3의 경우:

if let url = URL(string: "tel://\(busPhone)"), UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10, *) {
        UIApplication.shared.open(url)
    } else {
        UIApplication.shared.openURL(url)
    }
}

다음과 같은 이유로 iOS 10 이상인지 확인해야 합니다.

'openURL'은 iOS 10.0에서 더 이상 사용되지 않습니다.

iOS 10, Swift 3에 포함된 자체 솔루션:

private func callNumber(phoneNumber:String) {

  if let phoneCallURL = URL(string: "tel://\(phoneNumber)") {

    let application:UIApplication = UIApplication.shared
    if (application.canOpenURL(phoneCallURL)) {
        application.open(phoneCallURL, options: [:], completionHandler: nil)
    }
  }
}

사용할 수 있어야 합니다.callNumber("7178881234")전화를 걸기 위해.

스위프트 4,

private func callNumber(phoneNumber:String) {

    if let phoneCallURL = URL(string: "telprompt://\(phoneNumber)") {

        let application:UIApplication = UIApplication.shared
        if (application.canOpenURL(phoneCallURL)) {
            if #available(iOS 10.0, *) {
                application.open(phoneCallURL, options: [:], completionHandler: nil)
            } else {
                // Fallback on earlier versions
                 application.openURL(phoneCallURL as URL)

            }
        }
    }
}

Swift 5: iOS > = 10.0

이 해결책은 제로 세이브입니다.

물리적 장치에서만 작동합니다.

private func callNumber(phoneNumber: String) {
    guard let url = URL(string: "telprompt://\(phoneNumber)"),
        UIApplication.shared.canOpenURL(url) else {
        return
    }
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

Swift 3.0 및 ios 10 이상 버전

func phone(phoneNum: String) {
    if let url = URL(string: "tel://\(phoneNum)") {
        if #available(iOS 10, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url as URL)
        }
    }
}

위의 답변은 부분적으로 맞지만 "tel://"에는 한 가지 문제만 있습니다.통화가 끝나면 앱이 아닌 홈 화면으로 돌아갑니다.그래서 "telprompt://"를 사용하는 것이 더 낫고, 앱으로 돌아갈 것입니다.

var url:NSURL = NSURL(string: "telprompt://1234567891")!
UIApplication.sharedApplication().openURL(url)

스위프트 3, iOS 10

func call(phoneNumber:String) {
        let cleanPhoneNumber = phoneNumber.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
        let urlString:String = "tel://\(cleanPhoneNumber)"
        if let phoneCallURL = URL(string: urlString) {
            if (UIApplication.shared.canOpenURL(phoneCallURL)) {
                UIApplication.shared.open(phoneCallURL, options: [:], completionHandler: nil)
            }
        }
  }

좋아요, 도움을 받아서 알아냈어요.또한 전화번호가 유효하지 않을 경우를 대비해 작은 경보 시스템을 설치했습니다.제 문제는 제가 올바르게 부르고 있었지만 번호에 공백과 원하지 않는 문자("123456-7890")가 있었습니다.UIA 응용 프로그램은 사용자 번호가 "1234567890"인 경우에만 작동하거나 수락합니다.따라서 숫자만 끌어오기 위해 새 변수를 만들어 공백과 잘못된 문자를 제거할 수 있습니다.그런 다음 UIA 응용 프로그램으로 해당 번호를 호출합니다.

func callSellerPressed (sender: UIButton!){
        var newPhone = ""

        for (var i = 0; i < countElements(busPhone); i++){

            var current:Int = i
            switch (busPhone[i]){
                case "0","1","2","3","4","5","6","7","8","9" : newPhone = newPhone + String(busPhone[i])
                default : println("Removed invalid character.")
            }
        }

        if  (busPhone.utf16Count > 1){

        UIApplication.sharedApplication().openURL(NSURL(string: "tel://" + newPhone)!)
        }
        else{
            let alert = UIAlertView()
            alert.title = "Sorry!"
            alert.message = "Phone number is not available for this business"
            alert.addButtonWithTitle("Ok")
                alert.show()
        }
        }

저는 제 애플리케이션에서 이 방법을 사용하고 있으며 잘 작동하고 있습니다.이것이 당신에게도 도움이 되기를 바랍니다.

func makeCall(phone: String) {
    let formatedNumber = phone.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).joinWithSeparator("")
    let phoneUrl = "tel://\(formatedNumber)"
    let url:NSURL = NSURL(string: phoneUrl)!
    UIApplication.sharedApplication().openURL(url)
}

Swift 5에는 다른 많은 답변이 적용되지 않습니다.다음은 Swift 5에 대한 코드 업데이트입니다.

let formattedNumber = phoneNumberVariable.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "")

if let url = NSURL(string: ("tel:" + (formattedNumber)!)) {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url as URL)
    }
}

PS:

  1. 대부분의 대답으로, 저는 기기에서 프롬프트를 얻을 수 없었습니다.위의 코드는 프롬프트를 표시할 수 있었습니다.
  2. 대부분의 답변과 마찬가지로 // 뒷말이 없습니다.그리고 잘 작동합니다.

스위프트 3에서,

if let url = URL(string:"tel://\(phoneNumber)"), UIApplication.shared.canOpenURL(url) {
     UIApplication.shared.openURL(url)
}

나는 번호 확인이 가능한 swift 3 솔루션을 사용하고 있습니다.

var validPhoneNumber = ""
    phoneNumber.characters.forEach {(character) in
        switch character {
        case "0"..."9":
            validPhoneNumber.characters.append(character)
        default:
            break
        }
    }

    if UIApplication.shared.canOpenURL(URL(string: "tel://\(validNumber)")!){
        UIApplication.shared.openURL(URL(string: "tel://\(validNumber)")!)
    }

이것은 Swift 2.0 참고를 사용한 @Tom의 답변에 대한 업데이트입니다 - 이것은 제가 사용하고 있는 전체 Call Composer 클래스입니다.

class CallComposer: NSObject {

var editedPhoneNumber = ""

func call(phoneNumber: String) -> Bool {

    if phoneNumber != "" {

        for i in number.characters {

            switch (i){
                case "0","1","2","3","4","5","6","7","8","9" : editedPhoneNumber = editedPhoneNumber + String(i)
                default : print("Removed invalid character.")
            }
        }

    let phone = "tel://" + editedPhoneNumber
        let url = NSURL(string: phone)
        if let url = url {
            UIApplication.sharedApplication().openURL(url)
        } else {
            print("There was an error")
        }
    } else {
        return false
    }

    return true
 }
}

openURL()은 iOS 10에서 더 이상 사용되지 않습니다.다음은 새로운 구문입니다.

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

전화 번호에 공백이 있는 경우 먼저 공백을 제거하십시오!그러면 수락된 답변의 솔루션을 사용할 수 있습니다.

let numbersOnly = busPhone.replacingOccurrences(of: " ", with: "")

if let url = URL(string: "tel://\(numbersOnly)"), UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10, *) {
        UIApplication.shared.open(url)
    } else {
        UIApplication.shared.openURL(url)
    }
}
func phone(phoneNum: String) {
    if let url = URL(string: "tel://\(phoneNum)") {
        if #available(iOS 10, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url as URL)
        }
    }
}

iOS 10 이상의 경우 아래 코드를 사용하여 전화를 걸 수 있습니다.

let phoneNo = "1234567890"
guard let number = URL(string: "tel://" + phoneNo ) else { return}
UIApplication.shared.open(number, options: [:], completionHandler: nil) 

Swift 3.0 솔루션:

let formatedNumber = phone.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "")
print("calling \(formatedNumber)")
let phoneUrl = "tel://\(formatedNumber)"
let url:URL = URL(string: phoneUrl)!
UIApplication.shared.openURL(url)

를 유효한 요소로 다른 과 같습니다.Scanner

let number = "+123 456-7890"

let scanner = Scanner(string: number)

let validCharacters = CharacterSet.decimalDigits
let startCharacters = validCharacters.union(CharacterSet(charactersIn: "+#"))

var digits: NSString?
var validNumber = ""
while !scanner.isAtEnd {
    if scanner.scanLocation == 0 {
        scanner.scanCharacters(from: startCharacters, into: &digits)
    } else {
        scanner.scanCharacters(from: validCharacters, into: &digits)
    }

    scanner.scanUpToCharacters(from: validCharacters, into: nil)
    if let digits = digits as? String {
        validNumber.append(digits)
    }
}

print(validNumber)

// +1234567890

Swift 3.1 및 이전 버전과 호환되는 접근 방식의 경우 다음을 수행합니다.

@IBAction func phoneNumberButtonTouched(_ sender: Any) {
  if let number = place?.phoneNumber {
    makeCall(phoneNumber: number)
  }
}

func makeCall(phoneNumber: String) {
   let formattedNumber = phoneNumber.components(separatedBy: 
   NSCharacterSet.decimalDigits.inverted).joined(separator: "")

   let phoneUrl = "tel://\(formattedNumber)"
   let url:NSURL = NSURL(string: phoneUrl)!

   if #available(iOS 10, *) {
      UIApplication.shared.open(url as URL, options: [:], completionHandler: 
      nil)
   } else {
     UIApplication.shared.openURL(url as URL)
   }
}

swift 3.0용

if let url = URL(string: "tel://\(number)"), UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10, *) {
        UIApplication.shared.open(url)
    } else {
        UIApplication.shared.openURL(url)
    }
}
else {
    print("Your device doesn't support this feature.")
}

Swift 4.2 이상의 경우

if let phoneCallURL = URL(string: "tel://\(01234567)"), UIApplication.shared.canOpenURL(phoneCallURL)
{
    UIApplication.shared.open(phoneCallURL, options: [:], completionHandler: nil)
}
let formatedNumber = phone.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "")
print("calling \(formatedNumber)")
let phoneUrl = "tel://\(formatedNumber)"
let url:URL = URL(string: phoneUrl)!
UIApplication.shared.openURL(url)

Swift 3.0 & iOS 10+

UIApplication.shared.openURL(url)로 변경되었습니다.UIApplication.shared.open(_ url: URL, options:[:], completionHandler completion: nil)

옵션완료 핸들러는 옵션이며 렌더링:

UIApplication.shared.open(url)

https://developer.apple.com/reference/uikit/uiapplication/1648685-open

전화 번호를 신속하게 호출하려면 필요에 따라 URL을 변경합니다.

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

전화 번호로 메시지 보내기

URL(string: "sms://\(phoneNumber)")

페이스타임을 사용하여 화상 통화하려면

URL(string: "facetime://\(phoneNumber)")

메일 ID가 있는 메일 앱을 열려면

URL(string: "mailto:\(mailId)")

언급URL : https://stackoverflow.com/questions/27259824/calling-a-phone-number-in-swift

반응형