Проблема с использованием tel: URL для инициирования вызова
Я пытаюсь инициировать вызов из приложения iPhone.
Этот связанный код работает и открывает Safari, как ожидалось:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]];
Но, когда я заменяю URL-адрес http с помощью tel-URL, полученный код не вызывает приложение телефона:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:3035551212"]];
Никакие исключения или предупреждения не генерируются (в симуляторе или на устройстве).
Какая идея может быть связана с моим вызовом?
Спасибо.
Ответы
Ответ 1
iphone набирает номер, используя любой из перечисленных ниже форматов. Но он ничего не сделает, если вы находитесь в симуляторе. Мне понадобилось 30 минут, чтобы ударить головой, чтобы понять это.
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:@"tel://15415551234"]];
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:@"tel:15415551234"]];
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:@"tel:1-541-555-1234"]];
Ссылка на документацию Apple по схеме tel: url
Ссылка для документации openURL
Ответ 2
(
и )
на самом деле не проблема, если вы используете stringByAddingPercentEscapesUsingEncoding
, как предложено samiq. То же самое касается +
, /
и пробелов. Это URL, поэтому побег кажется естественным.
Если я предполагаю, что правильное распознавание номера телефона Apple будет использоваться в обработчике схемы tel:
, если вы уйдете правильно.
(отсутствует репутация, чтобы сделать его комментарием)
Ответ 3
поскольку @bentford сказал, что вы можете выкинуть из-за того, что симулятор действительно показывает предупреждение, когда вы пытаетесь щелкнуть по телефону в приложении для контактов, это просто предупреждение, которое генерируется, потому что приложение проверяет, не работает ли tel: protocol поддерживается на устройстве или нет.
добавляя к тому, что он пишет, вы можете также добавить поддержку scape для любых специальных символов или пробелов, как в
NSString *phoneStr = [NSString stringWithFormat:@"tel:%@",[self.contactDetails objectForKey:@"phone"]];
NSString *escaped = [phoneStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];
надеюсь, что это поможет.
приветствий.
Ответ 4
Если ваш номер телефона имеет (
или )
, приложение Phone не запускается.
Ответ 5
У вас не было никаких проблем с помощью tel:{phone-number}
и вызывать его так же, как и вы. Однако работает только на устройстве iPhone.
Одна вещь, которую мне нужно было сделать, - вырезать посторонние символы (например, все круглые скобки, пробелы, тире и точки) из телефонной строки. Некоторые из приведенных выше примеров (но не оригинальное сообщение) имеют тире. Это может быть проблемой.
Ответ 6
Я обнаружил, что проблема связана с символами, которые не разрешены для tel://URI - следующий код решил мою проблему:
NSMutableCharacterSet *charSet = [NSMutableCharacterSet new];
[charSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]];
[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
[charSet formUnionWithCharacterSet:[NSCharacterSet symbolCharacterSet]];
NSArray *arrayWithNumbers = [str componentsSeparatedByCharactersInSet:charSet];
NSString *numberStr = [arrayWithNumbers componentsJoinedByString:@""];
Ответ 7
Я просто столкнулся с этим при попытке добавить кнопку "Вызов" на UIAlertView
. Для обработки вызова у меня был следующий код:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex != 0)
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:1-602-555-1212"]];
}
}
Это ничего не откроет, как ты. Я даже попробовал обычный http
URL. Оказалось, что я забыл установить delegate
в self
. Возможно, это и ваша проблема.
Ответ 8
нет ответа? хорошо у меня такая же проблема, и наконец я обнаружил, что причина в том, что в номере телефона было место (для лучшего форматирования). после удаления пространства он работал нормально. не знаю, помогает ли это.
Ответ 9
дополнительная информация о совершении телефонных звонков по схеме URL (как мне кажется, кому-то это может показаться полезным)
Как использовать tel: с * (звезда, звездочка) или # (хэш, фунт) на iOS?
Ответ 10
URL должен быть tel://3035551212, а не tel: 3035551212...
Добавьте, что//и он должен работать.