Работа с watchOS родительское приложение в XamarinWorking with the watchOS Parent Application in Xamarin

Важно!

Доступ только с помощью приведенных ниже примерах родительское приложение работает в watchOS 1 приложения watch.Accessing the parent application using the examples below only works on watchOS 1 watch apps.

Для обмена данными между приложении для Apple watch и приложение iOS, которое объединяется с разными способами:There are different ways to communicate between the watch app and the iOS app that it is bundled with:

  • Контрольные значения расширений может вызвать метод от родительское приложение, которое выполняется в фоновом режиме на iPhone.Watch extensions can call a method against the parent app that runs in the background on the iPhone.

  • Контрольные значения расширений может совместно используют хранилище, доступном с приложением iPhone родительского.Watch extensions can share a storage location with the parent iPhone app.

  • Использование перемещение вручную для передачи данных из обзора или уведомления в приложении для Apple Watch, отправка пользователя к контроллеру определенный интерфейс в приложении.Using Handoff to pass data from a Glance or Notification to the Watch app, sending the user to a specific interface controller in the app.

Родительское приложение, также иногда называется приложения-контейнера.The Parent App is also sometimes referred to as the Container App.

Выполните кодRun Code

Связи между расширением watch и iPhone в родительское приложение демонстрируется в GpsWatch пример.Communicating between a watch extension and the parent iPhone app is demonstrated in the GpsWatch sample. Расширение контрольных значений можно запросить в родительское приложение iOS, то часть обработки на его имени с помощью OpenParentApplication метод.Your watch extension can request the parent iOS app to do some processing on its behalf using the OpenParentApplication method.

Это особенно полезно в тех случаях, для долго выполняющихся задач (включая сетевые запросы) - только родительского приложения iOS можно воспользоваться фоновую обработку для выполнения этих задач и сохранения полученных данных в расположении, доступном для расширения контрольных значений.This is especially useful for long running tasks (including network requests) - only the parent iOS app can take advantage of background processing to complete these tasks and save the retrieved data in a location accessible to the watch extension.

Расширение приложения Watch KitWatch Kit App Extension

Вызовите WKInterfaceController.OpenParentApplication в расширении приложения watch.Call the WKInterfaceController.OpenParentApplication in your watch app extension. Он возвращает bool , указывающее, является ли метод запрос был отправлен успешно или нет.It returns a bool that indicates whether the method request was sent successfully or not. Проверьте error параметр в ответе Action на предмет произошла во время выполнения метода, выполняемому в приложении iPhone.Check the error parameter in the response Action to determine if any occurred during the method running in the iPhone app.

WKInterfaceController.OpenParentApplication (new NSDictionary (), (replyInfo, error) => {
    if(error != null) {
        Console.WriteLine (error);
        return;
    }
    Console.WriteLine ("parent app responded");
    // do something with replyInfo[] dictionary
});

Приложение iOSiOS App

Все вызовы из расширения приложения watch направляются через приложения iPhone HandleWatchKitExtensionRequest метод.All calls from a watch app extension are routed through the iPhone app's HandleWatchKitExtensionRequest method. Если вы вносите различные запросы в приложении для Apple watch, то этот метод потребуется запросить userInfo словаря, чтобы определить способ обработки запроса.If you are making different requests in the watch app then this method will need to query the userInfo dictionary to determine how to process the request.

[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
    // ... other AppDelegate methods
    public override void HandleWatchKitExtensionRequest
        (UIApplication application, NSDictionary userInfo, Action<NSDictionary> reply)
    {
        var status = 2;
        // do something in the background, and respond
        reply (new NSDictionary (
            "count", NSNumber.FromInt32 ((int)status),
            "value2", new NSString("some-info")
            ));
    }
}

Общее хранилищеShared Storage

Если вы настраиваете групп приложений то расширения iOS 8 (включая расширения watch) могут обмениваться данными в родительское приложение.If you configure an app group then iOS 8 extensions (including watch extensions) can share data with the parent app.

Параметры NSUserDefaultsNSUserDefaults

Следующий код могут быть написаны на расширение приложения watch и iPhone в родительское приложение таким образом, они могут ссылаться на общий набор NSUserDefaults:The following code can be written in both the watch app extension and the parent iPhone app so that they can reference a common set of NSUserDefaults:

NSUserDefaults shared = new NSUserDefaults(
        "group.com.your-company.watchstuff",
        NSUserDefaultsType.SuiteName);

// set values
shared.SetInt (2, "count");
shared.Synchronize ();

// get values
shared.Synchronize ();
var count = shared.IntForKey ("count");

ФайлыFiles

Расширение приложения "и" Контрольные значения операций ввода-вывода также могут совместно использовать файлы, используя общий путь к файлу.The iOS app and watch extension can also share files using a common file path.

var FileManager = new NSFileManager ();
var appGroupContainer =
            FileManager.GetContainerUrl ("group.com.your-company.watchstuff");
var appGroupContainerPath = appGroupContainer.Path;
Console.WriteLine ("agcpath: " + appGroupContainerPath);
// use the path to create and update files

Примечание: Если путь является null проверьте конфигурации группы приложений для обеспечения профили подготовки были настроены правильно и были загружены или не установлены на компьютере разработчика.Note: if the path is null then check the app group configuration to ensure the provisioning profiles have been configured correctly and have been downloaded/installed on the development computer.

Дополнительные сведения см. в разделе возможностей групп приложений документации.For more information, please see the App Group Capabilities documentation.

WormHoleSharpWormHoleSharp

Популярные механизм открытым исходным кодом для watchOS 1 (на основе MMWormHole) для передачи данных или команды между в родительское приложение и приложении для Apple watch.A popular open-source mechanism for watchOS 1 (based on MMWormHole) to pass data or commands between the parent app and the watch app.

Можно настроить WormHole, с помощью групп приложений следующим образом в приложении iOS и посмотрите расширения:You can configure WormHole using an app group like this in your iOS app and watch extension:

// AppDelegate (iOS) or InterfaceController (watch extension)
Wormhole wormHole;
// ...
wormHole = new Wormhole ("group.com.your-company.watchstuff", "messageDir");

Скачайте C# версии WormHoleSharp.Download the C# version WormHoleSharp.