2 つのアプリ間に GKSession があります。1 つはサーバーで、もう 1 つはクライアントです。サーバーは、urlscheme コマンドを使用して、クライアント アプリに別のアプリを起動させます。
私が望むのは、クライアント アプリがシャットダウンしたときにセッションが終了し、他のアプリが開き、新しいセッションを開始することです。
実際に何が起こっているのかは、私には少し謎です。基本的に、新しいアプリが開き、サーバーとの通信を開始します。かなりの数のパケットが 2 つの間で送受信されます... しかし、短い時間 (3 ~ 5 秒) の後、セッションで GKPeerStateDisconnected ケースが発生します。これにより、アプリケーション間のすべての通信が停止します。
私はもともとこれにピアピッカーを使用していましたが、うまく機能しました(手動でボタンを押す必要がたくさんあったことを除いて). 次に、ピア ピッカーを削除して、このプロセスを自動的に実行する必要があります。
-(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);
}