Запустите приложение Apple Mail из моего собственного приложения?


что я уже нашел

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto:"]];

но я просто хочу открыть приложение Mail не только представление композитора. Просто почтовое приложение в своем обычном или последнем состоянии.

какие идеи?

11 54

11 ответов:

поскольку единственный способ запустить другие приложения-это использовать их схемы URL, единственный способ открыть почту - это использовать схему mailto:. Который, к сожалению для вашего случая, всегда откроет окно написать письмо.

по-видимому, почтовое приложение поддерживает 2-ю схему url -message:// который (я полагаю) позволяет открыть конкретное сообщение, если оно было извлечено приложением. Если вы не предоставите url-адрес сообщения, он просто откроет почтовое приложение:

NSURL* mailURL = [NSURL URLWithString:@"message://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
    [[UIApplication sharedApplication] openURL:mailURL];
}
NSString *recipients = @"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";

NSString *body = @"&body=It is raining in sunny California!";

NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];

email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];

Swift версия оригинального ответа Амита:

Swift 2:

func openMailApp() {

    let toEmail = "stavik@outlook.com"
    let subject = "Test email".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()
    let body = "Just testing ...".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()

    if let
        urlString = ("mailto:\(toEmail)?subject=\(subject)&body=\(body)")),
        url = NSURL(string:urlString) {
        UIApplication.sharedApplication().openURL(url)
    }
}

Swift 3.0:

func openMailApp() {

    let toEmail = "stavik@outlook.com"
    let subject = "Test email".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
    let body = "Just testing ...".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

    if let
        urlString = "mailto:\(toEmail)?subject=\(subject)&body=\(body)",
        url = URL(string:urlString) {
        UIApplication.shared().openURL(url)
    }
}

запустите приложение на реальном устройстве и позвоните

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"your@email.com"]];

обратите внимание, что эта строка не влияет на симулятор.

вы можете открыть приложение mail без использования открытия представления compose с помощью схемы url message://

вы можете запустить любое приложение на iOS, Если вы знаете его схему URL. Не знаю, что схема почтового приложения является общедоступной, но вы можете быть подлым и попробовать это:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"message:message-id"]];

реквизит для Фархада Нур-за то, что втянул меня в это. Это немного обратный инжиниринг API почтового приложения. Более подробная информация здесь: https://medium.com/@vijayssundaram/how-to-deep-link-to-ios-7-mail-6c212bc79bd9

расширение ответа Амита: Это запустит почтовое приложение, с новой электронной почтой запущен. Просто отредактируйте строки, чтобы изменить способ начала нового сообщения электронной почты.

//put email info here:
NSString *toEmail=@"supp0rt.fl0ppyw0rm@gmail.com";
NSString *subject=@"The subject!";
NSString *body = @"It is raining in sunny California!";

//opens mail app with new email started
NSString *email = [NSString stringWithFormat:@"mailto:%@?subject=%@&body=%@", toEmail,subject,body];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];

Если вы используете Xamarin для разработки приложения iOS, вот эквивалент C#, чтобы открыть представление композитора почтового приложения:

string email = "yourname@companyname.com";
NSUrl url = new NSUrl(string.Format(@"mailto:{0}", email));
UIApplication.SharedApplication.OpenUrl(url);

на swift 2.3: открыть почтовый ящик

UIApplication.sharedApplication().openURL(NSURL(string: "message:")!)

В Swift:

let recipients = "someone@gmail.com"
let url = NSURL(string: "mailto:\(recipients)")
UIApplication.sharedApplication().openURL(url!)