从我的应用中打开Gmail应用

时间:2015-08-20 09:25:50

标签: ios uiapplication

我正在尝试从我的应用发送电子邮件。但我想要的是如果用户在他/她的手机上使用Gmail应用程序,则应使用它发送邮件。如果Gmail应用程序不可用,则应将用户重定向到邮箱。

那么如何知道用户是否包含Gmail应用,以及如何将用户重定向到该应用呢?

4 个答案:

答案 0 :(得分:26)

iOS9 +

的设置

正如here所述,如果您使用的是iOS9 + ,请不要忘记在googlegmail上添加LSApplicationQueriesSchemes info.plist 1}}

my info.plist

打开GMail的代码

然后,你可以做同样的接受答案(下面是我的swift 2.3版本):

let googleUrlString = "googlegmail:///co?subject=Hello&body=Hi"
if let googleUrl = NSURL(string: googleUrlString) {
    // show alert to choose app
    if UIApplication.sharedApplication().canOpenURL(googleUrl) {
        if #available(iOS 10.0, *) {
          UIApplication.sharedApplication().openURL(googleUrl, options: [:], completionHandler: nil)
        } else {
          UIApplication.sharedApplication().openURL(googleUrl)
        }
    }
}

答案 1 :(得分:18)

您需要使用自定义网址方案。对于gmail应用程序:

googlegmail://

如果您想撰写邮件,可以在此网址中添加更多参数:

co?subject=Example&body=ExampleBody

您可以使用此代码确定是否安装了任何类型的应用程序(只需将customURL替换为其他应用程序):

NSString *customURL = @"googlegmail://";

if ([[UIApplication sharedApplication] 
canOpenURL:[NSURL URLWithString:customURL]])
{
  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}
else
{
  //not installed, show popup for a user or an error
}  

答案 2 :(得分:0)

对于 Swift 3.0 +

注意:

  1. 此解决方案说明了如何在URL的参数中使用空格或换行符(Gmail可能不尊重换行符)。
  2. 只要您不调用canOpenURL(url),就不必向LSApplicationQueriesSchemes注册。只需尝试使用完成处理程序来确定它是否成功。

    let googleUrlString = "googlegmail:///co?to=\(address.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? "")&subject=\(subject.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? "")&body=\(buildInfo.addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? "")"
    
    if let googleUrl = URL(string: googleUrlString) {
        UIApplication.shared.open(googleUrl, options: [:]) {
            success in
            if !success {
                 // Notify user or handle failure as appropriate
            }
        }
    }
    else {
        print("Could not get URL from string")
    }
    

答案 3 :(得分:0)

直到我意识到我瞄准的是info_development.plist而不是生产文件info.plist

之前,我都不知道为什么这对我不起作用

如果您像我一样,并且碰巧有多个Plist(一个用于开发,一个用于产品等),请确保在任何地方进行编辑。 ;-)