简体   繁体   中英

SwiftUI Universal Links not working for NFC

Our app uses universal links and the AASA file seems to be working fine because hyperlinks in emails, as well as QR coded URLs both launch the app. They both also cause the SwiftUI .onOpenURL(perform:) function to be called.

Things are a bit more confusing with NFC. The URL is recognised and the app launches, suggesting the issue is not related to AASA. However, the onOpenURL function is not called. Can anyone tell me how to handle universal links from NFC? Ideally I'd like to keep it pure SwiftUI but if I need to use the AppDelegate so be it.

The code in the main SwiftUI file is:

import SwiftUI

@main
struct MyApp: App {
    
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
            WindowGroup {
                ContentView()
                    .onOpenURL(perform: { url in
                        print("url opened:\(url)")
                        // prints when opened from URL in email, 
                        // Notes or QR code, but not when opened 
                        // from URL embedded in NFC NDEF
                    })
            }
        
    }
}

I have also tried defining the application(_:continue:restorationHandler:) function in the AppDelegate, but that doesn't get called either.

Thanks for any help.

In case it helps anyone with the same issue, I solved the issue by registering a URL schema for the app and then using .onOpenURL(perform:) .

Seems a strange way to have to do it but it works as required, so happy days!

The solution is to add a continue user activity handler on a suitable view:

.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
        print("Continue activity \(userActivity)")
        guard let url = userActivity.webpageURL else {
                return
        }
        print("User wants to open URL: \(url)")
        // TODO same handling as done in onOpenURL()
}

It's not obvious why the same Universal Link received through a click on a link in Safari should be handled differently than the same link read from a tag, but apparently it's not the same thing.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM