Откройте приложение Gmail из моего приложения
Я пытаюсь отправить электронное письмо из своего приложения. Но я хочу, чтобы у пользователя было приложение Gmail на его/ее телефоне, тогда его следует отправлять по почте. Если приложение Gmail недоступно, пользователь должен быть перенаправлен на Почтовый ящик.
Итак, как я могу узнать, содержит ли пользователь приложение Gmail и как я могу перенаправить его на него.
Ответы
Ответ 1
Вам нужно использовать собственную схему 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
}
Ответ 2
Настройка для iOS9 +
Как описано здесь, , если вы на iOS9 +, не забудьте добавить googlegmail
в LSApplicationQueriesSchemes
на своем info.plist
![my info.plist]()
Код для открытия GMail
Затем вы можете сделать то же самое, что и принятый ответ (ниже моя версия 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)
}
}
}
Ответ 3
Для Swift 3. 0+
Заметки:
- Это решение показывает, как использовать пробелы или символы новой строки в аргументах URL-адреса (Gmail может не учитывать символы новой строки).
-
Нет необходимости регистрироваться в LSApplicationQueriesSchemes, если вы не вызываете canOpenURL (url). Просто попробуйте использовать обработчик завершения, чтобы определить, удалось ли это.
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")
}
Ответ 4
Я не мог понять, почему это не работает для меня, пока я не понял, что нацеливаюсь на info_development.plist вместо производственного файла info.plist
Если вы похожи на меня и у вас есть несколько списков Plist (один для разработки, один для продукта и т.д.), Убедитесь, что вы редактируете его везде. ;-)