Τρίτη 29 Οκτωβρίου 2013

Η μεταφορά BlackBerry Java Applications NFC σε BlackBerry 10 Μέρος 6: Προσομοίωση Κάρτα με μια κάρτα SIM-based Secure Element

NFC Μέρος 6

Αυτό είναι το τελευταίο μέρος ενός έξι-μέρος σειράς για τις αιτήσεις φορητότητας BlackBerry Java που χρησιμοποιούν NFC στο BlackBerry 10.



Μέχρι στιγμής έχουμε εξετάσει Reading Tag, Γραφή Tag, Peer to Peer λειτουργία, η ανάγνωση των ανέπαφων καρτών και εικονική εξομοίωση στόχο. Σε αυτό το post, θα επανεξετάσει το porting του κώδικα που υλοποιεί άμιλλα κάρτας χρησιμοποιώντας ένα ασφαλές στοιχείο.

Εδώ είναι όπου είμαστε στη σειρά στο σύνολό της:
Ανάγνωση NFC Tags
Γράφοντας NFC Tags
Peer to Peer Λειτουργία
Ανάγνωση NFC Ανέπαφες κάρτες
NFC Virtual Tag και άμιλλα Card
NFC άμιλλας Κάρτα


Θέματα για Java Developers:
Ενεργοποιήστε το απαιτούμενο ISO14 πρωτόκολλο δρομολόγησης σε ένα επιλεγμένο ασφαλές στοιχείο (UICC vs ενσωματωμένο SE): BlackBerry συσκευές που υποστηρίζουν NFC μπορεί να έχουν τη δυνατότητα επιλογής μέχρι δύο ασφαλή στοιχεία διαθέσιμα: ένα στο UICC (κάρτα SIM), και ένα ενσωματωμένο στο Blackberry ίδια τη συσκευή (το "ενσωματωμένο SE"). Οι αιτήσεις μπορούν να αλλάξουν συγκεκριμένες ISO14 πρωτόκολλα (A, B ή B πρώτος) σε μια συγκεκριμένη ασφαλές στοιχείο χρησιμοποιώντας το SecureElementManager και APIs SecureElement.
Σύνδεση σε μια μικροεφαρμογή και την ανταλλαγή ISO7816-4 APDUs με αυτό: Java προγραμματιστές να χρησιμοποιούν το JSR177 API για να ανοίξει λογικές συνδέσεις με εφαρμογές και την ανταλλαγή APDUs.
Λήψη ειδοποίησης του "γεγονότα συναλλαγών με κάρτα": Το BlackBerry 7 Java προγραμματιστής υλοποιεί το περιβάλλον TransactionListener και καταγράφει με το σύστημα καλώντας SecureElement.addTransactionListener. Θα πρέπει να αναφέρουν την AID (s) του applet (α) του οποίου οι πράξεις εφαρμογής τους είναι υπεύθυνη για την παρακολούθηση στην παρούσα πρόσκληση.


Το BlackBerry 10 Native προσέγγιση:


1. Ενεργοποιήστε το απαιτούμενο ISO14 πρωτόκολλο δρομολόγησης σε ένα επιλεγμένο ασφαλές στοιχείο (UICC vs ενσωματωμένο SE)


Κατά τη στιγμή της γραφής, μόνο ασφαλή στοιχεία σε μια UICC / SIM είναι διαθέσιμα από μια εφαρμογή BlackBerry 10. Ως εκ τούτου δεν υπάρχει ανάγκη για την αλλαγή πρωτοκόλλου και το θέμα είναι αμφισβητήσιμο.


2. Σύνδεση σε μια μικροεφαρμογή και την ανταλλαγή ISO7816-4 APDUs με αυτό


