3

我们需要在里面指定什么 URL .widgetURL()

在关于 Widget Code Also 的 WWDC 会议中,他们使用了.widgetURL(entry.character.url). 这里 entry.character.url 是URL(string: "game:///egghead")!

请解释一下我们需要在这里传递的URL(widgetURL())才能到达APP的特定视图?

4

1 回答 1

3

url 格式为 scheme://someAction

有过度简化它的风险,该方案通常是您的应用程序的名称。这是您确认该网址是否适用于您的应用的方式

在您的小部件正文中,您使用 widgetURL 修饰符:

var body: some View {
        content().widgetURL("myApp://someAction")
}

然后在您的应用程序中,您使用 onOpenURL 修饰符获取 url,检查它的应用程序并解析它以确定要做什么。someAction 是您发送给应用程序的消息,告诉它要做什么

 var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    guard url.scheme == "myApp" else { return }
                    print(url) // parse the url to get someAction to determine what the app needs do
                }
        }
    }

我通常将 url 设置为 myApp://someAction/parms 形式,以便我可以解析 url 以确定应用程序需要做什么并传递一些参数。有些人喜欢通过使用 URLComponents(路径、queryItems 等)正确形成 URL 来做到这一点。这可能是最佳实践。

于 2020-10-15T05:03:07.013 回答