我目前正在开发一个 App Clip,但func scene(_ scene: UIScene, continue userActivity: NSUserActivity)
在我的主应用目标中触发 sceneDelegate 方法时遇到问题。我能够通过_XCAppClipURL
在我的应用剪辑目标中设置环境变量来测试应用剪辑。我尝试在物理设备上安装主要和应用剪辑目标,使用我的应用剪辑BUNDLE ID
&设置本地体验URL PREFIX
,但仅启动应用剪辑。如果它启动我的主应用程序,我如何测试应用程序剪辑的用户体验?
问问题
453 次
2 回答
2
尝试检查func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
而不是continue userActivity
您提到的。
我也必须在 Clip 里面这样做SceneDelegate
。
NSUserActivity
如果需要根据 Clip 修改体验,可以这样提取:
if let activity = connectionOptions.userActivities.filter({ $0.activityType == NSUserActivityTypeBrowsingWeb }).first {
// do something with your activity... for example
guard
activity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingUrl = activity.webpageURL,
let components = NSURLComponents(url: incomingUrl, resolvingAgainstBaseURL: true)
else { return }
}
于 2020-12-08T01:44:48.060 回答
1
这是 App Clip苹果中的一个限制,由于某种原因在他们的文档中没有描述或强调。
让我们考虑一下这种情况:
- 用户扫描二维码,安装并运行 App Clip。
- 用户根据 App Clip Card 参考或 App Clip 参考决定安装完整的应用程序。
- 完整的应用程序打开
我们希望调用 URL 将被传递到完整的应用程序中,但它不会发生。可怜的用户被迫扫描二维码,然后使用通用链接流程打开完整的应用程序。
在这两种情况下都使用 App Clip 打开
- 当设备上尚未安装 App Clip 时,使用:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
// Get URL components from the incoming user activity
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL,
resolvingAgainstBaseURL: true)
else {
return
}
// log url
print("AppClip invocation url is : \(incomingURL)")
}
- App Clip 已安装在设备上。用户不会看到差异,但场景生命周期存在差异:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
// Get URL components from the incoming user activity.
guard let userActivity = connectionOptions.userActivities.first,
userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true)
else {
return
}
// log url
print("AppClip invocation url is : \(incomingURL)")
}
我们解决了 AppsFlyer 用户的问题,允许他们使用我们的OneLink流程进行延迟深度链接
于 2020-12-27T09:53:50.220 回答