Использование WatchConnectivity
в WatchOS2
вы можете отправить данные из приложения часов назад в родительском приложении, а затем попытаться инициировать вызов от родительского приложения. Вот пример:
//App Delegate in iOS Parent App
#pragma mark Watch Kit Data Sharing
-(void)initializeWatchKit{
if ([WCSession isSupported]){
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
}
}
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message{
DLog(@"%@", message);
[self callRestaurantWithNumber:[NSString formattedPhoneNumber:[message valueForKey:@"phone_number"]]];
}
-(void)callRestaurantWithNumber:(NSString *)formattedPhoneNumber{
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",
formattedPhoneNumber]]];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self initializeWatchKit];
return YES;
}
Теперь внутри расширения watchKit вы можете отправить данные обратно в родительском приложении, как это:
override func willActivate() {
super.willActivate()
if WCSession.isSupported() {
let defaultSession = WCSession.defaultSession()
defaultSession.delegate = self
defaultSession.activateSession()
if defaultSession.reachable == true {
let phoneNumberDict = [ "phone_number": "123-456-7890"]
defaultSession.sendMessage(phoneNumberDict, replyHandler: nil, errorHandler: { (error) -> Void in
print("THERE WAS AN ERROR SENDING DATA TO THE IOS APP: \(error.localizedDescription)")
})
}
}
}
Однако одно ограничения я столкнулся с этим подходом является родительское приложение должно быть открыто для фактического получения данных и выполнения вызова. В документации, как представляется, указано, что приложение будет открыто в фоновом режиме при отправке сообщения с часами в исходное приложение ios. Однако в моем тестировании до сих пор, как на реальных устройствах (часы и iphone), так и на симуляторах, родительское приложение получает данные только тогда, когда родительское приложение ios открыто и находится на переднем плане. Даже когда исходное приложение ios находится в фоновом состоянии, оно по-прежнему не инициирует вызов. Я запускаю это на watch os2
и iOS 9.0.2
.
Из другого сообщения, которое также работает в одной и той же проблеме. Another watchKit SO post
Ссылка на документацию Apple, тоже: Apple Doc sendMessage: