1 DEVELOPING NFC APPS for BLACKBERRY NFC Forum, Developers Showcase March 21 st, 2014 Larry McDonough, Principal Evangelist @LMCDUNNA
2 CONTENTS Development on BlackBerry BlackBerry NFC Support 5 most common use cases NFC Demos Q & A
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
4 High Level Architecture Native C++ & Cascades UI HTML5 & WebWorks Android 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
5 Strong & Growing Ecosystem Managing corporate... and personal apps Broad range of app dev libraries Wide choice of programming languages C/C++ Native SDK C++/Qt Cascades HTML5 BlackBerry WebWorks Java Android Runtime
6 Top Partners
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
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
9 BlackBerry NFC Support
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
11 About NFC Tags Memory Cards that store data App takes action in response to the message Have a contactless interface Read by a device termed the Reader
12 About NFC Tags 4 standard NFC Forum tag types Various tag capacities Message format is standard (NDEF) Custom types ( external ) allowed Standard message types include Smart Poster, Text, URI
13 About Tag Circuitry
14 Field Detection and Power
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 For ios users w/nfc Tag For real smartphone users
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
17 Demo 2 NFC Fun Run Start timer Run! Stop timer Have a nice cup of tea
18 Register with Invocation Framework <invoke-target id="com.example.nfcracetime"> <type>application</type> <filter> <action>bb.action.open</action> <mime-type>application/vnd.rim.nfc.ndef</mime-type> <property var= uris value= ndef://4/my.rim.com/myrecordtype /> </filter> </invoke-target>
19 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);
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
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 What is Peer to Peer NFC? Select object to share Touch devices! NFC ( and maybe Bluetooth) Magic Bask in the admiration!
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); }
24 Share from C++ NfcShareManager *_nfcsharemanager = new NfcShareManager();... void NfcSharing::fileShareContentChanged(QString paths) { NfcShareFilesContent request; QList<QUrl> urls;... // Construct a list of local file URLs from file paths... request.setfileurls(urls); // share mode File means Bluetooth connection handover _nfcsharemanager->setsharemode(bb::system::nfcsharemode::file); NfcShareSetContentError::Type rc = _nfcsharemanager->setsharecontent(request); }
25 CONTENTS What is NFC? (skipped for this audience!) NFC Tags Peer to Peer Card Emulation Virtual Target (Host Card) Emulation Reading Contactless Cards
26 What are we Emulating? We are emulating Smart Cards Almaden Valley Health Club Larry McDonough Member Since: 2/11/2005 Membership & Loyalty Cards Credit Cards ID Cards
27 What are Smart cards? A small computer Processor, OS, file system Can run special apps called applets Almaden Valley Health Club Secure Embedded in a plastic card Contacts and/or contactless interface Larry McDonough Member Since: 2/11/2005
28 Smart Cards & Readers Power Almaden Valley Health Club Communications Larry McDonough Member Since: 2/11/2005 Smart Card Reader With contact-based slot and contactless interface (NFC)
29 General Architecture
30 BlackBerry Architecture
31 Card Emulation In Use Touch handset to a reader Reader communicates directly with SE Optionally be notified of transaction Admire your purchase
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));...
33 Transaction Notification... <invoke-target id="com.example.nfctool.tl"> <entry-point>1</entry-point> <type>application</type> <filter> <action>bb.action.notify</action> <mime-type>application/vnd.bb.nfc_transaction</mime-type> <property var="uris value="aid://sim/6e.66.63.74.65.73.74.30.31/"/> </filter> </invoke-target>...
34 NFC Payments EcoSystem Secure Provisioning (e.g. TSM) MNOs Financial Institutions Secure Payments (NFC) Transport Retail Secure Transactions (e.g. EMV)
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
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!
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
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);...
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
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
41 What can you do with it? 1. Card details required 2. User presents contactless card 3. App reads details from card and completes form
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
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
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);...
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
46 NFC APIs APIs R/W API NDEF Write/Read (Invocation Framework) ISO14-4 ISO14-3 ISO14-3 Raw ISO15-3 P2P API NDEF send/receive (Invocation Framework) ISO18 VCE API ISO14-4 UICC CE API SIM Access Transaction NTF
47 NFC Apps Support (Built in) Apps supporting NFC (implicit, explicit) out-of-the-box: SmartTags Contacts Browser Gallery (Pictures, Video, Music Player) DocToGo File Manager Calendar Adobe Reader Email BBM AppWorld Call
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
49 NFC Developer Resources Articles http://tinyurl.com/cqfzf7y Code https://github.com/blackberry/cascades-community-samples Contacts Martin Woolley @mdwrim John Murray @jcmrim Rob P Williams @robbiedubya
50 Questions & Answers Articles http://tinyurl.com/cqfzf7y Code https://github.com/blackberry/cascades-community-samples Contacts Martin Woolley @mdwrim John Murray @jcmrim Rob P Williams @robbiedubya Larry McDonough @lmcdunna
51 Thank You
52 High Level Architecture Native C/C++/Qt Application Developers Web Application Developers Community and Content Developers UI Framework BlackBerry Cascades HTML5, CSS, JavaScript Web Frameworks Platform, device and cloud APIs Android Runtime Gaming Platforms BlackBerry 10 OS Multithreading Memory Mgmt Security Graphics Sensors.