2015-07-23 20 views
5

Sto creando un'applicazione iOS che si collega a un auricolare Bluetooth (BLE).Bluetooth iOS - Coppia ora popup

  • che cerco & collegare l'auricolare al mio iPhone
  • accoppiare il dispositivo con il mio iPhone
  • apro la mia domanda, cerca i dispositivi bluetooth
  • Quando l'applicazione trova il mio dispositivo, chiede connettersi ad esso.
  • L'iOS si solleva un messaggio che chiede all'utente di premere il pulsante "Pair ora" per connettersi al dispositivo

Dal momento che ho già associato a un dispositivo prima di usare la mia domanda, c'è un modo per collegare senza il popup "Pair now" all'interno dell'applicazione?

--------------- EDIT 1 ---------

ho cambiato il mio codice un po '. Saluto l'UUID del mio dispositivo quando mi connetto per la prima volta e quando ricollego il mio dispositivo l'applicazione trova l'UUID salvato e prova a trovare la "periferica nota" e riconnettersi ad essa. Il codice in realtà trova la "periferica nota" ma dopo che provo a riconnetterlo, chiede di nuovo di accoppiarsi. C'è un modo per evitare il popup "pair now" quando il dispositivo si ricollega?

Snippets:

-(void) connectToPeripheral : (CBPeripheral*) peripheral { 
    [self.centralManager stopScan]; 
    self.peripheral = peripheral; 
    peripheral.delegate = self; 
    [self.centralManager connectPeripheral:peripheral options:nil]; 
    self.peripheral = peripheral; 
} 

-(void) searchForDevices { 
    // Scan for all available CoreBluetooth LE devices 
    if (self.centralManager == nil) { 
     CBCentralManager *centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 
     self.centralManager = centralManager; 
    } 

    //check if previous peripheral exists 
    NSArray *knownPeripherals = nil; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString* knownPeripheralID = [defaults stringForKey:@"knownPeripheralID"]; 
    if (knownPeripheralID != nil) { 
     self.connectedPeripheralUUID = [[NSUUID alloc] initWithUUIDString:knownPeripheralID]; 
     knownPeripherals = [self.centralManager retrievePeripheralsWithIdentifiers:[NSArray arrayWithObjects:self.connectedPeripheralUUID, nil]]; 
    } 


    if (knownPeripherals != nil && [knownPeripherals count] > 0) { 
     NSLog(@"knownPeripherals Peripherals"); 
     CBPeripheral *foundPeripheral = [knownPeripherals objectAtIndex:0]; 
     [self connectToPeripheral:foundPeripheral]; 
    } else { 

     NSArray *connectedPeripherals = [self.centralManager retrieveConnectedPeripheralsWithServices:[NSArray arrayWithObjects:UUID_SERIAL_SERVICE_STR, nil]]; 
     NSLog(@"Connected Peripherals"); 

     if (connectedPeripherals != nil && [connectedPeripherals count] > 0) { 

     } else { 
      [self.centralManager scanForPeripheralsWithServices:nil options:nil]; 
     } 

    } 
} 
+0

si può mostrare il codice che si sta utilizzando nella vostra applicazione per trovare e connettersi al dispositivo? – Paulw11

+0

@ Paulw11 controlla ora – Panos

+0

Ho un'app bluetooth ma non ho mai visto questa finestra popup? Stai inconsapevolmente alzando un avviso? Forse se hai copiato qualche codice da un esempio o qualcosa del genere? – Braains

risposta

1

Dopo aver fatto qualche ricerca intorno a questo problema non credo che questo è qualcosa che sarete in grado di andare in giro (a meno che sia come ho commentato un avviso personalizzato che dovrebbe essere facile da rintracciare cercando qualsiasi codice che crea un avviso!). Qualunque cuffia sia a cui stai cercando di connettersi sta chiedendo una connessione sicura e CoreBluetooth sta generando questo avviso. E per quanto ne so non c'è modo di consumare un avviso nel codice.

