2015-07-10 4 views
0

Попытка принудительно использовать функциональные возможности Handoff для работы с iPhone 5 и iPad Air с устройствами iOS 9 и проблемами, которые, по моему мнению, связаны с iOS9 - не могу проверить на iOS 8, потому что у меня нет устройств с этой системы.Handoff не работает с устройствами iOS 9

Проблема:

  1. Я открываю приложение на первом устройстве, когда главный экран, когда активность пользователя создается
  2. На втором устройстве я вижу на экране блокировки, что есть некоторая деятельность, связанная с моим приложением
  3. Я открываю это приложение, и 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 
    } 
} 

Спасибо заранее!

+0

Я подал ошибку: http://www.openradar.me/radar?id=5534110390943744 –

ответ

1

Если вы получаете индикатор на втором устройстве, что он видит потенциал передачи обслуживания, то только «хорошие» причина, почему application:continueUserActivity:restorationHandler: не называют это:

Этот метод не вызывается, если либо application: willFinishLaunchingWithOptions: или application: didFinishLaunchingWithOptions: возвращает NO.

Другая причина, по которой передача обслуживания «не работает», заключается в том, что устройства не вошли в учетную запись iCloud. Но вы видите индикатор, так что это не так.

Смежные вопросы