Подтвердить что ты не робот

Как использовать tel: с * (звезда, звездочка) или # (хэш, фунт) на iOS?

Я пытаюсь инициировать вызов на iPhone с URL-адресом tel, в котором есть *. Он правильно отображает диалоговое окно вызова, но при нажатии на звонок возвращается в сафари.

<a href="tel:123*12">Test</a>
4b9b3361

Ответ 1

Эта документация из Apple должна быть полезной:

Чтобы пользователи не злонамеренно перенаправляли телефонные звонки или изменяли поведение телефона или учетной записи, приложение "Телефон" поддерживает большинство, но не всех, специальных символов в теле схема. В частности, если URL содержит символы * или #, Приложение телефона не пытается набрать соответствующий телефон число.

ОБНОВЛЕНИЕ (2 января 2018 года). Информация, упомянутая здесь, может быть устаревшей. Пожалуйста, обратитесь к новой документации, если Apple смягчила эти правила в своих новых SDK. См. Ответ Хусама.

Ответ 2

Утвержденный ответ неверен, по крайней мере, больше. Я тестировал как веб-страницу, и в приложении можно было набирать номер с помощью специального символа # и *. Что вам нужно сделать, если вы хотите использовать эти символы в любом экземпляре, но это их кодирование.

В 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)
      }
    }
  }

Ответ 3

iOS11 теперь позволяет нам называть номер с * или #


Swift Пример кода

    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
            }
        }
    }