アプリからメールを送信しようとしています。しかし、私が欲しいのは、ユーザーが自分の電話でGmailアプリを使用している場合、それを使用してメールを送信することです。 Gmailアプリが利用できない場合、ユーザーはメールボックスにリダイレクトされます。
それで、ユーザーがGmailアプリを含んでいるかどうかをどのようにして知ることができ、ユーザーをそれにリダイレクトすることができますか?.
カスタムURLスキームを使用する必要があります。 Gmailアプリケーションの場合:
googlegmail://
そこでメッセージを作成したい場合は、このURLにさらにパラメータを追加できます。
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
}
説明されているように ここ 、iOS9 +を使用している場合、info.plist
のgooglegmail
にLSApplicationQueriesSchemes
を追加することを忘れないでください
次に、受け入れられた答えと同じことを行うことができます(以下はmy 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)
}
}
}
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")
}
本番ファイルのinfo.plistではなくinfo_development.plistをターゲットにしていることに気づくまで、これがうまくいかない理由を理解できませんでした
私と同じように、複数のPlist(開発用、製品用など)がある場合は、どこでも編集できるようにしてください。 ;-)