代码示例
下面是一个使用 SwiftUI 和 NSUserActivity 的完整代码示例,展示如何在 SwiftUI 环境中使用 NSUserActivity 来启用 Handoff、深度链接等功能。这个示例展示了一个简单的文章查看界面,支持 Handoff 和通过 URL 恢复活动。
ContentView.swift
import SwiftUI
struct ContentView: View {
@State private var articleID: String = "12345"
var body: some View {
NavigationView {
VStack {
Text("Viewing Article \(articleID)")
.padding()
.onAppear {
// 设置 NSUserActivity
setupUserActivity()
}
}
.navigationTitle("Article \(articleID)")
}
}
private func setupUserActivity() {
// 创建并配置 NSUserActivity
let activity = NSUserActivity(activityType: "com.yourapp.viewingPage")
activity.title = "Viewing Article"
activity.userInfo = ["articleID": articleID]
// 深度链接,若支持从 Web 直接跳转
activity.webpageURL = URL(string: "https://yourapp.com/articles/\(articleID)")
// 启用 Handoff 和 Spotlight 搜索
activity.isEligibleForHandoff = true
activity.isEligibleForSearch = true
activity.isEligibleForPublicIndexing = true
// 标记当前活动
activity.becomeCurrent()
}
}SceneDelegate.swift
在 SwiftUI 项目中,我们可以在 SceneDelegate 中处理 Handoff 的恢复。
Info.plist
确保在 Info.plist 中正确配置 Handoff 支持:
完整流程说明
ContentView中的setupUserActivity方法:在onAppear中调用,用于创建和配置NSUserActivity,并将其标记为当前活动。这个活动包含文章的articleID和深度链接。SceneDelegate中的scene(_:continue:)方法:当应用通过 Handoff 或从其他设备恢复时,该方法会被调用。它从NSUserActivity中提取articleID,并将其更新到 SwiftUI 界面中。
总结
这个代码展示了如何在 SwiftUI 环境下使用 NSUserActivity 来启用 Handoff 功能,以及如何在设备之间无缝恢复用户的活动。这种方式可以帮助用户在不同的设备上继续任务,同时保持应用的状态和数据的一致性。
Last updated