2

我正在尝试通过从 Xcode 运行应用程序剪辑来测试我的应用程序剪辑的 url 处理程序。然而,URL 方法处理程序(SceneDelegatecontinue方法)永远不会被调用,这与 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 中提供的这个示例应用程序,只是修改了签名配置以使应用程序剪辑能够编译和运行。

4

2 回答 2

3

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-16T12:41:25.080 回答
1

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

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

请在此处关注并评论此问题

于 2020-09-15T07:45:45.520 回答