#ios14 #apple-appclips
#ios14 #apple-appclips
Вопрос:
Я пытаюсь протестировать обработчик URL моего клипа приложения, запустив клип приложения из Xcode. Однако обработчик метода URL ( SceneDelegate
метод continue
) никогда не вызывается, вопреки документации Apple, в которой говорится:
Для клипа приложения на основе UIKit и полного приложения, которые поддерживают события жизненного цикла приложения на основе сцены, реализуйте обратные вызовы, определенные в UISceneDelegate. Например, реализовать обратный вызов scene(_:continue:) для доступа к объекту активности пользователя.
Для клипа приложения на основе UIKit и полного приложения, которые реагируют на события жизненного цикла на основе приложения, реализуйте обратные вызовы, определенные в UIApplicationDelegate. Обязательно выполните обратный вызов application (:continue:restorationHandler:), потому что у вас нет доступа к объекту NSUserActivity в application(:didFinishLaunchingWithOptions:).
- Делегат приложения не реализует
application(_:continue:restorationHandler:)
метод - В схеме app clip включен параметр _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 дня я бился головой о стены. Чего мне не хватает?
Примечание: Я использую этот образец приложения, доступный в github, просто изменил конфигурацию подписи, чтобы скомпилировать и запустить app clip.
Ответ №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:
Спасибо за использование общедоступной демонстрации App Clip от AppsFlyer и за освещение этой проблемы. Я действительно ценю это.
Я могу подтвердить, что вы отлично справлялись, эта функциональность была нарушена через некоторое время после бета-версии 5.
Пожалуйста, следуйте и прокомментируйте эту проблему здесь
Комментарии:
1. Хьюго, проблема устранена в демонстрационном приложении. Пожалуйста, протестируйте. Спасибо