Как зайти в приложение по ссылке Gmail в Swift - PullRequest
2 голосов
/ 24 июня 2019

Я хочу зайти в приложение для конкретного контроллера с помощью Deeplinking.

Я пишу следующий код в моем файле AppDelegate, но он не вызывает этот метод, даже если он идет ко всемтолько домашняя страница.

extension AppDelegate{
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

        print("url \(url)")
        print("url host :\(url.host!)")
        print("url path :\(url.path)")


        let urlPath : String = url.path as String
        let urlHost : String = url.host as! String
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        //PickuppageControllerDeeplinking://host/inner

        if(urlHost != "mail.google.com")
        {
            print("Host is not correct")
            return false
        }

        if(urlPath == "/inner"){

            let innerPage: PickupsPageController = mainStoryboard.instantiateViewController(withIdentifier: "PickupsPageController") as! PickupsPageController
            self.window?.rootViewController = innerPage
        } else if (urlPath == "/about"){

        }
        self.window?.makeKeyAndVisible()
        return true
    }
}

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Для этого вам нужно реализовать схемы URL. Ссылка ссылка для документации

Вам нужно сделать две вещи

  1. Зарегистрируйте схему URL в вашем приложении
  2. Обработка входящего URL-адреса в методе делегата приложения
application(_ application: UIApplication,
                 open url: URL,
                  options: [UIApplicationOpenURLOptionsKey : Any] = [:] ) -> Bool
0 голосов
/ 24 июня 2019

попробуйте этот код

установить метод удаления MFMailComposeViewController

class yourViewController: UIViewController,MFMailComposeViewControllerDelegate {
}

 override func viewDidLoad() {
let mailComposeViewController = configuredMailComposeViewController()
        if MFMailComposeViewController.canSendMail() {
            self.present(mailComposeViewController, animated: true, completion: nil)
        } else {
            self.showSendMailErrorAlert()
        }
}


func configuredMailComposeViewController() -> MFMailComposeViewController {
        let mailComposerVC = MFMailComposeViewController()
        mailComposerVC.mailComposeDelegate = self // Extremely important to set the --mailComposeDelegate-- property, NOT the --delegate-- property

        mailComposerVC.setToRecipients(["your mail"])
        mailComposerVC.setSubject("Yoursubject")
        mailComposerVC.setMessageBody("", isHTML: false)

        return mailComposerVC
    }

    func showSendMailErrorAlert() {
        let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail.  Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK")
        sendMailErrorAlert.show()
    }

    // MARK: MFMailComposeViewControllerDelegate Method
    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
...