Подключение к внешнему URL-адресу из WatchKit 2.0

Я хочу загрузить некоторую информацию в интерфейс WatchKit из бэк-офиса REST. Есть ли какой-нибудь быстрый способ выполнить запрос URL-адреса, передаваемый хост-приложением iOS, или мне нужно придумать определенный протокол, использующий голые WatchConnectivity функции?


person Fabrizio Bartolomucci    schedule 10.10.2015    source источник


Ответы (4)


Вы должны использовать NSURLSession непосредственно из расширения WatchKit.

person ccjensen    schedule 11.10.2015
comment
Это довольно странно, так как в часах нет сим-карты, поэтому они не могут подключиться к Интернету сами по себе, но, возможно, в зоне покрытия Wi-Fi. Я ищу способ отправить URL-адрес как при Wi-Fi, так и при сотовой связи. Я рассматривал возможность использования WCSession.sendMessage с обработчиком, на который основное приложение поместило бы результат после выполнения самого запроса URLS. Тем не менее, мне не ясно, работает ли это также, когда основное приложение не активно. - person Fabrizio Bartolomucci; 18.10.2015
comment
NSURLSession будет использовать сотовую связь телефона, если это необходимо и доступно. - person ccjensen; 01.02.2016

NSURLSession отлично работает с Watchkit, но вам нужно будет также добавить Разрешить произвольные нагрузки в расширении Watchkit, если это уместно.

Пожалуйста, посмотрите этот пост,

NSURLSession возвращает данные как Null в Watch OS2 с использованием цели -С

person Karthik    schedule 14.10.2015

Я использую sendMessageData:replyHandler:, но у меня есть проблемы с его правильной работой. Относительный билет находится по адресу: https://stackoverflow.com/questions/33211760/sendmessagedata-does-not-call-didreceivemessagedata-on-the-counterpart

person Fabrizio Bartolomucci    schedule 19.10.2015

Хотя пример Apple приведен в быстром виде, см. https://developer.apple.com/videos/play/wwdc2015-228/?time=345 , я вставил фрагмент в obejctive-c utlis в оболочке NSProcessInfo.

Пример Apple также использует Semaphore, если расширение будет переведено в спящий режим, который я пропустил ниже.

Следуя приведенному ниже шаблону, вы можете подключиться к нужному сервису прямо с часов.

NSProcessInfo *processInfo = [NSProcessInfo processInfo];

[processInfo performExpiringActivityWithReason:@"networkReq" usingBlock:^(BOOL expired) {
    if (!expired){            
        NSLog(@"we have an assertion");        
        NSTimeInterval secondsInThreeHours = 3 * 60 * 60;
        NSURL *forecast = [NSURL URLWithString:@"http::address"];

        NSURLSession *session = [NSURLSession sharedSession];
        [[session dataTaskWithURL:forecast
                completionHandler:^(NSData *data,
                                    NSURLResponse *response,
                                    NSError *error) {
                    // handle response
         }] resume];
    else{

        NSLog(@"Not background assertion or we are out of time");
    }
}];
person MagicFlow    schedule 31.01.2016