我试图通过运行Xcode的应用剪辑来测试我的应用程序剪辑的url处理程序。然而,URL方法处理程序(SceneDelegate的continue方法)从未被调用,这与苹果的文档文档相反,后者声明:
对于一个基于UIKit的应用剪辑和支持基于场景的应用生命周期事件的完整应用程序,实现UISceneDelegate中定义的回调。例如,实现场景(_:continue:)回调以访问用户活动对象。 对于响应基于应用程序的生命周期事件的UIKit应用剪辑和完整的应用程序,实现UIApplicationDelegate中定义的回调。一定要实现应用程序(:continue:restorationHandler:)回调,因为您在应用程序中没有对NSUserActivity对象的访问权限(:didFinishLaunchingWithOptions:)。
application(_:continue:restorationHandler:)方法。https://fruits.com/check?fruit_name=bananasAssociated Domain列出了appclips:fruits.comSceneDelegate如下所示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中获得,只是修改了签名配置,以获得要编译和运行的应用剪辑。
发布于 2020-09-16 12:41:25
上面提到的continue方法只有在应用程序先前打开后被调用时才会被调用。为了在第一次启动应用程序时获得_XCApplClipURL中的值集,您需要使用您提到的第二个方法(scene willConnectTo session)。
你可以试试这样的东西:
if let activity = connectionOptions.userActivities.filter({ $0.activityType == NSUserActivityTypeBrowsingWeb }).first {
if let url = activity.webpageURL {
print("incoming URL: \(url)")
}
}发布于 2020-09-15 07:45:45
https://stackoverflow.com/questions/63892016
复制相似问题