История ранее подключенных устройств Bluetooth с помощью MCNearbyServiceBrowser
Я использую MCNearbyServiceBrowser
обнаружить близлежащие устройства Bluetooth и пригласить с помощью invitePeer: toSession: withContext: timeout:
,
Теперь проблема в том, что я хочу сохранить историю всех подключенных устройств и подключить их в будущем (вручную, нажав на них в UITableview
) если снова рядом. Это возможно? И совместимо ли это в соответствии с политикой Apple? Благодарю.
ОБНОВИТЬ:
Я уже достиг цели, как ответил "jamdaddy25" (до того, как он ответил:P), и она тоже работает нормально. Но что, если два устройства имеют одинаковое имя? В этом случае будет проблема не показывать одно из двух или более устройств в списке. И я не хочу этого. Кстати, спасибо за ответ.
1 ответ
Вы можете сохранить отображаемое имя 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];