Функция SceneDelegate «Продолжить» не вызывается при запуске клипа приложения из Xcode

#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. Хьюго, проблема устранена в демонстрационном приложении. Пожалуйста, протестируйте. Спасибо