Я создал собственную схему URL для запуска моего приложения из других приложений.Это работает из Safari, если приложение не открыто.Он загружает AppDelegate с функцией:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
Проблема в том, что, когда у меня открыто приложение, и помещаю его в фоновый режим, нажав кнопку домой.Переменная, которую я установил для получения текста в AppDelegate, больше не попадет.У меня есть основной уведомитель, который работает, когда я возвращаю приложение на передний план, но переменная, на которую я ссылаюсь в viewDidLoad, пуста, так как она читает его из AppDelegate.Согласно документации Apple, при создании настраиваемой схемы URL-адресов она попадет в указанную выше функцию.
Система доставит URL-адрес вашего приложения, вызвав приложение делегата приложения (_: open: options:) метод.
Есть функция для applicationWillEnterForeground, но я не уверен, как получить пользовательский URL в эту функцию, если метод не вызывается.
Здесьэто то, что у меня есть:
AppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var receivedURL: URL?
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
receivedURL = url
return true
}
В MainViewController:
let appDelegate = UIApplication.shared.delegate as? AppDelegate
override fun viewDidLoad() {
if appDelegate?.receivedURL != nil {
urlToDecodeTextView.text = appDelegate?.receivedURL?.absoluteString
}
NotificationCenter.default.addObserver(self, selector: #selector(handleLinks), name: UIApplication.willEnterForegroundNotification, object: nil)
}
@objc func handleLinks(notification: Notification) {
print("made it back") <-- This prints
let test = appDelegate?.receivedURL <-- this is always nil
urlToDecodeTextView.text = test?.absoluteString
}
Это оригинальный код, который у меня был.Этот код прекрасно работает, если приложение не открыто, но не если приложение работает в фоновом режиме.Я заметил, что функция appdelegate запускается каждый раз, но когда происходит уведомление, значение равно нулю - даже если оно было установлено в appdelegate.
В конечном итоге я пытаюсь скопировать URL-адрес из электронного письма (текст или URL-адрес) и поделиться им с моим приложением.Когда оно будет опубликовано, мое приложение должно открыться с URL-адресом в соответствующем текстовом представлении.Я подумал, что может быть проще использовать собственную схему URL и обрабатывать переписывание ссылки, но это оказалось проблемой.