5

我想让我的手表应用程序响应手机上的父应用程序被杀死。当手表应用程序正在运行并且电话应用程序被终止时,我没有收到来自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");
}
4

1 回答 1

5

reachable从 Apple Watch 应用程序的角度来看,iPhone 应用程序副本不需要运行即可。如果 iPhone 本身已配对且可访问,则使用 WCSession 从手表应用程序发送消息将在后台启动 iPhone 应用程序。

sessionReachabilityDidChange:因此,当 iOS 应用程序被杀死时,我不希望在手表应用程序上被调用。这也意味着你的 iPhone 应用应该随时准备在后台启动,并及时激活 WCSession,以处理来自手表应用的传入请求(类似于某些推送通知等如何启动 iOS 应用) .

但是,从 iPhone 应用程序的角度来看,只有当“配对且活动的 Apple Watch 在范围内并且相关的 Watch 应用程序在前台运行”时,才会认为手表应用程序对应项是可访问的(文档)。

此外,请注意,sessionWatchStateDidChange:当“WCSession 对象的配对、watchAppInstalled、complicationEnabled 或 watchDirectoryURL 属性中的值发生更改”时调用。

于 2016-03-03T15:20:05.903 回答