sharedApplication之openURL

  • 打电话
  • 发短信
  • 发邮件
  • 应用跳转
  • 应用评分
  • 其他
    主要通过以上6点分别介绍.

打电话

方法1:最简单最直接的方式:直接跳到拨号界面

NSURL url = [NSURL URLWithString:@”tel://10010”];
[[UIApplication sharedApplication] openURL:url];

*缺点:打完电话不会自动回到原应用,直接停留在通话记录界面.

方法2:拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用

SURL url = [NSURL URLWithString:@”telprompt://10010”];
[[UIApplication sharedApplication] openURL:url];

*缺点:私有API(非文档关键字),所以可能不会被审核通过(没有试过)

方法3:创建一个UIWebView来加载URL,且宽高为0,0,拨完后能自动回到原应用

if (_webView == nil) {
_webView = [[UIWebView alloc] initWithFrame:CGRectZero];
}
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@”tel://10010”]]];

注意:千万不要添加到界面上来,不然会挡住其他界面

推荐使用方法3,这时的WEBView不是用来显示,只是用来打电话的.

###

发短信

方法1:直接跳到发短信界面

NSURL url = [NSURL URLWithString:@”sms://10010”];
[[UIApplication sharedApplication] openURL:url];

*缺点:不能指定短信内容,而且不能自动回到原应用

方法2:使用MessageUI框架

#import <MessageUI/MessageUI.h>  // 引入框架

// 并且控制需要遵守代理协议

// 显示发短信的控制器
MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc] init];
// 设置短信内容
vc.body = @”BM在吗?”;
// 设置收件人列表
vc.recipients = @[@”10010”, @”02010010”];
// 设置代理
vc.messageComposeDelegate = self;

// 显示控制器
[self presentViewController:vc animated:YES completion:nil];

代理方法

  • (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
    {
    // 关闭短信界面
    [controller dismissViewControllerAnimated:YES completion:nil];

    if (result == MessageComposeResultCancelled) {

    NSLog(@"取消发送");
    

    } else if (result == MessageComposeResultSent) {

    NSLog(@"已经发出");
    

    } else {

    NSLog(@"发送失败");
    

    }
    }


注意:1.需要引入框架,2.需要成为代理.

推荐使用方法2,当短信关闭时会返回原来应用,并且可以指定短信内容.

###

发邮件

方法1:直接跳到发邮件界面

NSURL url = [NSURL URLWithString:@”mailto://birdmichael126@gmail.com”];
[[UIApplication sharedApplication] openURL:url];

*缺点:不能指定邮件内容,而且不能自动回到原应用

 

方法2:使用MessageUI框架

#import <MessageUI/MessageUI.h>  // 引入框架

// 并且控制需要遵守代理协议

// 不能发邮件
if (![MFMailComposeViewController canSendMail]) return;

MFMailComposeViewController *vc = [[MFMailComposeViewController alloc] init];

// 设置邮件主题
[vc setSubject:@”会议”];
// 设置邮件内容
[vc setMessageBody:@”今天下午开会吧” isHTML:NO];
// 设置收件人列表
[vc setToRecipients:@[@”643055866@qq.com”]];
// 设置抄送人列表
[vc setCcRecipients:@[@”1234@qq.com”]];
// 设置密送人列表
[vc setBccRecipients:@[@”56789@qq.com”]];

// 添加附件(一张图片)
UIImage image = [UIImage imageNamed:@”lufy.jpeg”];
NSData
data = UIImageJPEGRepresentation(image, 0.5);
[vc addAttachmentData:data mimeType:@”image/jepg” fileName:@”lufy.jpeg”];

// 设置代理
vc.mailComposeDelegate = self;
// 显示控制器
[self presentViewController:vc animated:YES completion:nil];

代理方法

  • (void)mailComposeController:(MFMailComposeViewController )controller didFinishWithResult:(MFMailComposeResult)result error:(NSError )error
    {
    // 关闭邮件界面
    [controller dismissViewControllerAnimated:YES completion:nil];

    if (result == MFMailComposeResultCancelled) {

    NSLog(@"取消发送");
    

    } else if (result == MFMailComposeResultSent) {

    NSLog(@"已经发出");
    

    } else {

    NSLog(@"发送失败");
    

    }
    }


注意:1.需要引入框架,2.需要成为代理.

推荐使用方法2,与发短信类似,只不过控制器类名换了而已.
 

应用跳转

其中,bm:是协议头,ios.birdmichael.com是路径

在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个程序。

例如在 iPad 上浏览网页,并且 iPad 已经安装了 淘宝 HD,那么就打开下面这个链接就会在淘宝 HD 中查看这个商品的详细信息,也可以方便的使用淘宝 HD 进行购买、收藏等操作。

配置

要为 iOS 程序添加自定义协议的支持是一件很方便的事,只需要在程序的 Info.plist 添加一个 URL types 节点就可以了。在这个节点里,可以设置这个程序所支持的自定义协议名称,像 http、ftp 这种,一般我们可以设置为程序英文名称,像淘宝客户端中就设置了 taobao,这样 taobao:// 这个形式的 URL 就会关联到淘宝客户端的 App。

6598259438238301923
  1. 如果没有URL types,随意点一个key行后面+号,输入大写URL选择URL types
  2. 右键URL types,选择add row
  3. item0下改成url identifier,后面的value值随意写,com.xx,xx
  4. 加一行,选择url schemes,item后面值写成你需要的,譬如上面的todolist,以后别的app就可以用
     
    NSURL *url = [NSURL URLWithString:@”bm://ios.birdmichael.com”];
    [[UIApplication sharedApplication] openURL:url];

    启动你的app.

 

应用评分

其中appid是有苹果商店提供的一个身份标识id.

方法1:

NSString appid = @”444934666”;
NSString
str = [NSString stringWithFormat:
@”itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@”, appid];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

 

方法2:

NSString *str = [NSString stringWithFormat:
@”itms-apps://itunes.apple.com/cn/app/id%@?mt=8”, appid];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

建立使用第二种.
 

其他

About — prefs:root=General&path=About

Accessibility — prefs:root=General&path=ACCESSIBILITY

Airplane Mode On — prefs:root=AIRPLANE_MODE

Auto-Lock — prefs:root=General&path=AUTOLOCK

Brightness — prefs:root=Brightness

Bluetooth — prefs:root=General&path=Bluetooth

Date & Time — prefs:root=General&path=DATE_AND_TIME

FaceTime — prefs:root=FACETIME

General — prefs:root=General

Keyboard — prefs:root=General&path=Keyboard

iCloud — prefs:root=CASTLE

iCloud Storage & Backup — prefs:root=CASTLE&path=STORAGE_AND_BACKUP

International — prefs:root=General&path=INTERNATIONAL

Location Services — prefs:root=LOCATION_SERVICES

Music — prefs:root=MUSIC

Music Equalizer — prefs:root=MUSIC&path=EQ

Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit

Network — prefs:root=General&path=Network

Nike + iPod — prefs:root=NIKE_PLUS_IPOD

Notes — prefs:root=NOTES

Notification — prefs:root=NOTIFICATIONS_ID

Phone — prefs:root=Phone

Photos — prefs:root=Photos

Profile — prefs:root=General&path=ManagedConfigurationList

Reset — prefs:root=General&path=Reset

Safari — prefs:root=Safari

Siri — prefs:root=General&path=Assistant

Sounds — prefs:root=Sounds

Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK

Store — prefs:root=STORE

Twitter — prefs:root=TWITTER

Usage — prefs:root=General&path=USAGE

VPN — prefs:root=General&path=Network/VPN

Wallpaper — prefs:root=Wallpaper

Wi-Fi — prefs:root=WIFI

INTERNET_TETHERING Internet_tethering — prefs:root= INTERNET_TETHERING