我在两个应用之间有一个GKSession。一个是服务器,另一个是客户端。服务器使客户端应用程序使用urlscheme命令启动另一个应用程序。
我希望会发生的事情是,当客户端应用关闭时,会话结束,另一个应用打开,我们开始新的会话。
实际发生的事情对我来说有点神秘。基本上,新应用程序打开并开始与服务器通信。在两者之间来回发送大量数据包...但是在短时间(3-5秒)之后,会话中发生GKPeerStateDisconnected案例:peer:didChangeState:与之前连接的应用程序。这将停止应用程序之间的所有通信。
我最初使用同行选择器并且它工作得很好(除了你需要做很多手动按钮按下)。现在我需要删除对等选择器并自动执行此过程。
-(void)session:(GKSession *)session
peer:(NSString *)peerID
didChangeState:(GKPeerConnectionState)state
{
BOOL peerChanged = NO;
NSLog(@"peer:%@ didChangeState: %d", peerID, state);
switch(state) {
case GKPeerStateAvailable:
[session connectToPeer:peerID withTimeout:1000];
peerChanged = YES;
break;
case GKPeerStateUnavailable:
peerChanged = YES;
break;
case GKPeerStateConnected:
[self.peerList addObject:peerID];
[self setupConnectionWithPeer:peerID toSession:session];
break;
case GKPeerStateDisconnected:
[self.peerList removeObject:peerID];
if(self.peerList.count == 0) self.isConnected = NO;
break;
}
NSLog(@"Number of peers: %d", self.peerList.count);
}
答案 0 :(得分:0)
这听起来像是对多任务的限制。 Peer Picker可能具有额外的系统级访问权限,允许您的后台应用程序继续与服务器通信。如果不使用该代码,您的后台应用程序将在传统的3-5秒内完成其操作,然后进入后台状态,将其与服务器断开连接。