ios14 - 从 Xcode 启动 App Clip 时未调用 SceneDelegate 的“继续”
问题描述
我正在尝试通过从 Xcode 运行应用程序剪辑来测试我的应用程序剪辑的 url 处理程序。然而,URL 方法处理程序(SceneDelegate
的continue
方法)永远不会被调用,这与 Apple 的文档文档相反,其中指出:
对于支持基于场景的应用程序生命周期事件的基于 UIKit 的应用程序剪辑和完整应用程序,请实现 UISceneDelegate 中定义的回调。例如,实现 scene(_:continue:) 回调来访问用户活动对象。
对于响应基于应用程序生命周期事件的基于 UIKit 的应用程序剪辑和完整应用程序,请实现 UIApplicationDelegate 中定义的回调。请务必实现 application( :continue:restorationHandler:) 回调,因为您无权访问 application( :didFinishLaunchingWithOptions:) 中的 NSUserActivity 对象。
- 应用程序委托未实现该
application(_:continue:restorationHandler:)
方法 - 应用剪辑的方案启用了 _XCApplClipURL 参数并设置为
https://fruits.com/check?fruit_name=bananas
- 应用剪辑的
Associated Domain
列表appclips:fruits.com
- 应用剪辑
SceneDelegate
如下
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
// UGHH!!! Never gets called
print("AppClip invocation url is : \(incomingURL)")
}
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// OK!! This gets called
guard let _ = (scene as? UIWindowScene) else { return }
}
}
在过去的两天里,我一直在用头撞墙。我错过了什么?
注意:我正在使用github 中提供的这个示例应用程序,只是修改了签名配置以使应用程序剪辑能够编译和运行。
解决方案
continue
仅当您的应用程序在之前打开后被调用时才会调用提到的方法。为了在_XCApplClipURL
您的应用程序首次启动时获取设置的值,您需要使用您提到的第二种方法(scene willConnectTo session
)。
你可以尝试这样的事情:
if let activity = connectionOptions.userActivities.filter({ $0.activityType == NSUserActivityTypeBrowsingWeb }).first {
if let url = activity.webpageURL {
print("incoming URL: \(url)")
}
}
推荐阅读
- javascript - 如何在django中访问数据表之外的数据表的ajax响应?
- assembly - Difference between (sp) and [sp] in assembly
- java - 多线程 Java HTTP 服务器
- c++ - 使用 sleep_for 和 sleep_until 函数的 gcc 可能存在的问题
- fullcalendar - 当 CustomView 具有 visibleRange 时,使用上一个/下一个在 FullCalendar 中导航
- haskell - 如何使用 Data.SBV 来帮助导出正确的堆栈机器实现?
- java - FireTV Android中的Spotify App-Remote集成
- php - 有没有方便的方法将基于 React 的插件放入 PHP 生成的站点?
- c# - 在 C# 中使用 Web.config 中的字符串时出现异常
- r - Purrr 和 Rlang - 具有准引用的映射函数