文章目录
前言 常见的那些功能,其实经常用不到,但是用到的时候又是经常用的到,总结一下,以免一时脑子瓦特想不起来
一:打电话
随着API的更新,打电话的方式也在改变
1、旧的API :openURL
- (void)callType01 {
NSURL *url = [NSURL URLWithString:@"tel://10086"];
if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"tel://"]]) {
BOOL result = [[UIApplication sharedApplication]openURL:url];
NSLog(@"%d",result);
}
}
简述:该api在iOS10.0被弃用
iOS9.0以前,打电话前没有弹窗提示、通话结束后不能返回到app;
在iOS10.2以前,打电话前没有弹窗提示;
在10.2.1开始,有弹窗提示。
返回指是一个BOOL类型,通过返回值来判断呼叫状态
2、新的API : openURL:url options: completionHandler:
- (void)callType02 {
NSURL *url = [NSURL URLWithString:@"tel://10086"];
if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"tel://"]]) {
[[UIApplication sharedApplication]openURL:url options:@{
} completionHandler:nil];
}
}
简述:iOS10.0之后的新API
iOS10.2之前,没有弹窗提示,之后有弹窗提示,结束之后能返回到当前app
completionHandler返回值能获得呼叫状态
附 :
在旧的API中,部分版本没吊起电话前没有弹窗提示,这会引起误操作呼叫电话,造成不必要的麻烦,所以会使用
NSURL *url =[NSURL URLWithString:@“telprompt://10000”];
把@“tel://” 修改成@“telprompt://”,这样在呼叫之前就会有弹窗提示;但是从后续的API发展看,apple似乎也注意到了直接呼出没有弹窗提示的弊端,这不符合苹果的安全意识逻辑,后续的系统版本陆续加上弹窗提示,所以再没必要这么使用了,而且这么使用可能会引起上架审核失败,所以仅限于了解便可
3、利用WebView吊起电话
3.1 UIWebView
- (void)callType03 {
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel://10010"]]];
[self.view addSubview:webView];
}
简述 :版本的分界线已经不清楚了,用的12的版本测试在呼叫之前是有弹窗提示的,在iOS 13之后,官方建议别再使用UIWebView,所以新的项目还是尽量去使用WKWebView去处理
3.2 WKWebView
- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSURL *url = navigationAction.request.URL;
NSString *scheme = [url scheme];
UIApplication *app = [UIApplication sharedApplication];
// 打电话
if ([scheme isEqualToString:@"tel"]) {
if ([app canOpenURL:url]) {
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{
} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:url]</