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

Проблема с использованием tel: URL для инициирования вызова

Я пытаюсь инициировать вызов из приложения iPhone.

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

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

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

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

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

Какая идея может быть связана с моим вызовом?

Спасибо.

4b9b3361

Ответ 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

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

Ответ 10

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