Я пытаюсь инициировать вызов на iPhone с URL-адресом tel
, в котором есть *. Он правильно отображает диалоговое окно вызова, но при нажатии на звонок возвращается в сафари.
<a href="tel:123*12">Test</a>
Я пытаюсь инициировать вызов на iPhone с URL-адресом tel
, в котором есть *. Он правильно отображает диалоговое окно вызова, но при нажатии на звонок возвращается в сафари.
<a href="tel:123*12">Test</a>
Эта документация из Apple должна быть полезной:
Чтобы пользователи не злонамеренно перенаправляли телефонные звонки или изменяли поведение телефона или учетной записи, приложение "Телефон" поддерживает большинство, но не всех, специальных символов в теле схема. В частности, если URL содержит символы * или #, Приложение телефона не пытается набрать соответствующий телефон число.
ОБНОВЛЕНИЕ (2 января 2018 года). Информация, упомянутая здесь, может быть устаревшей. Пожалуйста, обратитесь к новой документации, если Apple смягчила эти правила в своих новых SDK. См. Ответ Хусама.
Утвержденный ответ неверен, по крайней мере, больше. Я тестировал как веб-страницу, и в приложении можно было набирать номер с помощью специального символа #
и *
. Что вам нужно сделать, если вы хотите использовать эти символы в любом экземпляре, но это их кодирование.
В HTML, #
становится %23
, а *
не нужно экранировать
При использовании Swift вы можете закодировать свою ссылку и нажать ее из приложения, используя эту функцию:
//number format example (commas are pauses): 123-456-7890,,555#,1234
fileprivate func callNumber(_ number: String) {
let dialString = "telprompt://" + number
if let escapedDialString = dialString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) {
if let dialURL = URL(string: escapedDialString) {
UIApplication.shared.openURL(dialURL)
}
}
}
iOS11 теперь позволяет нам называть номер с *
или #
let number = "*111*12345#"
let app = UIApplication.shared
if let encoded = number.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) {
let u = "tel://\(encoded)"
if let url = URL(string:u) {
if app.canOpenURL(url) {
app.open(url, options: [:], completionHandler: { (finished) in
})
return
}
}
}