Iphone 使用tel:URL发起呼叫时出现问题

Iphone 使用tel:URL发起呼叫时出现问题,iphone,Iphone,我正在尝试从iPhone应用程序中发起呼叫 此相关代码正常工作并按预期打开Safari: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]]; 但是,当我将http URL替换为tel URL时,生成的代码不会调用手机应用程序: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:

我正在尝试从iPhone应用程序中发起呼叫

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]];
但是,当我将http URL替换为tel URL时,生成的代码不会调用手机应用程序:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:3035551212"]];
不会生成异常或警报(在模拟器或设备上)

知道我的调用有什么问题吗


谢谢。

URL应该是tel://3035551212 而不是电话:3035551212。。。
添加它//它应该会工作。

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

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

它不会打开任何东西,就像你一样。我甚至尝试了一个常规的
http
URL。原来我忘了将
委托
设置为
自我
。这可能也是您的问题。

使用
tel:{phone number}
并以与您相同的方式调用它时没有任何问题。不过,这只适用于iPhone设备


我必须做的一件事是从电话串中去掉多余的字符(如所有括号、空格、破折号和点)。上面的一些例子(但不是原始文章)有破折号。这可能就是问题所在。

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


正如@bentford所说,当你试图点击contacts应用程序上的手机时,模拟器会显示一个警报,这只是一个警报,因为该应用程序会检查设备是否支持
tel:
协议

除了他写的内容之外,您可能还希望添加对转义任何特殊字符或空格的支持,如:

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


干杯。

如果您的电话号码中有
,手机应用程序将不会启动。

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

如果按照samiq的建议使用
stringByAddingPercentEscapesUsingEncoding
,实际上没有问题。
+
/
和空格也是如此。这是一个URL,所以转义看起来很自然

如果我猜对了,苹果的常规电话号码识别将被用于
tel:
scheme处理程序,如果你能正确地转义的话


(缺少声誉以作评论)

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

关于通过url方案拨打电话的一些附加信息(因为我认为有人可能会发现它很有用)


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


这是我最初使用的,直到我发现我的应用程序会崩溃,因为创建了一个nil
NSURL
(后来被传递到一个收集对象),因为无法正确地转义一个电话号码,格式如下:
(#####-#####
。前面提到的代码解决了这个问题。

它应该可以工作,也许代码中有前面提到的内容。什么是设备?iPodtouch不能打电话……不是真的。无论是作品还是苹果的文档都表明海报的版本:
tel:
url不使用“/”,而当前版本的文档[没有带有
tel://
破折号的示例]符合文档要求:此代码还将删除“+”来自国际国家代码的字符。我更喜欢这个答案来过滤有问题的“电话号码”字符串。谢谢!FWIW,我已经尝试了几种选择,包括
(xxx)-xxx xxxx和括号在iOS 7上似乎没有问题。尽管空格似乎会妨碍手机应用程序的启动。仅供参考:在iOS 13中,
tel:
现在会打开消息,以便也可以在模拟器中进行测试。
NSString *phoneNumberURLString = [@"tel://" stringByAppendingString:[result.phoneNumber
                 stringByAddingPercentEncodingWithAllowedCharacters:
                                 [NSCharacterSet URLPathAllowedCharacterSet]]];
NSURL *phoneNumberURL = [NSURL URLWithString:phoneNumberURLString];