2016-05-01 7 views
0

Ich experimentiere mit Multipeer Connectivity Framework in iOS. Ich möchte eine einfache App erstellen, die das Gerät ankündigt und nach anderen Geräten sucht. Hier ist mein Code:Problem mit Multipeer Connectivity Framework in iOS

class ViewController: UIViewController { 

    static let serviceType = "mult-demo" 
    let localPeerID = MCPeerID(displayName: UIDevice.currentDevice().name) 

    func startAdvertising() { 
     let advertiser = MCNearbyServiceAdvertiser(peer: localPeerID, discoveryInfo: nil, serviceType: ViewController.serviceType) 
    advertiser.delegate = self 
    advertiser.startAdvertisingPeer() 
    print("advertising") 
    } 

    func startBrowsing() { 
     let browser = MCNearbyServiceBrowser(peer: localPeerID, serviceType: ViewController.serviceType) 
     browser.delegate = self 
     browser.startBrowsingForPeers() 
     print("browsing") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     startAdvertising() 
     startBrowsing() 
    } 

} 

extension ViewController : MCNearbyServiceAdvertiserDelegate, MCNearbyServiceBrowserDelegate { 
    func advertiser(advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: NSData?, invitationHandler: (Bool, MCSession) -> Void) { 

     print("received invitation") 
    } 

    func browser(browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) { 
     print("found peer \(peerID)") 
    } 

    func browser(browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID) { 

    } 
} 

Allerdings, wenn ich es auf zwei iPads (iOS 9), die mit dem gleichen WiFi-Netzwerk laufen sie einander nicht entdecken. Was mache ich falsch?

+0

Sie sollten Ihre "Browser" und "Werbetreibenden" in Eigenschaften statt lokalen Variablen speichern, da sie freigegeben werden, sobald die Funktionen – Paulw11

+0

@ Paulw11 Ich habe es behoben, aber es funktioniert immer noch nicht :( – Ruslan

+0

@ Paulw11 Problem gelöst, Danke vielmals) – Ruslan

Antwort

0

Wie in den Kommentaren erwähnt, müssen Sie zuerst sicherstellen, dass die "Instanz" des Browsers und des Werbetreibenden nicht verloren geht, indem Sie einen starken Bezug zu ihnen haben. Sie können dies tun, indem Sie eine Instanzvariable deklarieren. Entspricht einer lokalen Variablen.

Auch müssen Sie sicherstellen, dass entweder die Geräte auf dem gleichen WLAN-Netzwerk sind oder sowohl Bluetooth als auch WLAN haben.

Multipeer Connectivity funktioniert nur zwischen iOS und ich glaube, eine rater komplizierte api hat ..

Nach der Entdeckung immer noch ziemlich viel Logik in Bezug auf Austausch von Inhalten zu handhaben müssen. Auch wenn Sie möchten, dass Ihre App mit Android funktioniert, wird dies nicht möglich sein.

Wenn ich kann, würde ich für SDKs empfehlen, die Peer-to-Peer-Kommunikation für Sie tun können, da diese viel Entwicklungs-und Wartungszeit sparen würde.

Zum Beispiel versuchen: http://www.p2pkit.io, http://www.intromi.co und http://www.underdark.io oder Google in der Nähe

Ich hoffe, das hilft ...

Haftungsausschluss: Ich arbeite für Uepaa, Entwicklung p2pkit.io für Android und iOS.

Verwandte Themen