NSUserActivity против Core Spotlight, глубокая ссылка
Я использую NSUserActivity и Core Spotlight для индексирования контента в моем приложении. Причина, по которой я использую Core Spotlight, заключается в том, что я хочу проиндексировать этот контент до того, как пользователь получит к нему доступ (откроет).
Проблема, с которой я сталкиваюсь, заключается в методе AppDelegate:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool
В принципе userActivity
ТОЛЬКО содержит правильную информацию, когда я делаю это в моем viewController:
userActivity = myUserActivity
Но это не работает, если я делаю:
CSSearchableIndex.default().indexSearchableItems(searchableItems)
,
Используя второй метод (Core Spotlight), я могу видеть все свои результаты в поиске Spotlight, но когда я нажимаю на элемент, у меня нет никакой информации в методе AppDelegate.
Худшая часть это:
po userActivity.activityType
"com.apple.corespotlightitem"
Если я печатаю активность типа, вместо того, чтобы получить свой собственный, я получаю этот...
Какие-либо предложения?
1 ответ
Когда ваше приложение запускается из результатов CoreSpotlight, вы получаете CSSearchableItemActionType
,
Вы должны обработать этот тип действия путем извлечения CSSearchableItemActivityIdentifier
- Это значение будет соответствовать идентификатору, который вы указали для элемента поиска, когда вы отправили его в индекс.
Что-то вроде:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
if userActivity.activityType == CSSearchableItemActionType {
guard let selectedItem = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String else {
return
}
// Do something with selectedItem
}
}