Попытка принудительно использовать функциональные возможности Handoff для работы с iPhone 5 и iPad Air с устройствами iOS 9 и проблемами, которые, по моему мнению, связаны с iOS9 - не могу проверить на iOS 8, потому что у меня нет устройств с этой системы.Handoff не работает с устройствами iOS 9
Проблема:
- Я открываю приложение на первом устройстве, когда главный экран, когда активность пользователя создается
- На втором устройстве я вижу на экране блокировки, что есть некоторая деятельность, связанная с моим приложением
- Я открываю это приложение, и
application:continueUserActivity:restorationHandler:
не вызывается на этом устройстве, поэтому у меня нет возможности показать пользователю тот же контент, который был представлен на первом устройстве.
Вы можете просмотреть весь проект на GitHub: https://github.com/tomkowz/Quotes
детали реализации: файл Plist
Я обновил цели и добавил NSUserActivityTypes
.
<key>NSUserActivityTypes</key>
<array>
<string>com.tomaszszulc.Quotes.quotesList</string>
<string>com.tomaszszulc.Quotes.browseQuote</string>
</array>
Далее я создал перечисление этих объявленных типов:
enum ActivityType: String {
case BrowseQuote = "com.tomaszszulc.Quotes.browseQuote"
case QuotesList = "com.tomaszszulc.Quotes.quotesList"
}
Когда пользователь находится на главном экране я начинаю NSUserActivity
.
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
quotes = Quote.findAll(CoreDataStack.sharedInstance().mainContext)
tableView.reloadData()
startUserActivity()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
userActivity?.invalidate()
}
func startUserActivity() {
let activity = NSUserActivity(activityType: ActivityType.QuotesList.rawValue)
activity.title = "Viewing Quotes List"
userActivity = activity
userActivity?.becomeCurrent()
}
Второй тип активности активируется, когда пользователь переходит к деталям выбранного элемента. Здесь поток мнения:
UINavigationController -> (root) QuotesListViewController -> (push) QuoteDetailsViewController
Вот код для создания активности пользователя в QuoteDetailsViewController
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
userActivity = viewModel.userActivity // (viewModel) quote.userActivity
userActivity?.becomeCurrent()
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
userActivity?.invalidate()
}
И viewModel.userActivity
звонки:
extension Quote {
@available(iOS 8.0, *)
var userActivity: NSUserActivity {
let activity = NSUserActivity(activityType: ActivityType.BrowseQuote.rawValue)
activity.title = "Reading " + self.author + " quote"
activity.userInfo = [QuoteUserActivityKey.Identifier.rawValue: self.identifier]
// Core Spotlight support
if #available(iOS 9.0, *) {
activity.contentAttributeSet = self.searchableItemAttributeSet()
activity.keywords = Set([self.author])
activity.eligibleForSearch = true
activity.eligibleForHandoff = true
}
return activity
}
}
Спасибо заранее!
Я подал ошибку: http://www.openradar.me/radar?id=5534110390943744 –