openURL для некоторых телефонных номеров не работает

Я пытаюсь сделать программный звонок на номер с двойным добавочным номером.

Когда я пытаюсь запустить это,

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:2133776478,213#,213#"]]]

Я получаю "Нет" в качестве ответа. Но когда я набираю этот номер в WhatsApp, мне разрешается звонить по этому номеру.

Есть ли лучшее, чтобы достичь этого? Я что-то здесь упускаю?

2 ответа

Согласно документации,

To prevent users from maliciously redirecting phone calls or changing the behavior of a phone or account, the Phone app supports most, but not all, of the special characters in the tel scheme. Specifically, if a URL contains the * or # characters, the Phone app does not attempt to dial the corresponding phone number.

Я бы сначала попытался использовать экранированную версию телефонного номера (используя NSString:stringByAddingPercentEncodingWithAllowedCharacters:), и если это не удается, я бы попытался удалить , а также # персонажи.

Телефон: URL с одним # работает, но наличие двух символов # является недействительным, поскольку NSURL обеспокоен тем, что, похоже, URL содержит два якорных сегмента. Это приводит к nil NSURL.

Если вы в процентах кодируете свою строку, то символы # просто становятся частью строки URL, и все это работает:

NSString *baseString = @"tel:2133776478,213#,213#";
NSString *encodedString = [baseString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if (encodedString != nil) {
    NSURL *url = [NSURL URLWithString:encodedString];
    if (url != nil) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
Другие вопросы по тегам