如何跳往safri、appstore、email等应用

距离上一次发表文章时,说不清有多久了。
不多说,先上主题,因为项目有发邮件的需求,因而需要跳往原生的邮件app来发送邮件。在网上搜索到有3种方法,其中有两种是原生方法,另外一种为第三方方法,但原生方法中都各有裨益,现在列出下面3种方法,以及它们的优劣势。

1、使用openURL发送邮件

    // 主题
    NSString *subject = @"Message subject";
    // 邮件内容
    //    NSString *body = @"Message body";
    // 收件人
    NSString *address = @"[email protected]";
    // 抄送
    NSString *cc = @"[email protected]";
    NSString *path = [NSString stringWithFormat:@"mailto:%@?cc=%@&subject=%@", address, cc, subject];
    NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    
    [[UIApplication sharedApplication] openURL:url];

总结:此方法的优势在于无论用户是否已经登录邮箱,都会跳往邮件app让用户先登录,再发送邮件;而劣势就是已经打开的app会处于后台,需要用户再次进入。

2、使用MFMailComposeViewController发送邮件

使用前注意:
1)项目需要导入框架:MessageUI.framework
2)使用的Controlelr里导入头文件:#import

// 邮件服务器
    MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
    // 设置邮件代理
    [mailCompose setMailComposeDelegate:self];
    
    // 设置邮件主题
    [mailCompose setSubject:@"我是邮件主题"];
    
    // 设置收件人
    [mailCompose setToRecipients:@[@"邮箱号码"]];
    // 设置抄送人
    [mailCompose setCcRecipients:@[@"邮箱号码"]];
    // 设置密抄送
    [mailCompose setBccRecipients:@[@"邮箱号码"]];
    
    /**
     *  设置邮件的正文内容
     */
    NSString *emailContent = @"我是邮件内容";
    // 是否为HTML格式
    [mailCompose setMessageBody:emailContent isHTML:NO];
    // 如使用HTML格式,则为以下代码
    //    [mailCompose setMessageBody:@"

Hello

World!

" isHTML:YES]; /** * 添加附件 */ UIImage *image = [UIImage imageNamed:@"image"]; NSData *imageData = UIImagePNGRepresentation(image); [mailCompose addAttachmentData:imageData mimeType:@"" fileName:@"custom.png"]; NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"]; NSData *pdf = [NSData dataWithContentsOfFile:file]; [mailCompose addAttachmentData:pdf mimeType:@"" fileName:@"瞬间学会发送邮件"]; // 弹出邮件发送视图 [self presentViewController:mailCompose animated:YES completion:nil];

在发送之前需要验证用户是否已经登录

if ([MFMailComposeViewController canSendMail]) { // 用户已设置邮件账户
        [self sendEmailAction]; // 调用发送邮件的代码
    }
// MFMailComposeViewControllerDelegate的代理方法:
- (void)mailComposeController:(MFMailComposeViewController *)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError *)error
{
    switch (result)
    {
        case MFMailComposeResultCancelled: // 用户取消编辑
            NSLog(@"Mail send canceled...");
            break;
        case MFMailComposeResultSaved: // 用户保存邮件
            NSLog(@"Mail saved...");
            break;
        case MFMailComposeResultSent: // 用户点击发送
            NSLog(@"Mail sent...");
            break;
        case MFMailComposeResultFailed: // 用户尝试保存或发送邮件失败
            NSLog(@"Mail send errored: %@...", [error localizedDescription]);
            break;
    }
    
    // 关闭邮件发送视图
    [self dismissViewControllerAnimated:YES completion:nil];
}

总结:优势在于发邮件时以模态窗口打开页面以供用户发送,劣势在于需要用户先在邮件app中登录,才能发邮件,否则不可以打开此发送页面

3、使用第三方库SKPSMTPMessage发送邮件

具体参考SKPSMTPMessage第三方库

另外这里涉及到了跳往系统app,所需要用到的方法是openUrl;比如说
ps:

    // 跳往safri
    NSString *stringURL = @"http://wiki.akosma.com/";
    NSURL *url = [NSURL URLWithString:stringURL];
    [[UIApplication sharedApplication] openURL:url];
    // 跳转至appstore
//    NSString *stringURL = @"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=294409923&mt=8";
    NSString *stringURL = @"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware";
    NSURL *url = [NSURL URLWithString:stringURL];
    [[UIApplication sharedApplication] openURL:url];

你可能感兴趣的:(如何跳往safri、appstore、email等应用)