2014-02-27 71 views
1

使用多對等連接框架和Nearby Services(瀏覽器和廣告客戶)實現應用程序之間的自動連接以交換少量數據。MCNearbyServiceAdvertiser委託方法從未調用過

我構建了一個處理所有連接細節的會話管理器。它的委託是一個視圖控制器,以便在收到數據時處理UI的更新。

會話管理器生成:

  • A服務廣告客戶,代理爲會話管理器
  • A服務瀏覽器,該代表還爲會話管理器

啓動兩個應用程序設備(一個在Xcode下獲取日誌,另一個獨立),我通過服務瀏覽器委託相應的方法收到Found Peer消息。

正如另一條消息所述,我比較了MCPeerID(本地和來自接收的Peer)的displayName屬性,以決定兩者中的哪一個將發送邀請,從而避免了交叉邀請。

用作其它消息here說,我還添加了「可選」 MCSession委託方法- (void)session:didReceiveCertificate:fromPeer:certificateHandler:

然而,委託方法MCNearbyServiceAdvertiser的(void)advertiser:didReceiveInvitationFromPeer:withContext:invitationHandler:永遠不會被調用。在invitePeer:toSession:withContext:timeout:方法中超時設置後,只有MCSession委託方法(void)session:peer:didChangeState:收到NotConnected消息。

在各種選項建議:

  • 會話與安全零和MCEncryptionNone初始化;
  • discoveryInfo是零;
  • 在邀請中發送的上下文僅僅是一個存檔爲NSData的簡短字符串。

要解決:

  • 我已檢查所有項目都存在(會議和代表,廣告商及其委託)。
  • 只要應用程序處於活動狀態,Service Browser和Advertiser從不停止。

我不知道要在哪裏查看!

+0

機器是否在同一WiFi網絡上運行Xcode和設備? – ChrisH

+0

您是否正在使用瀏覽器中的對等方初始化MCSession:foundPeer:withDiscoveryInfo:消息而不是瀏覽器中的本地對等方?我犯了這個錯誤... –

+0

我也對這個問題感興趣。我的代理方法多對等沒有被調用。 – AnsonL

回答

0

確保用於本地對等項的MCpeerID在發現階段和邀請階段都相同。

我有一個單獨的會話管理器連接/傳輸工作者的結構。我犯了一個錯誤,即在工作人員中初始化一個新的MCpeerID以在邀請之前創建一個會話,導致相同的行爲。

將MCpeerID和MCNearbyServiceBrowser傳遞給工作人員以創建會話並邀請修復該問題。

相關問題