返回

如何使用 SwiftUI 中的 NSUserActivity

闲谈

简介

NSUserActivity 是一个强大的框架,可以用来启用多种跨设备和应用程序的特性,例如通用链接、核心聚焦、接力和连续性。它还可以用来处理应用程序状态恢复。

在 SwiftUI 中使用 NSUserActivity 很简单。只需创建一个 NSUserActivity 对象,然后将其附加到视图。当用户执行某些操作时,例如点击链接或共享内容,NSUserActivity 对象就会被激活。

使用 NSUserActivity 来启用通用链接

通用链接允许用户通过点击链接在他们的设备上打开您的应用程序,即使他们没有安装您的应用程序。要启用通用链接,您需要创建一个 NSUserActivity 对象,并将其附加到您的视图。

struct ContentView: View {
    var body: some View {
        // Create a NSUserActivity object.
        let userActivity = NSUserActivity(activityType: "com.example.myapp.open")

        // Set the activity's title.
        userActivity.title = "Open My App"

        // Set the activity's URL.
        userActivity.webpageURL = URL(string: "https://example.com")

        // Attach the activity to the view.
        return VStack {
            Link(destination: userActivity) {
                Text("Open My App")
            }
        }
        .userActivity(userActivity)
    }
}

使用 NSUserActivity 来启用核心聚焦

核心聚焦允许用户通过 Spotlight 搜索应用程序中的内容。要启用核心聚焦,您需要创建一个 NSUserActivity 对象,并将其附加到您的视图。

struct ContentView: View {
    var body: some View {
        // Create a NSUserActivity object.
        let userActivity = NSUserActivity(activityType: "com.example.myapp.search")

        // Set the activity's title.
        userActivity.title = "Search My App"

        // Set the activity's search string.
        userActivity.keywords = ["SwiftUI", "NSUserActivity"]

        // Attach the activity to the view.
        return VStack {
            Link(destination: userActivity) {
                Text("Search My App")
            }
        }
        .userActivity(userActivity)
    }
}

使用 NSUserActivity 来启用接力和连续性

接力和连续性允许用户在不同的设备上继续他们的活动。要启用接力和连续性,您需要创建一个 NSUserActivity 对象,并将其附加到您的视图。

struct ContentView: View {
    var body: some View {
        // Create a NSUserActivity object.
        let userActivity = NSUserActivity(activityType: "com.example.myapp.continue")

        // Set the activity's title.
        userActivity.title = "Continue My Activity"

        // Set the activity's state.
        userActivity.userInfo = ["someKey": "someValue"]

        // Attach the activity to the view.
        return VStack {
            Link(destination: userActivity) {
                Text("Continue My Activity")
            }
        }
        .userActivity(userActivity)
    }
}

使用 NSUserActivity 来启用 Siri

Siri 可以用来启动应用程序并执行任务。要启用 Siri,您需要创建一个 NSUserActivity 对象,并将其附加到您的视图。

struct ContentView: View {
    var body: some View {
        // Create a NSUserActivity object.
        let userActivity = NSUserActivity(activityType: "com.example.myapp.siri")

        // Set the activity's title.
        userActivity.title = "Ask Siri to Do Something"

        // Set the activity's intent.
        userActivity.intent = INStartRideIntent()

        // Attach the activity to the view.
        return VStack {
            Link(destination: userActivity) {
                Text("Ask Siri to Do Something")
            }
        }
        .userActivity(userActivity)
    }
}

使用 NSUserActivity 来处理应用程序状态恢复

NSUserActivity 可以用来处理应用程序状态恢复。当用户从后台恢复应用程序时,系统会将当前活动传递给应用程序。应用程序可以使用此活动来恢复用户的状态。

struct ContentView: View {
    @State private var activity: NSUserActivity?

    var body: some View {
        VStack {
            if let activity = activity {
                // Handle the activity.
            }
        }
        .onOpenURL { url in
            // Get the activity from the URL.
            let activity = NSUserActivity(url: url)

            // Set the activity state.
            self.activity = activity
        }
    }
}

结论

NSUserActivity 是一个强大的框架,可以用来启用多种跨设备和应用程序的特性。它还可以用来处理应用程序状态恢复。在 SwiftUI 中使用 NSUserActivity 很简单。只需创建一个 NSUserActivity 对象,然后将其附加到视图。当用户执行某些操作时,例如点击链接或共享内容,NSUserActivity 对象就会被激活。