从 Xcode 启动 App Clip 时未调用 SceneDelegate 的“继续”

Posted

技术标签:

【中文标题】从 Xcode 启动 App Clip 时未调用 SceneDelegate 的“继续”【英文标题】:SceneDelegate's "continue" not called when launching App Clip from Xcode 【发布时间】:2020-09-14 21:23:54 【问题描述】:

我正在尝试通过从 Xcode 运行应用剪辑来测试我的应用剪辑的 url 处理程序。然而,URL 方法处理程序(SceneDelegatecontinue 方法)永远不会被调用,这与 Apple 的文档 documentation 相反,其中指出:

对于基于 UIKit 的应用程序剪辑和支持基于场景的应用程序的完整应用程序 生命周期事件,实现 UISceneDelegate 中定义的回调。 比如实现scene(_:continue:)回调来访问用户 活动对象。

对于基于 UIKit 的应用剪辑和响应的完整应用 对于基于应用程序的生命周期事件,实现中定义的回调 UIApplicationDelegate。务必执行 application(:continue:restorationHandler:) 回调,因为你 无权访问 NSUserActivity 对象 应用程序(:didFinishLaunchingWithOptions:)。

应用委托未实现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  
    

过去 2 天我一直在用头撞墙。我错过了什么?

注意:我正在使用这个sample app available in github,只是修改了签名配置以使应用剪辑能够编译和运行。

【问题讨论】:

【参考方案1】:

提到的continue 方法仅在您的应用之前打开后被调用时调用。为了在您的应用第一次启动时获取_XCApplClipURL 中设置的值,您需要使用您提到的第二种方法(scene willConnectTo session)。

你可以试试这样的:

if let activity = connectionOptions.userActivities.filter( $0.activityType == NSUserActivityTypeBrowsingWeb ).first 
  if let url = activity.webpageURL 
    print("incoming URL: \(url)")
  

【讨论】:

【参考方案2】:

感谢您使用 AppsFlyer 的 App Clip 公开演示并强调此问题。我真的很感激。

我可以确认你做得很好,这个功能在 Beta 5 之后的某个时候被破坏了。

请关注并评论这个问题here

【讨论】:

Hugo,该问题已在演示应用程序中修复。请测试。谢谢

以上是关于从 Xcode 启动 App Clip 时未调用 SceneDelegate 的“继续”的主要内容,如果未能解决你的问题,请参考以下文章

从深层链接启动应用程序时未调用 AppDelegate ContinueUserActivity,应归咎于 Firebase SDK

didReceiveRemoteNotification:当应用程序处于后台并且未连接到Xcode时未调用fetchCompletionHandler

Ktor App 部署到 AppEngine 时未调用 Main 方法

使用情节提要时未调用 UITableViewController 覆盖初始化函数

创建一个苹果小程序 App Clip 你该知道哪些事

使用 xmpp 框架时未调用委托方法