Οι προγραμματιστές πρέπει να χρησιμοποιούν BPS (BlackBerry Services Platform) APIs για να συνδεθείτε και να αλληλεπιδρούν με εφαρμογές σε ένα ασφαλές στοιχείο. Το ακόλουθο παράδειγμα απεικονίζει τα βασικά βήματα:/ / Μεταβλητές για χειρολαβές uint32_t hSESession? uint32_t seChannel? uint32_t uiccSeReaderID? / / Μεταβλητές για την ανάκτηση των αναγνωστών, οι κάτοχοι των πιθανών ασφαλών στοιχείων nfc_result_t rc? uint32_t numberOfReaders = 0? uint32_t * phReaders = NULL? στατική int DEF_LEN = 10? char readerName [DEF_LEN]? uint32_t len ​​= 10? / / Μεταβλητές για το άνοιγμα και την ανταλλαγή δεδομένων fcp_type_t fcpResponseType? int32_t openResponseLen? uint32_t exchangeResponseLen? uint32_t nReceiveAPDUBufferSize? uint8_t αποτέλεσμα *? QByteArray hex_encoded = QByteArray (aid. toByteArray ())? int aid_size = _aid. μήκος () / 2? uint8_t the_aid [aid_size]? int apdu_size = APDU. μήκος () / 2? uint8_t the_apdu [apdu_size]? Utilities :: hexToIntArray (_aid, the_aid)? Utilities :: hexToIntArray (APDU, the_apdu)? / / Loop μεταβλητής uint32_t i? / / Κλήση nfc_se_service_get_num_readers () με τη λαβή που αποκτήθηκαν στο προηγούμενο βήμα για να πάρετε τον αριθμό των διαθέσιμων αναγνώστες στο σύστημα CHECK ( nfc_se_service_get_num_readers (& numberOfReaders) )? εκπέμπει το μήνυμα (QString ("αριθμός των αναγνωστών =% 1"). arg (numberOfReaders))? / / Διατεθεί χώρος για τους αναγνώστες phReaders = (uint32_t *) malloc ( sizeof (uint32_t) * numberOfReaders)? εκπέμπει το μήνυμα (QString ("χώρου που διατίθεται για τους αναγνώστες"))? / / Να πάρει τις λαβές για τους αναγνώστες CHECK ( nfc_se_service_get_readers (phReaders, & numberOfReaders))? εκπέμπει το μήνυμα (QString ("πήρε λαβές για τους αναγνώστες"))? / / Επανάληψη μέσω των αναγνωστών για να βρείτε την κάρτα SIM αναγνώστη. int sim_readers_found = 0? για (i = 0? i nfc_se_reader_get_name


(phReaders [i], readerName, και len) )? αν ((LEN == 3) && ( strcmp (readerName, "SIM") == 0)) { uiccSeReaderID = phReaders [i]? sim_readers_found + +? σπάσει ? } } εάν (sim_readers_found == 0) { δωρεάν (phReaders)? επιστροφή ? } / / Δεσμεύσει τον πίνακα για τη διεξαγωγή των αναγνωστών. ελεύθερο (phReaders)? / / Ανοίξτε μια συνεδρία με την κάρτα SIM Reader / / Σημείωση: Μπορείτε να κρατήσουν αυτή τη σύνοδο για τη διάρκεια ζωής / / Από την αίτησή σας. rc = nfc_se_reader_open_session (uiccSeReaderID, & hSESession)? αν (rc =! NFC_RESULT_SUCCESS ) { qDebug () << QString ("ΣΦΑΛΜΑ XXXX αποσφράγιση:% 1"). arg (RC)? επιστροφή ? } / / Ανοίξτε ένα κανάλι για να βοηθήσουν fcpResponseType = OPEN_NO_FCP_INFO ? openResponseLen = 0? rc = nfc_se_session_open_logical_channel (hSESession, the_aid, aid_size, fcpResponseType, και seChannel, & openResponseLen)? αν (rc =! NFC_RESULT_SUCCESS ) { qDebug () << QString ("ΣΦΑΛΜΑ XXXX άνοιγμα λογικό κανάλι:% 1"). arg (RC)? επιστροφή ? } εάν (! select_only) { / / Αποστολή μίας εντολής APDU rc = nfc_se_channel_transmit_apdu (seChannel, the_apdu, apdu_size, και exchangeResponseLen)? αν (rc =! NFC_RESULT_SUCCESS ) { qDebug () << QString ("ΣΦΑΛΜΑ XXXX μετάδοση APDU:% 1"). arg (RC)? } / / Uint8_t είναι ένα 8 bit unsigned τύπου αποτέλεσμα = (uint8_t *) malloc ( sizeof (uint8_t) * exchangeResponseLen)? / / Να πάρει την απάντηση της ανοικτής πρόσκλησης nReceiveAPDUBufferSize = exchangeResponseLen? εάν (exchangeResponseLen> = 2) { CHECK ( nfc_se_channel_get_transmit_data (seChannel, και αποτέλεσμα [0], & nReceiveAPDUBufferSize))? QByteArray responseData = QByteArray :: fromRawData ( reinterpret_cast < const char *> (αποτέλεσμα), nReceiveAPDUBufferSize)? QString responseAsHex = QString :: fromAscii (responseData. toHex ())? εκπέμπει το μήνυμα (QString ("απάντηση APDU:% 1".) arg (responseAsHex))? } } ελεύθερο (αποτέλεσμα)?


