0

を使用MCNearbyServiceBrowserして近くの Bluetooth デバイスを検出し、招待してinvitePeer: toSession: withContext: timeout:います。

ここでの問題は、接続されているすべてのデバイスの履歴を保持し、それらUITableviewが再び近くにある場合は、将来 (手動でクリックして) 再接続したいということです。これは可能ですか?また、Apple のポリシーに従って互換性がありますか? ありがとう。

アップデート:

「jamdaddy25」が答えたので(彼が答える前に:P)、私はすでに目標を達成しました。その場合、リストに複数のデバイスのいずれかが表示されないという問題が発生します。そして、私はそれを望んでいません。ところで、返信ありがとうございます。

4

1 に答える 1

2

peerID の表示名をそのまま使用できます。これは、MCPeerID のプロパティです。ブラウジングを開始したら、ユーザーが以前に接続したピアを選択する前、またはその画面に来てブラウジングを開始する前に、近くのピアを循環して表示名が一致するかどうかを確認します。その場合は、体系的に招待を送信して接続を再確立できます。

選択可能な以前の接続が現在近くにあるピアであるものだけになるように、これを行うこともできます。

更新:ピア名の衝突がないようにするには、名前を一意にする必要があります。 これを行う方法を知っている最善の方法は、UUID ベースの名前を作成することです。これを単純なオブジェクト (以下の UserPeerInfo) 内に保存し、これを NSUserDefaults に保存/ロードして、このピア名が常にこのピアに使用されるようにします。

// Initialize with any stored data
if (!_userPeerInfo) {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"userPeerInfo"]) {
        NSData *userPeerInfoData = [defaults objectForKey:@"userPeerInfo"];
        _userPeerInfo = (UserPeerInfo*)[NSKeyedUnarchiver unarchiveObjectWithData:userPeerInfoData];
    } else
    {
        NSString *peerName = [[NSUUID UUID] UUIDString];
        _userPeerInfo.peerName = peerName;
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        // Create an NSData representation
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_userPeerInfo];
        [defaults setObject:data forKey:@"userPeerInfo"];
        [defaults synchronize];
    }
}

次に、ピアの名前を設定して初期化するときは、通常どおりそのピア名を使用します

self.peerId = [[MCPeerID alloc] initWithDisplayName:self.userPeerInfo.peerName];
self.advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:self.peerId discoveryInfo:info serviceType:kServiceType];
self.advertiser.delegate = self;
[self.advertiser startAdvertisingPeer];
于 2014-01-23T19:50:32.230 に答える