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

den*_*ton 27 iphone

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

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]];
Run Code Online (Sandbox Code Playgroud)

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:3035551212"]];
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

ben*_*ord 44

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"]];
Run Code Online (Sandbox Code Playgroud)

关于tel:url方案的Apple文档链接

openURL文档的链接

  • 第一种格式在设备上不起作用. (2认同)

sam*_*miq 7

正如@bentford所说,当你试图点击联系人应用程序上的手机时,模拟器确实显示警报,这可能是因为应用程序检查设备是否tel:支持该协议而生成的警报或不.

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

NSString *phoneStr = [NSString stringWithFormat:@"tel:%@",[self.contactDetails objectForKey:@"phone"]];
NSString *escaped = [phoneStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

干杯.


Seb*_*ian 6

()实际上是没有问题的,如果你使用的stringByAddingPercentEscapesUsingEncoding是由samiq建议.同去的+,/和空间.它是一个URL,因此转义似乎很自然.

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

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


Wri*_*sCS 5

如果您的电话号码中有(),则“电话”应用程序将不会启动。