我正在尝试从我的应用发送电子邮件。但我想要的是如果用户在他/她的手机上使用Gmail应用程序,则应使用它发送邮件。如果Gmail应用程序不可用,则应将用户重定向到邮箱。
那么如何知道用户是否包含Gmail应用,以及如何将用户重定向到该应用呢?
答案 0 :(得分:26)
正如here所述,如果您使用的是iOS9 + ,请不要忘记在googlegmail
上添加LSApplicationQueriesSchemes
info.plist
1}}
然后,你可以做同样的接受答案(下面是我的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 +
注意:
只要您不调用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(一个用于开发,一个用于产品等),请确保在任何地方进行编辑。 ;-)