Xummer

iOS App中拨打电话

问题

实现app中拨打电话后返回app,通过load一个webview来实现。(单纯的拨打电话直接openUrl就可以解决。)

之前网上盛行的代码

NSString *phoneStr = [NSString stringWithFormat:@"tel://%@“, phone];
UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [[NSURL alloc] initWithString:phoneStr];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
[[[UIApplication sharedApplication] keyWindow] addSubview:callWebview];
UrlSchema 是否有效
tel:15121002014 有效
tel:+8615121002014 无效
tel:(+86)15121002014 无效
tel:1 512 100 2014 无效
tel:1-512-100-2014 无效

解决方法

之前没有公开tel这个url schema, 现在已经有了Apple文档 ,主要改变有以下两点。

  1. tel:代替之前的tel:// (原来的加双斜杠没有问题,还是按照文档上写的)
  2. NSStringstringByAddingPercentEscapesUsingEncoding规则化电话格式
NSString *originalPhone =  [phone stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *phoneStr = [NSString stringWithFormat:@"tel:%@", originalPhone];
UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [[NSURL alloc] initWithString:phoneStr];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
[[[UIApplication sharedApplication] keyWindow] addSubview:callWebview];
UrlSchema 是否有效
tel:15121002014 有效
tel:+8615121002014 有效
tel:(+86)15121002014 有效
tel:1 512 100 2014 有效
tel:1-512-100-2014 有效

-以上-