3. Λήψη ειδοποίησης του "γεγονότα συναλλαγή με κάρτα"


Προγραμματιστές περιλαμβάνουν ειδική μνεία στο bar-descriptor.xml φάκελο της αίτησης τους να εγγραφούν για εκδηλώσεις συναλλαγών από ένα συγκεκριμένο applet. Το πλαίσιο επίκλησης χρησιμοποιείται για την αποστολή τέτοιων εκδηλώσεων σε εφαρμογές όταν αυτές προκύψουν. Εφαρμογές χρησιμοποιήσετε την κλάση InvokeManager να λαμβάνουν και να αποκωδικοποιήσει στοιχεία της συναλλαγής.


BlackBerry 10 και BlackBerry 7 διαφέρουν στην εν λόγω συναλλαγή εκδηλώσεις μπορεί να περιλαμβάνουν «συμπληρωματικές παραμέτρους", όπως ορίζονται στο ETSI TS 102 622. Τα στοιχεία αυτά θα πρέπει να περιλαμβάνονται σε οποιαδήποτε δεδομένα που παραδίδονται από το πλαίσιο επίκληση και να Base64 κωδικοποίηση.


Ένα παράδειγμα bar-descriptor.xml εισόδου ακολουθεί. Σημειώστε τη σύνταξη για τον καθορισμό της ενίσχυσης.id="com.sample.NfcTool.tl"> σημείο εισόδου>


1 </ σημείο εισόδου> < Τύπος> ΑΙΤΗΣΗ </ Τύπος> bb.action.NOTIFY </ δράση> εφαρμογή / vnd.bb.nfc_transaction </ mime-type> </ Φίλτρο> </ Επικαλούνται-στόχο>


Κώδικα δείχνει πώς να λαμβάνετε ειδοποιήσεις συναλλαγής από το πλαίσιο επίκλησης εμφανίζεται δίπλα.Σημειώστε ότι ο τύπος MIME που έχουν γνωστοποιήσεις συναλλαγών είναι "application / vnd.bb.nfc_transaction» και το ωφέλιμο φορτίο είναι σε μορφή JSON με δυαδικά δεδομένα σε κωδικοποίηση Base64..... _invokeManager = νέο bb :: συστήματος :: InvokeManager ()? QObject :: connect (_invokeManager, ΣΗΜΑ (που αναφέρθηκε ( const bb :: συστήματος :: InvokeRequest &)), αυτό , SLOT (receivedInvokeRequest ( const bb :: συστήματος :: InvokeRequest &)))? .... void mainmenu :: receivedInvokeRequest ( const bb :: συστήματος :: InvokeRequest & αιτήματος) { . QByteArray δεδομένων = αίτηση δεδομένων ()? αν (request. Mimetype . () συγκρίνει ("application / vnd.bb.nfc_transaction") == 0) { QString json = QString (δεδομένων)? qDebug () << "XXXX" << json? _systemDialog-> setBody (JSON)? _systemDialog-> show ()? } }



Έτσι εκεί το έχετε: μια πλήρη BlackBerry Java οδηγός porting NFC σε 6 θέσεις. Ελπίζουμε ότι αυτό ήταν χρήσιμο για σας!


Πόροι


Άρθρα της Γνωσιακής βάσης:
BlackBerry 10 - NFC Emulation Card


Δείγμα κώδικα:
Εξομοίωσης της κάρτας χρησιμοποιώντας το BPS ΑΡΙ αποδεικνύεται από την εφαρμογή NfcTool


Επαφές:
Martin Woolley στο Twitter
John Murray στο Twitter
Rob P Williams στο Twitter

Σχετικές Θέσεις

Η μεταφορά BlackBerry Java Applications NFC σε BlackBerry 10 Μέρος 4: Διαβάζοντας ένα Contactless κάρτα
Η μεταφορά BlackBerry Java Applications NFC σε BlackBerry 10 Μέρος 5: Εικονική Tag και άμιλλα Card
Porting BlackBerry Java Applications NFC σε BlackBerry 10 Μέρος 3: Peer to Peer - SNEP (Simple NDEF Exchange Protocol)
Porting BlackBerry Java Applications NFC σε BlackBerry 10 Μέρος 2: Συγγραφή Tag
NFC, NFC, και πιο NFC στο BlackBerry Jam Americas 2013

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

skaleadis

Related Posts Plugin for WordPress, Blogger...