Использование Handoff с Watchkit для вывода приложения iPhone на передний план

У меня есть простой проект, в котором пользователь нажимает кнопку на Apple Watch, а на iPhone воспроизводится какой-то звук. Это достаточно легко сделать с помощью метода openParentApplication и наличия кода handleWatchKitExtensionRequest в AppDelegate. Однако, хотя это работает в симуляторе, оно НЕ будет работать на реальных устройствах, если приложение iPhone еще не открыто. Я пытаюсь выяснить, можно ли использовать другие методы, которые будут работать, даже если приложение для iPhone еще не открыто.

Я прочитал в ответе stackoverflow здесь, что можно использовать Handoff, чтобы (частично) вывести приложение телефона на передний план, используя WKInterfaceController updateUserActivity:userInfo:webpageURL: и UIApplicationDelegate application:continueUserActivity:restorationHandler. Однако, как новый разработчик, я изо всех сил пытаюсь понять, как это сделать правильно без каких-либо примеров. Может ли кто-нибудь привести пример кода того, как это будет работать, где оба они используются вместе для запуска некоторого кода в приложении для iphone?


person ZhouW    schedule 09.04.2015    source источник


Ответы (1)


  1. Зарегистрируйте названия типов занятий в plist вашего приложения для iphone. Добавьте строку с именем NSUserActivityTypes и сделайте ее массивом. Например:

введите здесь описание изображения

  1. Включите метод continueUserActivity: в свой AppDelegate. Например:

    -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
            {
                // Extract the payload
                NSString *type = [userActivity activityType];
                NSDictionary *userInfo = [userActivity userInfo];
    
                // Assume the app delegate has a text field to display the activity information
                NSLog(@"User activity is of type %@, and user info %@", type, userInfo);
    
                restorationHandler(@[self.window.rootViewController]);
    
                return YES;
            }
    
  2. В awakeWithContext вашего контроллера watchkit добавьте метод updateUserActivity.

    [self updateUserActivity:@"com.co.YourApp.watchkitextension.activity" userInfo:@{@"yo": @"dawg"} webpageURL:nil];
    

Теперь вы должны увидеть значок приложения после открытия выбранного контроллера просмотра в приложении для часов.

person Sohail    schedule 05.05.2015
comment
Почему приложение показывает предупреждение о сбое передачи обслуживания, если я просто возвращаю YES в теле? Это потому, что я не звоню restorationHandler? В документации сказано, что вызов блока необязателен. - person Rivera; 25.03.2016