2016-11-20 8 views
4

私は以下のコードを持っています。私の目標は、マルチプロセッサの接続性を備えたiOSデバイスを認識させることでした。これはほとんどの場合、私はこれらの両方を実行するとき以外は "FOUND !!!"コンソールでこれをどうすれば解決できますか?ここでMultipeer Connectivity foundDevice

iOSデバイスのための私のコードです:

import UIKit 
import MultipeerConnectivity 

class ViewController: UIViewController, MCNearbyServiceBrowserDelegate,  MCNearbyServiceAdvertiserDelegate { 


let browser = MCNearbyServiceBrowser(peer: MCPeerID(displayName: "iOS Device"), serviceType: "example-test") 
let peerID = MCPeerID(displayName: "iOS Device") 
let advertiser = MCNearbyServiceAdvertiser(peer: MCPeerID(displayName: "iOS Device"), discoveryInfo: nil, serviceType: "example-test") 



override func viewDidLoad() { 
    super.viewDidLoad() 
    advertiser.delegate = self 
    advertiser.startAdvertisingPeer() 
    browser.delegate = self 
    browser.startBrowsingForPeers() 
} 

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

} 

func browser(_ browser: MCNearbyServiceBrowser, didNotStartBrowsingForPeers error: Error) { 

} 

func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) { 
    print("FOUND!!!") 
} 

func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didNotStartAdvertisingPeer error: Error) { 

} 

func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void) { 

} 


} 

およびMac用:ので工夫が彼らの可用性への宣伝方法の

+0

は、開発中のデバイスのいずれかのピアIDの表示名を変更したことがありますか?同じAppleの近接技術iBeaconを使用していたときに、名前/ピアIDを変更すると、カーネル内で1つのデバイスに重複したマッピングが発生し、1つのデバイスに対して2つの検出が行われました。各デバイスからアプリを削除し、問題が解決しないかどうかを確認してください。 – Midas

答えて

5

これが起こっている

import MultipeerConnectivity 

class ConnectionsManager: NSObject, MCNearbyServiceBrowserDelegate,  MCNearbyServiceAdvertiserDelegate { 


let browser : MCNearbyServiceBrowser 
let advertiser: MCNearbyServiceAdvertiser 
let peerID = MCPeerID(displayName: "macDevice") 



override init() { 
    advertiser = MCNearbyServiceAdvertiser(peer: MCPeerID(displayName: "mac Device"), discoveryInfo: nil, serviceType: "example-test") 
    browser = MCNearbyServiceBrowser(peer: MCPeerID(displayName: "mac Device"), serviceType: "example-test") 
    super.init() 
    advertiser.delegate = self 
    advertiser.startAdvertisingPeer() 
    browser.delegate = self 
    browser.startBrowsingForPeers() 
} 
deinit { 
    browser.stopBrowsingForPeers() 
    advertiser.stopAdvertisingPeer() 
} 

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

    } 

    func browser(_ browser: MCNearbyServiceBrowser, didNotStartBrowsingForPeers error: Error) { 

    } 

    func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) { 
     print("FOUND!!!") 
    } 

    func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didNotStartAdvertisingPeer error: Error) { 

    } 

    func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void) { 

    } 



    } 

おかげで、他の考案。

enter image description here

周辺は、彼らがデータパケットにその情報を送信する通信を行うための準備ができているときはいつでも、これが広告と呼ばれています。広告データに基づいて、発見するときに追加のデータを返す可能性があります。

周辺がアクティブスキャンをサポートし、アプリケーションがフォアグラウンドである場合は、didDiscoverPeripheralに2のコールを取得します。最初の呼び出しは、周辺機器からの広告パケット内のデータを含む。第2の呼び出しは、周辺機器からのスキャン応答パケットからの追加データを含む。

詳細については、チェックアウトthis threadをご覧ください。

これを解決するには?受信したIDのリストを保持し、その特定のピアIDに対して取得した追加の検出呼び出しを破棄することができます。

bluetooth advertising詳細はbluetoothのドキュメントをチェックアウト)

関連する問題