IOS-Bluetooth LE : es konnte keine Verbindung mit gespeicherten kopplungsdaten
Ich bin stucked in meinem IOS-dev und ich brauche Hilfe. Ich bin kein Experte und es ist vielleicht eine dumme Frage.
, Was ich versuche zu tun,
Ich versuche eine Verbindung zu meinem app ein Bluetooth-LE-Gerät, das die Bedürfnisse gekoppelt werden.
Aktuelle Verhalten
Ist es kein problem ohne pairing das Gerät, und meine iPhone-Anwendung. Ich bin in der Lage zu verbinden, verbinden Sie und Lesen/schreiben-Eigenschaften, ohne jedes problem.
Aber, wenn das Gerät müssen gekoppelt werden, ich bin nur in der Lage zu Lesen/schreiben Merkmale der ersten Zeit, direkt nach dem pairing popup-Bestätigung. Das nächste mal, ich entdecken und verbinden Sie die app mit meinem Gerät, aber ich habe nicht die Rechte zum Lesen/schreiben von Eigenschaften von Daten, da (denke ich mal) ich bin nicht mit dem pairing-Informationen.
Endlich...
Nachdem er einige Stunden auf der Suche rund um das Internet ohne Glück hier sind meine Fragen :
-
Wie Verbinde ich meine app, um einen Bluetooth-LE-Gerät aus meiner iPhone-app mit der Paarung gespeicherten Daten auf meinem Handy? Bin ich etwas fehlt?
-
Ist es möglich, dass es nicht ein IOS-problem, denn wenn die pairing-Daten vorhanden sind, das Telefon mit dem Gerät verbinden, wird er automatisch verwendet?
Gibt es jemanden mit Erfahrung mit Bluetooth LE und IOS, um mir zu helfen?
Update 2013-10-27
Habe ich entdeckt, dass Sie nicht Lesen können, eine geschützten Merkmal durch die Kombination von Authentifizierung direkt nach, dass das Merkmal entdeckt wurde , wenn eine Kopplung vorhanden ist (kein popup). Kein problem mit nicht geschützten Merkmal! Ich weiß nicht genau warum passiert ist, aber das Verhalten ist, dass die IOS app noch nie erhalten Antworten aus dem Gerät.
Also, wenn die erste Lesung erfolgt nach, es muss nicht zu Problemen führen. Hier ist der code, den ich verwende, um zu entdecken, Merkmalen, mit der die Daten zu Lesen im Kommentar.
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error;
{
NSArray *characteristics = [service characteristics];
CBCharacteristic *characteristic;
if (peripheral != servicePeripheral) {
NSLog(@"Wrong Peripheral.\n");
return ;
}
if (service != batteryService) {
NSLog(@"Wrong Service.\n");
return ;
}
if (error != nil) {
NSLog(@"Error %@\n", error);
return ;
}
for (characteristic in characteristics) {
NSLog(@"discovered characteristic %@", [characteristic UUID]);
if ([[characteristic UUID] isEqual:[CBUUID UUIDWithString:kBatteryCharacteristicUUIDString]]) { //Bat
NSLog(@"Discovered Bat Characteristic");
batteryCharacteristic = [characteristic retain];
//--> generate problem when pairing exists between IOS app and device
//[peripheral readValueForCharacteristic:batteryCharacteristic];
}
}
}
- Können Sie überprüfen, mit einem Bluetooth-sniffer? Soweit ich weiß, nur iOS verschlüsselt die Kanäle und erlaubt das Lesen der geschützten Merkmale, wenn Sie die vollständige PIN-basierte Kopplung. Andernfalls wird Ihr remote-Gerät kann nur die pairing-Informationen zu erkennen, die das iPhone in Zukunft verbindungen.
- Ich stehe vor genau dem gleichen Problem. Also, wenn Sie sagte, "das problem war auf der chip-Seite", wie haben Sie voran gehen und das problem gelöst? Könnten Sie einige Hinweise, bitte?
- Ich war mit Nordic-BLE-chip nRF51822 und die Merkmale, Eigenschaften, war nicht gut definiert in den uController.
- ich bin auch vor dem gleichen problem, immer wenn ich etwas schreiben über ble reagiert Sie nicht und ich bin nicht erhalten, keine Daten in didupdatecharcaterstics
- Haben Sie es erreicht ? Ich m Einfassungen gleiche Problem... Auch mit der gleichen nordischen BLE-chip nRF51822.
- Das problem war nicht in iOS, aber in den nordischen chip. Die Merkmale, Eigenschaften, war nicht gut definiert in den uController
- OK, nRF51822-chip-Programmierer behauptet, Sicheres pairing es bereits getan. Aber in iOS konnte ich nicht in der Lage zu tun, mit connectPeripheral:Optionen: Methode. In iOS, die wir nicht wollen, etwas zu ändern. Nur connectPeripheral Methode öffnet Pairing-dialog, Wenn nRF51822-chip programmiert, perfekt. Richtig ? Bitte reagieren.
- Bitte posten Sie einen Kommentar auf obigen Abfrage.
- Sorry, kann ich dir nicht helfen. Sie sollten versuchen, zu einer Frage auf der devzone.nordicsemi.com/questions
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht haben, etwas zu tun in Ihrer app für das pairing management.
Wenn Ihre app ausgeführt wird, wird das LE Central-Modus, und das Peripheriegerät sendet eine Unzureichende Authentifizierung ein Fehler-code in Reaktion auf einen lese /schreib-Anforderung, iOS automatisch eine pair-Verbindung mit Ihrem Gerät und wiederholen Sie die Anforderung.
Wenn Sie trennen Sie das Gerät, und später wieder in der Peripherie senden muss, um die Unzureichende Authentifizierung Fehlercode wieder für das iPhone neu zu starten-Verschlüsselung. Wieder, die Sie nicht haben, etwas besonderes zu tun in Ihre app hier.
Wenn Ihre app ausgeführt wird, wird LE Peripherie-Modus, sind die Dinge ein bisschen anders. Beim einrichten des GATT-Datenbank, stellen Sie sicher, dass Sie korrekte flags für sowohl die
CBAttributePermissions
undCBCharacteristicProperties
. Das sagt iOS, dass es senden soll die Unzureichende Authentifizierung Fehlercode selbst, wenn es nicht gepaart. Es ist dann die Verantwortung der zentralen Gerät so starten Sie den Verschlüsselungsvorgang.In der Bluetooth-Zubehör-Design-Richtlinien für Apple-Produkte, weitere Einschränkungen beschrieben werden.
Ihr Zubehör braucht, die Fähigkeit zu beheben privaten Bluetooth-Adressen. Das iPhone wird ändern Ihre öffentliche Bluetooth-Adresse jedes jetzt und dann, und nur gekoppelte Geräte haben den richtigen Schlüssel zu der Lösung, dass die öffentliche Adresse erkennen und das iPhone.
"Abschnitt 3.9 Kopplung" ist auch interessant.
Beachten Sie, dass wenn Sie paar ohne man-in-the-middle (MITM) Schutz, Ihrer Peripheriegeräte verwenden können, die daraus resultierende Schlüssel zur Behebung des privaten Bluetooth-Adresse des iPhone. Allerdings werden Sie nicht in der Lage, zur Verschlüsselung des Kanals.
Paarung mit MITM Schutz auf iOS erfolgt durch die Eingabe eines PIN-Codes angezeigt wird, indem Sie das remote-Gerät. Out-of-band (OOB) - Paarung, wo Sie senden pairing-Daten über einen externen Kanal wird von iOS nicht unterstützt, soweit ich weiß (zumindest gibt es keine öffentlichen APIs zu setzen OOB-Daten).
Lange Geschichte kurz: wenn Sie nur ein "Paar" /"Abbrechen" koppeln, können Sie nicht verschlüsseln LE Kanal, sondern nur erkennen, die das iPhone in Zukunft verbindungen. Das schöne ist, dass man noch immer erkennt das iPhone auch, wenn Sie trennen es auf der iPhone-Seite, und auch nach dem wiederherstellen der iPhone firmware ;-).
Bezüglich LE-Verschlüsselung im Allgemeinen: es ist nicht sicher sowieso (siehe http://eprint.iacr.org/2013/309).