Это мой первый пост, посвященный stackoverflow, и я знаю о строгих требованиях к публикации. Пожалуйста, дайте мне знать, если я не буду следовать ни одному из рекомендаций.Приглашение Peer на MCSEssion
В настоящее время я пишу приложение IOS (8.4) в Xcode, используя Objective-C. Целью является использование MCSessions для потоковой передачи данных между устройствами IOS. В настоящее время я борюсь с концепцией сессий, несмотря на чтение многочисленных сообщений здесь и в других местах, которые пытаются прояснить тему. Вот ресурсы, я уже в курсе:
https://developer.apple.com/videos/play/wwdc2013-708/
https://medium.com/@phoenixy/using-multipeer-connectivity-120abacb9db
Вот мое текущее понимание: На самом базовом уровне, у вас есть рекламодатель, и браузер. Рекламодатель имеет локальный сеанс, который позволяет им «рекламировать». Когда браузер видит рекламодателя, браузер отправляет приглашение рекламодателю на его (в браузере) локальный MCSession. Предполагая, что это все правильно, вот где я смущаюсь. Рекламодатель может принять приглашение и в этом процессе передает свою локальную сессию приглашению.
Я реализовал следующую логику в коде, как показано ниже. Однако при отслеживании изменений состояния MCSession как для рекламодателя, так и для браузера происходит попытка соединения, но конечное состояние всегда выполняетсяNotNonnect.
Код для отправки приглашения (Browser):
[self.broadcasterBrowser invitePeer:[broadcasterPeerIDs objectAtIndex:indexPath.row]
toSession: self.appDelegate.mpcHandler.session withContext:nil timeout:30.0 ];
Код для принятия приглашения (рекламодатель):
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser
didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler
{
ArrayInvitationHandler = [NSArray arrayWithObject:[invitationHandler copy]];
// ask the user
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:peerID.displayName
message:@"Would like to create a session with you"
delegate:self
cancelButtonTitle:@"Decline"
otherButtonTitles:@"Accept", nil];
[alertView show];
if (alertViewResult)
{
void (^invitationHandler)(BOOL, MCSession *) = [ArrayInvitationHandler objectAtIndex:0];
invitationHandler(YES, self.appDelegate.mpcHandler.session);
}
}
Любая помощь очень ценится!
Остин