我想让我的手表应用程序回复被杀死的手机上的父应用程序。当手表应用程序正在运行且手机应用程序被终止时,我无法从sessionReachabilityDidChange
或sessionWatchStateDidChange
回复。基于苹果文档:
调用此方法让当前进程知道它 对话会议的可达性发生了变化。
所以,似乎我应该得到一个回调。我在手表上将WCSession委托设置为我的班级。手表上的会话接收应用程序上下文的回调。为什么我没有得到可达性回调?
以下代码..
+ (SomeClass *)sharedInstance {
static dispatch_once_t pred;
static SomeClass *shared = nil;
dispatch_once(&pred, ^{
shared = [[SomeClass alloc] init];
[Model sharedInstance].delegate = shared;
});
return shared;
}
#pragma mark - setup
- (void)initializeSession {
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
[self sync];
}
}
-(BOOL) hasValidWCSession {
return ([WCSession isSupported] && [WCSession defaultSession].isReachable);
}
#pragma mark - WCSessionDelegate
- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *, id> *)applicationContext {
NSLog(@"application context received on watch: %@", applicationContext);
[[Model sharedInstance] process:applicationContext];
}
- (void)sessionWatchStateDidChange:(WCSession *)session {
NSLog(@"wcession state changed on watch");
}
- (void)sessionReachabilityDidChange:(WCSession *)session {
NSLog(@"wcsession reachability changed on watch");
}
答案 0 :(得分:5)
从Apple Watch应用程序的角度来看,不需要运行iPhone应用程序,以使reachable
成为现实。如果iPhone本身已配对且可以访问,则使用手表应用程序中的WCSession发送消息将在后台启动iPhone应用程序。
因此,当iOS应用程序被杀时,我不希望在监视应用程序上调用sessionReachabilityDidChange:
。这也意味着您的iPhone应用程序应该随时准备在后台启动,并立即激活WCSession,以处理来自监视应用程序的传入请求(类似于某些推送通知等可以启动iOS应用程序)
然而,从iPhone应用程序的角度来看,只有当配对且活跃的Apple Watch在范围内并且相关的Watch应用程序在前台运行时才会认为手表应用程序对应物是可以访问的。 (documentation)。
另请注意,当&#34; WCSession对象的配对,watchAppInstalled,complicationEnabled或watchDirectoryURL属性中的值发生变化时,会调用sessionWatchStateDidChange:
。