【问题标题】:SwiftUI Universal Links not working for NFCSwiftUI 通用链接不适用于 NFC
【发布时间】:2021-03-16 21:34:20
【问题描述】:

我们的应用程序使用通用链接,并且 AASA 文件似乎工作正常,因为电子邮件中的超链接以及 QR 编码的 URL 都启动了应用程序。它们都会导致调用 SwiftUI .onOpenURL(perform:) 函数。

使用 NFC 时会有些混乱。 URL 被识别并且应用程序启动,表明该问题与 AASA 无关。但是,不会调用 onOpenURL 函数。谁能告诉我如何处理来自 NFC 的通用链接?理想情况下,我希望它保持纯粹的 SwiftUI,但如果我需要使用 AppDelegate,那就这样吧。

SwiftUI 主文件中的代码是:

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

我也尝试在 AppDelegate 中定义 application(_:continue:restorationHandler:) 函数,但也没有被调用。

感谢您的帮助。

【问题讨论】:

    标签: swift swiftui nfc


    【解决方案1】:

    解决方案是在合适的视图上添加一个继续用户活动处理程序:

    .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()
    }
    

    不明白为什么通过在 Safari 中点击链接接收到的同一个通用链接应该与从标签读取的同一个链接不同的处理方式,但显然它不是一回事。

    【讨论】:

      【解决方案2】:

      如果它可以帮助遇到相同问题的任何人,我通过为应用注册一个 URL 架构然后使用 .onOpenURL(perform:) 解决了这个问题。

      这似乎是一种奇怪的方式,但它可以按要求工作,祝你天天快乐!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-04
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多