2009-05-01 1 views
22

Я пытаюсь инициировать вызов из приложения iPhone.Проблема с использованием tel: URL-адрес для инициирования вызова

Этот родственный код работает и открывает Safari, как и ожидалось:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]]; 

Но, когда я заменить HTTP URL с тел URL полученный код не вызывать приложение телефона:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:3035551212"]]; 

Исключения и предупреждения не генерируются (в симуляторе или на устройстве).

Любая идея, что может быть проблемой с моим вызовом?

Спасибо.

+1

он должен работать, может быть, есть somethi ng в коде. Что такое устройство? ipod touch не может звонить ... – CiNN

+0

Это iPhone. – denton

ответ

41

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

Link for Apple documentation on the tel: url scheme

Link for openURL documentation

+2

1-й формат не работает на устройстве. – joshis

-3

URL-адрес должен быть тел: // 3035551212, а не тел: 3035551212 ... Добавьте, что // и он должен работать.

+0

Я пробовал это раньше, но безуспешно. Благодарю. – denton

+1

Неправда. Либо работает, либо документация Apple предлагает версию для плаката: https://developer.apple.com/iphone/library/featuredarticles/iPhoneURLScheme_Reference/Articles/PhoneLinks.html – bbrown

2

Я просто столкнулся с этим при попытке добавить кнопку «Звонок» на номер 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. Вероятно, это тоже ваша проблема.

3

У него не возникло проблем с использованием tel:{phone-number} и вызова его так же, как и вы. Однако работает только на устройстве iPhone.

Одна вещь, которую мне нужно было сделать, - вырезать посторонние символы (например, все круглые скобки, пробелы, тире и точки) из телефонной строки. Некоторые из приведенных выше примеров (но не оригинальное сообщение) имеют тире. Это может быть проблемой.

+0

В документации по электронной почте есть отметки: https://developer.apple.com /iphone/library/featuredarticles/iPhoneURLScheme_Reference/Articles/PhoneLinks.html – bentford

5

, как @bentford сказал один может получить выкидыш, потому что тренажер действительно показывает предупреждение при попытке нажать на телефоне в приложении контактов, это просто предупреждение который генерируется, потому что приложение проверяет, поддерживается ли tel: протокол на устройстве или нет.

добавление к тому, что он пишет, вы можете также добавить поддержку усиков специальные символы или пробелы как в

NSString *phoneStr = [NSString stringWithFormat:@"tel:%@",[self.contactDetails objectForKey:@"phone"]]; 
    NSString *escaped = [phoneStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]]; 

надеюсь, что это помогает.

ура.

4

Если ваш номер телефона содержит ( или ), приложение для телефона не запускается.

+0

Наконец, подтверждение моего подозрения. Спасибо. –

+0

FWIW, я пробовал несколько альтернатив, включая '(xxx) -xxx-xxxx' и скобки, похоже, не проблема в iOS 7. Хотя * пробелы *, кажется, препятствуют запуску приложения Phone. –

1

нет принятый ответ еще?хорошо у меня такая же проблема, и наконец я обнаружил, что причина в том, что в номере телефона было место (для лучшего форматирования). после удаления пространства он работал нормально. не знаю, помогает ли это.

6

( и ) на самом деле не проблема, если вы используете stringByAddingPercentEscapesUsingEncoding, как предложено samiq. То же самое касается +, / и пробелов. Это URL, поэтому побег кажется естественным.

Если я предполагаю, что правильное распознавание номера телефона Apple будет использоваться в обработчике схемы tel:, если вы уйдете правильно.

(отсутствующая репутацией, чтобы сделать его комментарий)

3

Я обнаружил, что проблема была из-за символы, где не допускается тела: // 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:@""]; 
+2

Этот код также удаляет символ «+» из международных кодов стран. – Shmidt

+0

Я предпочитаю этот ответ для фильтрации сомнительных строк «номер телефона». Благодаря! – quickthyme

Смежные вопросы