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