22 March 2014 1
DEVELOPING NFC APPS for BLACKBERRY
NFC Forum, Developers Showcase March 21st, 2014
Larry McDonough, Principal Evangelist @LMCDUNNA 22 March 2014 2
CONTENTS • Development on BlackBerry • BlackBerry NFC Support • 5 most common use cases • NFC Demos • Q & A
22 March 2014 3
First, Some Stats…
• A mobile device management leader with global enterprise customer base exceeding 80,000 • 30,000+ BES 10 commercial & test servers installed • 250,000+ BBM Channels globally since launch • 40+ Million newly registered Android/iOS BBM users in first 60 days • 665+ carriers and distribution partners offering BlackBerry products and services in more than 175 countries around the world
22 March 2014 4
High Level Architecture
Native C++ & HTML5 & Android Cascades UI WebWorks Runtime
BlackBerry Platform & Services (BlackBerry Enterprise Service 10, Push, Payments, BBM, Invocation Framework, Share Framework, Maps, …)
BlackBerry 10 OS
Support for NFC in the Android Runtime is coming in 10.3 22 March 2014 5
Strong & Growing Ecosystem
Managing corporate... and personal apps Broad range of app dev libraries
Wide choice of HTML5 C/C++ C++/Qt Java Android programming BlackBerry Native SDK Cascades Runtime languages WebWorks™ 22 March 2014 6
Top Partners 22 March 2014 7
BlackBerry World
• In over 170 Markets • Free to register • Free to submit upgrade • 70/30 revenue share • Credit card, PayPal, Carrier Billing • 5+ Billion apps downloaded
22 March 2014 8 http://developer.blackberry.com
• Tools, samples, documentation, Forums… • HTML5 / WebWorks • C, C++, Native SDK • Cascades UI Framework • Android • Frameworks Partners: • Appcelerator, Cordova, dojo, jQuery Mobile, Marmalade, Qt, Sencha Touch, Unity
22 March 2014 9
BlackBerry NFC Support 22 March 2014 10
CONTENTS • What is NFC? (skipped for this audience!) • NFC Tags • Peer to Peer • Card Emulation • Virtual Target (Host Card) Emulation • Reading Contactless Cards • APIs & Built-in Apps Support
22 March 2014 11
About NFC Tags
Memory Cards that store data
App takes action in Have a contactless response to the message interface
Read by a device termed “the Reader” 22 March 2014 12
About NFC Tags
4 standard NFC Forum tag types
Message format is Various tag capacities standard (NDEF)
Standard message Custom types types include Smart (“external”) allowed Poster, Text, URI 22 March 2014 13
About Tag Circuitry 22 March 2014 14
Field Detection and Power 22 March 2014 15
Demo 1 – NFC Business Card Front Back
• No coding or client app necessary • Uses standard URL message format • Leverages browser to take user to my eBusiness Card site • Backend server code helps me track who I met, who downloaded my vcard, etc.
w/QR Code w/NFC Tag For iOS users For real smartphone users 22 March 2014 16
Demo 1 – NFC Business Card
After scanning tag, developers can: • Add my vcard to their address book which includes usual stuff plus: • LinkedIn URL, • Twitter handle, • Slide Share link, • BlackBerry Dev Blog link, • My Blogger link, etc. • Request a device, Register as a vendor, and visit BlackBerry dev site
22 March 2014 17
Demo 2 – NFC Fun Run
Start timer
Run!
Stop timer
Have a nice cup of tea 22 March 2014 18
Register with Invocation Framework
Client action C++ and Qt
bb::system::InvokeManager* _invokeManager = new bb::system::InvokeManager();
void App::receivedInvokeRequest( const bb::system::InvokeRequest& request) {
QByteArray data = request.data();
QtMobilitySubset::QNdefMessage ndefMessage = QtMobilitySubset::QNdefMessage::fromByteArray(data);
handleNdefRequest(ndefMessage); } 22 March 2014 20
CONTENTS • What is NFC? (skipped for this audience!) • NFC Tags • Peer to Peer • Card Emulation • Virtual Target (Host Card) Emulation • Reading Contactless Cards • APIs & Built-in Apps Support
22 March 2014 21
What is Peer to Peer NFC?
Transfer data from one device to another • Share information just by touching Any kind of data • Photos, music files, address book contacts are typical examples For larger items let NFC negotiate a Bluetooth connection • No need for the usual BT pairing process • Simple! 22 March 2014 22
What is Peer to Peer NFC?
Select object to share
Touch devices!
NFC ( and maybe Bluetooth) Magic
Bask in the admiration! 22 March 2014 23
Share from QML InvokeActionItem { id: sharedNdefData query { mimeType: "application/vnd.rim.nfc.ndef" invokeActionId: "bb.action.SHARE" } }
onShowing: { // make NDEF message as byte array in C++ sharedNdefData.data = _ndefFactory.getNdefVcardMessage(sendVcard.ndefFirstName, sendVcard.ndefLastName, sendVcard.ndefAddress, sendVcard.ndefEmail, sendVcard.ndefMobile); } 22 March 2014 24
Share from C++
NfcShareManager *_nfcShareManager = new NfcShareManager(); ... void NfcSharing::fileShareContentChanged(QString paths) { NfcShareFilesContent request; QList
// share mode File means Bluetooth connection handover _nfcShareManager->setShareMode(bb::system::NfcShareMode::File);
NfcShareSetContentError::Type rc = _nfcShareManager->setShareContent(request); } 22 March 2014 25
CONTENTS • What is NFC? (skipped for this audience!) • NFC Tags • Peer to Peer • Card Emulation • Virtual Target (Host Card) Emulation • Reading Contactless Cards
22 March 2014 26
What are we Emulating?
We are emulating Smart Cards
Almaden Valley Health Club
Larry McDonough Member Since: 2/11/2005
Membership & Credit Cards ID Cards Loyalty Cards 22 March 2014 27
What are Smart cards?
Can run special A small Processor, OS, apps called Almaden Valley computer file system Health Club ‘applets’
Contacts and/or Embedded in a Larry McDonough Secure contactless Member Since: 2/11/2005 plastic card interface 22 March 2014 28
Smart Cards & Readers
Almaden Valley Power Health Club
Communications Larry McDonough Member Since: 2/11/2005
Smart Card Reader With contact-based slot and contactless interface (NFC) 22 March 2014 29
General Architecture 22 March 2014 30
BlackBerry Architecture 22 March 2014 31
Card Emulation In Use
Touch handset to a reader
Reader communicates directly with SE
Optionally be notified of transaction
Admire your purchase 22 March 2014 32
Interact with Secure Element
... rc = nfc_se_session_open_logical_channel(hSESession, the_aid, sizeof(the_aid), fcpResponseType, &seChannel, &openResponseLen); ... rc = nfc_se_channel_transmit_apdu( seChannel, the_apdu, apdu_size, &exchangeResponseLen ); ... rc = nfc_se_channel_get_transmit_data(seChannel, result, &nReceiveAPDUBufferSize)); ... 22 March 2014 33
Transaction Notification ...
... 22 March 2014 34
NFC Payments EcoSystem
Financial Retail Institutions Transport MNOs Secure Secure Provisioning Transactions (e.g. TSM) (e.g. EMV) Secure Payments (NFC) 22 March 2014 35
CONTENTS • What is NFC? (skipped for this audience!) • NFC Tags • Peer to Peer • Card Emulation • Virtual Target (Host Card) Emulation • Reading Contactless Cards • APIs & Built-in Apps Support
22 March 2014 36
What is Virtual Target Emulation?
Touch handset to a reader
Reader communicates with BlackBerry 10 App
Application completes transaction
Smile at new allocation of loyalty points! 22 March 2014 37
Fool that Reader!
• Virtual target emulation makes your smartphone seem just like an NFC tag or card • The reader cannot tell them apart • Of course you cannot set the UID of the emulated target – that is not under your control 22 March 2014 38
Emulating an NDEF Tag ... nfc_ndef_record_t *ndefRecord = makeCustomRecord(QString("my.rim.com"), QString("myrecordtype"), tagData); rc = nfc_create_ndef_message(&_emulateNdefMessage); rc = nfc_add_ndef_record(_emulateNdefMessage, ndefRecord); rc = nfc_start_ndef_tag_emulation(_emulateNdefMessage); ...
22 March 2014 39
CONTENTS • What is NFC? (skipped for this audience!) • NFC Tags • Peer to Peer • Card Emulation • Virtual Target (Host Card) Emulation • Reading Contactless Cards • APIs & Built-in Apps Support
22 March 2014 40
What is it?
Read data from physical (plastic) contactless cards • Right into your application Reduce manual data entry • e.g., credit card number Make card usage tracking more convenient • e.g., view card use history or balance on BlackBerry 10 smart phone 22 March 2014 41
What can you do with it?
1. Card details 2. User presents 3. App reads details required contactless card from card and completes form 22 March 2014 42
How do you do this?
Exactly *how* depends on the card type • A credit card is not the same as an ID card • Transit cards are not all the same Exchange APDUs with the card • Response APDUs will contain the data you want • You have to send the right command APDUs though Touch card to BlackBerry to fill in form • Details for credit cards are defined in the EMV specifications 22 March 2014 43
How do you do this?
Touch handset to a card
BlackBerry 10 App acts as reader
APDU ‘conversation’ with card yields data
User delighted with result of your thoughtful feature 22 March 2014 44
Code Example ... rc = nfc_register_tag_readerwriter(TAG_TYPE_ISO_14443_4); ... nfc_tag_transceive(target, TAG_TYPE_ISO_14443_4, the_apdu, apdu_size, response, MAX_RESPONSE_SIZE, &rlength); ... 22 March 2014 45
Amsterdam Travel Pass
Touch handset to Transit Card
BlackBerry 10 App acts as reader
APDU ‘conversation’ with Transit Card
Review your last two transactions 22 March 2014 46
NFC APIs APIs
R/W API VCE API NDEF Write/Read (Invocation Framework) ISO14-4 ISO14-4
ISO14-3 UICC CE API ISO14-3 Raw SIM Access ISO15-3 Transaction NTF
P2P API NDEF send/receive (Invocation Framework) ISO18
22 March 2014 47
NFC Apps Support (Built in)
Apps supporting NFC (implicit, explicit) out-of-the-box:
SmartTags Calendar Contacts Adobe Reader Browser Email Gallery (Pictures, Video, Music Player) BBM DocToGo AppWorld File Manager Call
22 March 2014 48
CONTENTS • What is NFC? (skipped for this audience!) • NFC Tags • Peer to Peer • Card Emulation • Virtual Target (Host Card) Emulation • Reading Contactless Cards • APIs & Built-in Apps Support
22 March 2014 49
NFC Developer Resources
Articles • http://tinyurl.com/cqfzf7y
Code • https://github.com/blackberry/Cascades-Community-Samples
• Martin Woolley @mdwrim Contacts • John Murray @jcmrim • Rob P Williams @robbieDubya 22 March 2014 50
Questions & Answers
Articles • http://tinyurl.com/cqfzf7y
Code • https://github.com/blackberry/Cascades-Community-Samples
• Martin Woolley @mdwrim Contacts • John Murray @jcmrim • Rob P Williams @robbieDubya Larry McDonough @lmcdunna 22 March 2014 51
Thank You 22 March 2014 52
High Level Architecture
Native C/C++/Qt Web Application Community and Application Developers Developers Content Developers
UI Framework BlackBerry HTML5, CSS, JavaScript Cascades Web Frameworks
Platform, device and Android Runtime cloud APIs
Gaming Platforms
Multi- Memory Security Graphics Sensors …. BlackBerry 10 OS threading Mgmt