html - bar - Cómo usar tel: con*(estrella, asterisco) o#(hash, pound) en iOS?
apple-mobile-web-app-title (3)
Intento iniciar una llamada en el iPhone con la url del tel
que tiene un * en ella. Abre correctamente el cuadro de diálogo de llamada, pero vuelve a safari cuando hace clic en llamar.
<a href="tel:123*12">Test</a>
La respuesta aprobada no es correcta, al menos más. He probado tanto una página web como una aplicación que pueden marcar usando el carácter especial #
y *
. Lo que debes hacer si deseas usar esos caracteres en cualquier instancia es codificarlos.
En HTML, #
convierte en %23
y *
no necesita ser escapado
Si usa Swift, puede codificar su enlace y presionarlo desde una aplicación usando esta función:
//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)
}
}
}
Esta documentación de Apple debería ser útil:
Para evitar que los usuarios redirecten maliciosamente las llamadas telefónicas o cambien el comportamiento de un teléfono o una cuenta, la aplicación de teléfono admite la mayoría, pero no todos, de los caracteres especiales en el esquema de tel. Específicamente, si una URL contiene los caracteres * o #, la aplicación del teléfono no intenta marcar el número de teléfono correspondiente.
ACTUALIZACIÓN (2 de enero de 2018) : la información mencionada aquí puede estar desactualizada. Consulte la nueva documentación si Apple ha relajado estas reglas en sus SDK más recientes. Consulte la respuesta de Husam.
iOS11 ahora nos permite llamar al número con *
o #
Swift Código de ejemplo
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
}
}
}