Hallo, ich mache eine iOS-App mit UniversalLink.
Universal Link funktioniert einwandfrei, aber die Rückrufmethode wird nicht aufgerufen.
Meine AppDelegate.swift ist unten.
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
}
}
Die Methode wird in iOS 12 Simulator aufgerufen.
Das Problem tritt also nur in iOS 13 auf.
Nur in iOS13 wird dieser Fehler in der Konsole gedruckt.
BackgroundTask kann nicht beendet werden: Es gibt keine Hintergrundaufgabe mit der Kennung 1 (0x1) oder sie wurde möglicherweise bereits beendet. Brechen Sie UIApplicationEndBackgroundTaskError () zum Debuggen ein.
Dies kann also die Ursache des Problems sein.
Ich würde mich sehr über Hilfe freuen
Antworten:
In meinem Fall habe ich ein brandneues Projekt auf Xcode 11 gestartet, das
SceneDelegate
ebenso wieAppDelegate
Es sieht so aus, als ob UniversalLinks (und wahrscheinlich mehrere andere APIs) diesen Rückruf für Folgendes verwenden
SceneDelegate
:Anstelle dieses Rückrufs auf dem
AppDelegate
:Nachdem ich das implementiert hatte,
SceneDelegate
funktionierte alles wieder wie erwartet. Ich habe es nicht ausprobiert, aber ich gehe davon aus, dass Sie möglicherweise beide Methoden implementieren müssen, wenn Sie auf iOS 12 und niedriger abzielen.Hoffe das hilft
quelle
Ich hatte ein ähnliches Problem mit
SceneDelegate
und universellen Links, bei denen ich nicht zu NSUserActivity gelangen konnte, als die App gerade gestartet wurde (in diesem Fall Hintergrund-NFC-Lesung in iOS 13).Wie in der Antwort von @Jan erwähnt, befindet sich userActivity nun in der
SceneDelegate
.Wenn die App läuft oder im Hintergrund, dh. geschlossen, wird ein universeller Link den
scene(_:continue:)
Delegierten feuern .Wenn sich die App nicht im Hintergrund befindet, wird vom
scene(_:continue:)
Delegaten kein universeller Link gestartet. StattdessenNSUserActivity
wird das von verfügbar seinscene(_:willConnectTo:options:)
. z.B.quelle