Quelqu'un a-t-il un exemple complet et fonctionnel de la manière de coupler par programmation un appareil BLE ( no Bluetooth Classic) qui utilise la saisie par clé (c'est-à-dire un code PIN à 6 chiffres) ou la comparaison numérique sur Android 4.4 ou ultérieur ? Par "par programme", j'entends que je communique le code PIN à Android - l'utilisateur n'y est pas invité.
Il y a beaucoup de questions similaires sur SO mais elles sont soit a) à propos de Bluetooth Classic, b) anciennes (avant le setPin()
y [createBond()
](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createBond()) étaient publiques), ou c) sans réponse.
Ma compréhension est la suivante.
- Vous vous connectez à l'appareil et découvrez ses services.
- Vous essayez de lire une caractéristique "protégée".
- Le périphérique renvoie une erreur d'authentification.
- Android initie en quelque sorte le jumelage et vous lui donnez le code PIN.
- Vous pouvez maintenant lire la caractéristique.
J'ai créé un dispositif en utilisant mBed en cours d'exécution sur le nRF51-DK et lui donner une seule caractéristique.
J'ai configuré les paramètres de sécurité comme suit :
ble.securityManager().init(
true, // Enable bonding (though I don't really need this)
true, // Require MitM protection. I assume you don't get a PIN prompt without this, though I'm not 100% sure.
SecurityManager::IO_CAPS_DISPLAY_ONLY, // This makes it us the Passkey Entry (PIN) pairing method.
"123456"); // Static PIN
Et puis dans la caractéristique j'ai utilisé
requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM);
Maintenant, quand j'essaie de le lire avec le Panneau de contrôle Nordic Master je reçois une notification de demande de jumelage comme celle-ci :
Et je peux mettre ce PIN, et alors MCP dit que je suis lié, et peut lire la caractéristique.
Cependant, dans mon application, je voudrais éviter que l'utilisateur saisisse le code PIN, puisque je le connais déjà. Quelqu'un a-t-il un exemple complet et récent de la façon de procéder ?
Modifier : A propos este est la question la plus pertinente que j'ai trouvée sur SO, mais la réponse ne semble pas fonctionner.
0 votes
Le SDK Android permet-il l'appairage sans que l'utilisateur ne soit averti / ne demande de confirmation ? Il semble que vous ne puissiez pas le faire...
1 votes
Oui, c'est le cas. Il a un
setPin()
spécialement pour cela, et j'ai réussi à la faire fonctionner, sauf que la notification "Demande de jumelage" est toujours affichée.0 votes
Je ne suis pas sûr que cela puisse vous aider, mais cela vaut la peine de le lire. stackoverflow.com/questions/17971834/
0 votes
Oui, j'ai vu ça. Pas de réponse non plus. :-/
0 votes
Pouvez-vous répondre à ma question ? security.stackexchange.com/questions/179298/
0 votes
@Timmmm pouvez-vous nous éclairer sur ma question