使用tel:URL发起呼叫的问题

时间:2009-05-01 17:00:58

标签: iphone

我正试图在iPhone应用程序中发起呼叫。

此相关代码按预期工作并打开Safari:

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

但是,当我用tel URL替换http URL时,生成的代码不会调用手机应用程序:

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

不会生成异常或警报(在模拟器或设备上)。

知道我的调用可能会出现什么问题?

感谢。

11 个答案:

答案 0 :(得分:43)

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

答案 1 :(得分:6)

正如@bentford所说,当你试图点击联系人应用程序上的手机时,模拟器确实会显示警报,但这只是一个警报,因为应用程序会检查是否{{1设备是否支持协议。

添加到他写的内容中,您可能还希望添加支持以转义任何特殊字符或空格,如:

tel:

希望它有所帮助。

干杯。

答案 2 :(得分:6)

如果您按照samiq的建议使用(

)stringByAddingPercentEscapesUsingEncoding实际上没问题。 +/和空格也是如此。它是一个URL,因此转义似乎很自然。

如果我猜对了,如果你正确逃脱,Apple的常规电话号码识别将在tel:计划处理程序中使用。

(缺少使其成为评论的声誉)

答案 3 :(得分:4)

如果您的电话号码中包含(),则手机应用将无法启动。

答案 4 :(得分:3)

使用tel:{phone-number}并没有遇到任何问题,并以同样的方式调用它。但是只适用于iPhone设备。

我要做的一件事就是从电话字符串中删除多余的字符(如所有括号,空格,短划线和点)。上面的一些例子(但不是原帖)有破折号。这可能是问题所在。

答案 5 :(得分:3)

我发现问题是由于字符不允许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:@""];

答案 6 :(得分:2)

我在尝试向UIAlertView添加“呼叫”按钮时遇到了这个问题。我有以下代码来处理呼叫:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != 0)
    {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:1-602-555-1212"]];
    }
}

它不会像你一样打开任何东西。我甚至尝试了常规http网址。事实证明我忘了将delegate设置为self。这也可能是你的问题。

答案 7 :(得分:1)

我遇到了同样的问题,最后我发现原因是电话号码中有一个空格(为了更好的格式化)。移除空间后它工作正常。

答案 8 :(得分:1)

通过网址方案拨打电话的一些其他信息(因为我认为有人可能会发现它很有用)

How to use tel: with * (star, asterisk) or # (hash, pound) on iOs?

答案 9 :(得分:0)

以下是有关如何在2018年获得电话号码(iOS 11和12最常见)的更新:

NSString *phoneNumberURLString = [@"tel://" stringByAppendingString:[result.phoneNumber
                 stringByAddingPercentEncodingWithAllowedCharacters:
                                 [NSCharacterSet URLPathAllowedCharacterSet]]];
NSURL *phoneNumberURL = [NSURL URLWithString:phoneNumberURLString];

samiq's answer是我最初使用的,直到我发现由于未正确退出手机而创建的NSURL无效(后来又传递到集合对象中)导致应用崩溃数字格式如下:(###) ###-####。前面的代码解决了这个问题。

答案 10 :(得分:-3)

网址应为tel:// 3035551212而不是tel:3035551212 ... 添加//它应该可以工作。