Ich bin im Moment wirklich fest, versucht zu bekommen, die Einladungen in das MultipeerConnectivityFramework zu erfassen.MultipeerConnectivity Sitzungsverwaltung
Im Moment habe ich eine iPad-App als Werbetreibender und eine iPhone-App als Browser. Ich habe eine sharedService für die MultipeerFramework implementiert und hat die folgenden:
Advertiser
@implementation MultipeerConnectivityService {
MCNearbyServiceAdvertiser *_advertiser;
MCSession *_session;
MCNearbyServiceBrowser *_browser;
}
- (void)automaticAdvertiseWithName:(NSString *)name {
MCPeerID *peerID = [[MCPeerID alloc] initWithDisplayName:name];
_session = [[MCSession alloc] initWithPeer:peerID];
_session.delegate = self;
_advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:peerID discoveryInfo:nil serviceType:kServiceType];
_advertiser.delegate = self;
[_advertiser startAdvertisingPeer];
}
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void (^)(BOOL, MCSession *))invitationHandler {
invitationHandler([@YES boolValue], _session);
NSLog(@"Invitation accepted");
}
Browser
- (void)automaticBrowsingWithName:(NSString *)name {
MCPeerID *peerID = [[MCPeerID alloc] initWithDisplayName:name];
_browser = [[MCNearbyServiceBrowser alloc] initWithPeer:peerID serviceType:kServiceType];
_browser.delegate = self;
[_browser startBrowsingForPeers];
}
- (void)browser:(MCNearbyServiceBrowser *)browser didNotStartBrowsingForPeers:(NSError *)error {
if ([_delegate respondsToSelector:@selector(browser:didNotStartBrowsingForPeers:)]) {
[_delegate browserDidNotStartBrowsingForPeers];
}
}
- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info {
[browser invitePeer:peerID toSession:[self getMCSession] withContext:nil timeout:10];
if ([_delegate respondsToSelector:@selector(browser:foundPeer:)]) {
[_delegate browser:browser foundPeer:peerID];
}
}
- (void)browser:(MCNearbyServiceBrowser *)browser lostPeer:(MCPeerID *)peerID {
if ([_delegate respondsToSelector:@selector(browserLostPeer:)]) {
[_delegate browserLostPeer:peerID];
}
}
- (MCSession *) getMCSession {
return _session;
}
Aber dann als Feedback in die Konsole Ich erhalte:
-[MCNearbyServiceBrowser invitePeer:toSession:withContext:timeout:] Bad argument session=nil
Wenn ich nach den gefundenen Werbetreibenden suche, ist alles in Ordnung. Mein Werbetreibenden-iPad wird gefunden. Aber wie kann ich die Einladung verwalten?
So bekomme ich es jetzt nicht ... Wenn ich eine Einladung vom Browser senden, welche Sitzung muss ich verwenden? Auf dem iPad habe ich die Sitzung so eingerichtet, wie Sie es in der Methode "automaticAdvertiseWithName" sehen können. aber auf dem iphone mache ich das nicht wenn ich "automaticBrowsingWithName" anrufe ... Ist das das Problem? Und müssen sie nicht dieselbe Sitzung sein, um sie erfolgreich zu verbinden? Und wie kann ich mein Werbetreibenden-ipad erfolgreich zum Browser einladen?
Ich bin verwirrt von der Idee, eine neue Sitzung zu erstellen, wenn eine bereits vom Werbetreibenden erstellt wurde.
Ich bin eigentlich nicht sicher, ob der Delegat didReceiveInvitation überhaupt den Peer zu den angeschlossenen Peers hinzufügt.
- (void)automaticAdvertiseWithName:(NSString *)name {
MCPeerID *peerID = [[MCPeerID alloc] initWithDisplayName:name];
self.session = [[MCSession alloc] initWithPeer:peerID];
self.session.delegate = self;
_advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:peerID discoveryInfo:nil serviceType:kServiceType];
_advertiser.delegate = self;
[_advertiser startAdvertisingPeer];
}
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void (^)(BOOL, MCSession *))invitationHandler {
BOOL accept = YES;
invitationHandler(accept, self.session);
NSLog(@"Invitation accepted: %@", self.session);
}
Und wenn ich die Eigenschaft „connectedPeers“ auf meine Session nennen, gibt es keine verbundenen Peers überhaupt, obwohl die Delegierten einen gefunden. Habe ich da einen Fehler gemacht?
Danke !! Ich ging für Option 2 und es funktioniert perfekt! Das Sitzungskonzept war ein bisschen schwierig, zuerst mein Gehirn zu wickeln. Ich dachte immer, ich müsste die gleiche Sitzung für beide verwenden .... – sesc360
Froh Option 2 geholfen! – Beuz
Ich bin damit auch verwirrt. Ich weiß, dass ein Browser seiner Sitzung Peers hinzufügen soll, aber ich bin mir immer noch nicht sicher, was der Werbetreibende richtig machen soll. Im Moment gehe ich davon aus, dass, wenn der Werbetreibende eine Sitzung in "invitationHandler" anbietet, diese irgendwie mit der Sitzung "verschmolzen" wird, zu der der Browser sie hinzufügt. @Beuz oder @ISARFAKTOR, falls du Einsichten hast, teile bitte. – Yazid