在很多App里面我们都会看到分享给朋友的选项,一般是电话分享、短信分享和邮件分享.
电话分享:
第一反应肯定是调用Application的openURL:方法,但是这种方法是有问题的.
并且这个方法在iOS10里面也已经过期了,改用openURL: options: completionHandler方法.
<span style="font-size:18px;"> NSURL *url = [NSURL URLWithString:@"tel://10010"];
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
}];</span>
这种方法的问题就是没有提示电话就直接打过去了,有时候用户会不小心按错所以不是很好.
openURL: options: completionHandler方法的options是一个字典,这里传一个空字典也是可以正常运行的,其实在UIApplication类中这个字典有一个名为UIApplicationOpenURLOptionUniversalLinksOnly的键,值为@YES代表通过URL代表的应用来打开,值为@NO代表通过safari来打开.
文档中是这样描述的:
还可以将URL写成telprompt这种形式但是在程序上架的时候会遇到问题,所以也是不可取的.
<span style="font-size:14px;"> </span><span style="font-size:18px;">NSURL *url = [NSURL URLWithString:@"telprompt://10010"];
[[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionUniversalLinksOnly:@NO} completionHandler:^(BOOL success) {
}];</span>
下面介绍一种可行的方法,就是让webView来加载URLRequest的方式来执行.
<span style="font-size:18px;"> //不设置webView的frame,所以webView就不显示
UIWebView *webView = [[UIWebView alloc]init];
[self.view addSubview:webView];
NSURL *url = [NSURL URLWithString:@"tel://10010"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];</span>
这种方法有提示在上架的时候也不会出现问题.
短信分享:
如果还是用openURL方法的话是能跳转到短信界面的,但是什么内容都没有.
用户在分享的时候不可能自己去写短信,所以这种方法是没有意义的.
如果要实现跳转到发短信界面并且填好里面内容的话需要导入UIMessageUI框架,这个框架中的MFMessageComposeViewController可以实现短信分享效果.
<span style="font-size:14px;"> </span><span style="font-size:18px;"> if (![MFMessageComposeViewController canSendText]) {
return;
}
MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc]init];
//短信内容
messageVC.body = @"跟你分享一个超赞的App";
//短信收件人
messageVC.recipients = @[@"10086",@"10010"];
//MFMessageComposeViewConreoller的代理
messageVC.messageComposeDelegate = self;
[self presentViewController:messageVC animated:YES completion:nil];</span>
<span style="font-size:18px;">//MFMessageComposeViewConreoller的代理方法 点击取消按钮回到原来的应用
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
[self dismissViewControllerAnimated:YES completion:nil];
}</span>
邮件分享:
邮件分享与短信分享类似,都是需要导入MessageUI框架,实现邮件分享的控制器是MFMailComposeViewController <span style="font-size:18px;"> //如果不能发送邮件就返回
if (![MFMailComposeViewController canSendMail]) {
return;
}
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc]init];
//收件人列表
[mailVC setToRecipients:@[@"drenhart@163.com",@"12222@163.com"]];
//抄送
[mailVC setCcRecipients:@[@"123144@163.com"]];
//密送
[mailVC setBccRecipients:@[@"987676@163.com"]];
//主题
[mailVC setSubject:@"跟你分享一个超赞的App"];
//内容
[mailVC setMessageBody:@"推荐使用xxx应用 wwww.aaaaa.com" isHTML:NO];
//附件
UIImage *img = [UIImage imageNamed:@"rockstar programmer"];
NSData *data = UIImagePNGRepresentation(img);
[mailVC addAttachmentData:data mimeType:@"image/jpg" fileName:@"rockstar programmer.jpg"];
//MFMailComposeViewConreoller的代理
mailVC.mailComposeDelegate = self;
[self presentViewController:mailVC animated:YES completion:nil];</span>
<span style="font-size:18px;">//MFMailComposeViewConreoller的代理方法 点击取消或者发送按钮回到原来的应用
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
[self dismissViewControllerAnimated:YES completion:nil];
}</span>