ios 13'te çağrılmayan application (… continue userActivity…) yöntemi


11

Merhaba UniversalLink kullanarak ios uygulaması yapıyorum.

Universal Link iyi çalışıyor, ancak geri arama yöntemi çağrılmıyor.

AppDelegate.swift'im aşağıda.

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
    }
}

Yöntem iOS 12 Simulator'da çağrılır.

Bu nedenle, sorun yalnızca iOS 13'te ortaya çıkar.

Yalnızca iOS13'te bu hata konsolda yazdırılır.

BackgroundTask sona erdirilemez: Tanımlayıcı 1 (0x1) ile arka plan görevi yok veya zaten sona ermiş olabilir. Hata ayıklamak için UIApplicationEndBackgroundTaskError () 'da mola verin.

Bu, sorunun nedeni olabilir.

Gerçekten birinin yardımına minnettar olurum


3
Aynı problemim var
Emre Önder

2
Bu konuda herhangi bir güncelleme var mı?
jfredsilva

1
Herkes bu soruna bir çözüm buldu mu?
Ocak

@ EmreÖnder Bir çözüm buldum (yanıtı kontrol et). Umarım geçti aynı sorun
Jan

@jfredsilva Bir çözüm buldum (cevabı kontrol et). Umarım geçti aynı sorun
Jan

Yanıtlar:


10

Benim durumumda, Xcode 11'de de kullanan yeni bir proje başlattım SceneDelegate.AppDelegate

Görünüşe göre UniversalLinks (ve muhtemelen birkaç başka API) bu geri çağrıyı şu alanlarda kullanıyor SceneDelegate:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { }

Bu geri arama yerine AppDelegate:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { }

Bir kez SceneDelegateher şeyi üzerine uyguladığım beklendiği gibi çalışmaya başladı. Denemedim, ancak iOS 12 ve aşağısını hedefliyorsanız, her iki yöntemi de uygulamanız gerekebileceğini varsayıyorum.

Bu yardımcı olur umarım


Ayrıca uyandırmıyor. Apple bu sorunu iOS 13'te doğruladı. Elbette, sorunu çözmeyecekler.
Dmitry


2
Harika, SceneDelegate'de func sahnesi (_ sahne: UIScene, devam kullanıcıAktivite: NSUserActivity) {} ve şimdi iyi çalışıyor @Jan, AppDelegate ve SceneDelegate üzerinde kod çoğaltma durumundan kaçınmanın herhangi bir yolu var mı? Teşekkürler
Jigar

Ben thinkg yok @Jigar şimdi bile AppDelegate içinde kodu gerekir
Oca

@ SceneDelegate'i kaldırabilir miyim, bundan sonra iyi çalışıyor.
Jigar

3

Benzer bir sorun vardı SceneDelegateve uygulama yeni başlatıldığında NSUserActivity'ye ulaşamadığım evrensel bağlantılar vardı (bu durumda ios 13'te Arka Plan NFC okuması).

@Jan tarafından verilen cevapta belirtildiği gibi, userActivity artık devam ediyor SceneDelegate.

Uygulama çalışıyorsa veya arka planda yani. kapalı, evrensel bir bağlantı scene(_:continue:)delege ateşleyecektir .

Uygulama arka planda değilse, scene(_:continue:)delege evrensel bir bağlantıyı tetiklemez. Bunun yerine, NSUserActivitykullanılabilir scene(_:willConnectTo:options:). Örneğin.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    if let userActivity = connectionOptions.userActivities.first {
        debugPrint("got user activity")
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.