Привет я делаю приложение IOS с использованием UniversalLink.
Universal Link работает нормально, но метод обратного вызова не вызывается.
Мой AppDelegate.swift ниже.
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
func application(_ application: UIApplication,
willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
return true
}
// this method not called!!
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
print("called")
return true
}
}
Метод вызывается в iOS 12 Simulator.
Итак, проблема возникает только в iOS 13.
Только в iOS13 эта ошибка печатается в консоли.
Не удается завершить BackgroundTask: фоновая задача с идентификатором 1 (0x1) не существует, или она может быть уже завершена. Разрыв в UIApplicationEndBackgroundTaskError () для отладки.
Таким образом, это может быть причиной проблемы.
Буду очень признателен за помощь
Ответы:
В моем случае я запустил новый проект на Xcode 11, который использует,
SceneDelegate
а такжеAppDelegate
Похоже, что UniversalLinks (и, возможно, несколько других API) используют этот обратный вызов для
SceneDelegate
:Вместо этого обратного вызова на
AppDelegate
:Как только я реализовал один,
SceneDelegate
все снова заработало, как и ожидалось. Я не пробовал, но я предполагаю, что если вы ориентируетесь на iOS 12 и ниже, вам может понадобиться реализовать оба метода.Надеюсь это поможет
источник
У меня была похожая проблема с
SceneDelegate
универсальными ссылками, когда я не мог добраться до NSUserActivity, когда приложение только запускалось (в данном случае фоновое чтение NFC в ios 13).Как упомянуто в ответе @Jan, продолжение userActivity теперь в
SceneDelegate
.Если приложение работает или в фоновом режиме, т.е. закрыто, универсальная ссылка уволит
scene(_:continue:)
делегата.Если приложение не работает в фоновом режиме, от
scene(_:continue:)
делегата не будет запускаться универсальная ссылка . Вместо этогоNSUserActivity
будет доступно сscene(_:willConnectTo:options:)
. например.источник