Dalla documentazione Apple su Bluetooth (https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForSettingUpYourIOSDeviceAsAPeripheral/BestPracticesForSettingUpYourIOSDeviceAsAPeripheral.html#//apple_ref/doc/uid/TP40013257-CH5-SW7)

A seconda del caso d'uso, si consiglia di vend un servizio che ha uno o più caratteristica il cui valore deve essere sicuro. Ad esempio, immagina di voler vendere un servizio di profilo social media. Questo servizio può avere caratteristiche i cui valori rappresentano le informazioni del profilo di un utente , come nome, cognome e indirizzo di posta elettronica. Molto probabilmente, si desidera consentire solo ai dispositivi attendibili di recuperare l'indirizzo e-mail di un membro .

È possibile garantire che solo i dispositivi attendibili abbiano accesso ai valori delle caratteristiche sensibili impostando le proprietà e le autorizzazioni appropriate . Per continuare l'esempio precedente, per consentire dispositivi solo di fiducia per recuperare l'indirizzo email di un membro, impostare le proprietà e le autorizzazioni l'appropriato del caratteristici , in questo modo:

emailCharacteristic = [[CBMutableCharacteristic alloc] 
    initWithType:emailCharacteristicUUID 
    properties:CBCharacteristicPropertyRead 
    | CBCharacteristicPropertyNotifyEncryptionRequired 
    value:nil permissions:CBAttributePermissionsReadEncryptionRequired]; In this 

esempio, la caratteristica è configurato per consentire di fiducia solo dispositivi leggere o sottoscrivere il suo valore.Quando una centrale connessa, remota tenta di leggere o sottoscrivere il valore di questa caratteristica, il core Bluetooth tenta di accoppiare la propria periferica locale con la centrale a creando una connessione sicura.

Ad esempio, se la centrale e la periferica sono dispositivi iOS, entrambi i dispositivi ricevono un avviso che indica che l'altro dispositivo desidera eseguire l'accoppiamento da . L'avviso sul dispositivo centrale contiene un codice che è necessario immettere in un campo di testo sull'avviso del dispositivo periferico per completare il processo di accoppiamento.

Dopo aver completato il processo di accoppiamento, la periferica considera il dispositivo centrale associato un dispositivo affidabile e consente l'accesso centrale ai relativi valori delle caratteristiche codificati .

Se si riceve questo avviso, l'auricolare BlueTooth a cui si sta tentando di connettersi richiede una connessione sicura per una delle caratteristiche a cui si sta tentando di accedere. Ulteriori informazioni possono essere trovate dalla risposta di @koshyyyk qui stackoverflow.com/a/18226632/1112794. C'è anche un talk di Apple Developer su BlueTooth e il concetto di abbinamento collegato nei commenti che duplicherò qui: http://adcdownload.apple.com//videos/wwdc_2012__hd/session_705__advanced_core_bluetooth.mov

Se si dispone dell'accesso degli sviluppatori al dispositivo, potrebbe essere possibile disattivarlo. In caso contrario, puoi scegliere di non utilizzare la caratteristica o puoi capire come applicare l'avviso nella tua app.

MODIFICA Il mio codice per BLE che non genera l'avviso (nel caso sia rilevante). Questo progetto è stato adattato dal codice BLE open source di Red Orso Lab trovato qui: https://github.com/RedBearLab/iOS

- (void) connectPeripheral:(CBPeripheral *)peripheral 
{ 
    NSLog(@"Connecting to peripheral with UUID : %@", peripheral.identifier.UUIDString); 

    [self.activePeripherals addObject:peripheral]; 
    [self.CM connectPeripheral:peripheral 
         options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBConnectPeripheralOptionNotifyOnDisconnectionKey]]; 
} 

- (int) findBLEPeripherals:(int)timeout 
{   
    if (self.CM.state != CBCentralManagerStatePoweredOn) 
    { 
     NSLog(@"CoreBluetooth not correctly initialized !"); 
     return -1; 
    } 

    [NSTimer scheduledTimerWithTimeInterval:(float)timeout target:self selector:@selector(scanTimer:) userInfo:nil repeats:NO]; 

    [self.CM scanForPeripheralsWithServices:nil options:nil];    
    return 0; // Started scanning OK ! 
} 
+1

Infatti, abbiamo cambiato il software del dispositivo BT e ha smesso di chiedere la coppia ora popup ogni volta. Ci è voluto un po 'di tempo fino a quando non ho avuto il dispositivo tra le mani per verificarlo. Molte grazie. – Panos

Problemi correlati