ios7 multipeer-connectivity

ios7 - Desconexión de conectividad multipeer



multipeer-connectivity (1)

Tengo problemas para mantenerme conectado utilizando el Marco de conectividad de múltiples usuarios en iOs7. Actualmente, mi aplicación gestiona de forma programática la exploración y la publicidad mediante MCNearbyServiceAdvertiser y MCNearbyServiceBrowser. Tengo una vista de alerta que le pregunta al usuario si es un navegador o un anunciante. A la vuelta de esa vista, instalé un MCNearbyServiceAdvertiser o un navegador en consecuencia.

#pragma - Alert Delegate -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 0) { _browser = [[MCNearbyServiceBrowser alloc]initWithPeer:_peerID serviceType:@"Context-xl"]; [_browser setDelegate:self]; [self.detailViewController setRemote:YES]; [_browser startBrowsingForPeers]; } else { _advertiser = [[MCNearbyServiceAdvertiser alloc]initWithPeer:_peerID discoveryInfo:nil serviceType:@"Context-xl"]; [_advertiser setDelegate:self]; [self.detailViewController setRemote:NO]; [_advertiser startAdvertisingPeer]; } [self.detailViewController configureView]; }

Mi sesión de delegado peer method: ... DidChangeState ... se llamará dos veces, una para la conexión y otra para la desconexión. No detendré al anunciante ni al navegador después de que se inicie la sesión. ¿Debería dejar de navegar / publicitar?


EDITAR Usó un ticket de soporte con Apple y confirmaron que llamar a sendData con demasiados datos o con demasiada frecuencia puede causar desconexiones.

EDITAR Mi hipótesis es que Apple tiene un hilo o cola que sondea para verificar si hay compañeros conectados. Si este subproceso / cola se bloquea (es decir, se golpea un punto de interrupción o la aplicación bloquea la CPU o hace algo que demora un poco en el subproceso principal), parece que esto causa una desconexión.

Crear mi sesión sin cifrado parece haber ayudado al rendimiento y a las desconexiones, aunque todavía ocurren.

MCPeerID* peerId = [[MCPeerID alloc] initWithDisplayName:self.displayName]; self.peer = [[MultiPeerPeer alloc] initWithDisplayName:peerId.displayName andPeer:peerId]; self.session = [[MCSession alloc] initWithPeer:peerId securityIdentity:nil encryptionPreference:MCEncryptionNone];

Además, he encontrado que llamar a sendData con demasiada frecuencia (más de 30-60 veces por segundo) puede hacer que el framework se ponga en mal estado y cause bloqueos y desconexiones.