[ Background Conversations ]
This year, we are delighted to introduce a new framework in iOS 11 called Core NFC, that would allow your apps to integrate NFC on iPhone 7 and iPhone 7 Plus.
Using Core NFC, apps can interact with their physical environment and the real-world objects within it.
You may already know that Apple Pay uses NFC for complex payment.
Now, with the introduction of Core NFC, you will be able to use NFC in your applications to create new and innovative user experiences with the iPhone.
In this session, we will give you a brief overview of new field communications, what is supported in the Core NFC framework, the requirements and details for using it, and some example code.
To start off, let's talk a little bit about Near Field Communication.
Near Field Communication, known simply as NFC, is a wireless technology that allows the exchange of information between devices that are within close proximity.
Limited to a range of just a few centimeters.
NFC is actually a collection of a number of different standards and protocols.
All of these standards coexist and are used in different applications.
You may have seen or had experience with NFC text.
The small little stickers or cards which can be read wirelessly by an NFC reader.
NFC text comes in a wide variety of shapes, sizes, and capacities.
They are classified into five categories, known as Type 1 through Type 5.
Each one corresponding to a different standard.
For example, Type 3 texts are based on FEDECA [assumed spelling] and Type 4 is based on ISO-14443.
The NFC Forum has defined the NFC Data Exchange Format, or NDEF for short, as a common messaging format for exchanging data in a standardized way among the different text types.
Now that we have covered some NFC basics, let's take a look at what you can do with Core NFC.
For the initial launch of Core NFC, we have focused on NFC Tag Reading, which can be used to enhance the user experience in a wide variety of ways.
Potential applications include connecting user to location or context-specific content, connecting physical hardware with your application, and even for in-store product information or inventory tracking.
In addition, NFC Tags can be used in place of QR codes.
Core NFC will allow your application to read any NDEF formatted tag.
This greatly simplifies the process of reading tags within your application or for having to deal with the different standards.
Tag reading is supported on iPhone 7 and iPhone 7 Plus.
At this time, Core NFC does not support writing or formatting operations.
There are two requirements for using Core NFC in your application.
First, Core NFC is an entitlement-protective framework.
You will need to turn on the Near Field Communication Tag Reading Capability from Xcode to get this entitlement.
However, this capability would not be in Xcode for the first [inaudible] released at WWDC.
In the meantime, you can manually request this entitlement by visiting the Certificates, Identifiers and Profiles page on the Apple Developer website.
The second requirement for Core NFC is a Scan Usage Description.
This string is required in your application's info P-list file, and it will be displayed to the user when your application starts NFC scanning.
For more information, you can watch the WWDC session, Privacy and Your Apps.
Now that you have configured your project correctly, let's review some additional details about tag reading with the Core NFC framework.
First, tag reading is an on-demand process, meaning that your application has to initiate a tag reading activity using a session.
Second, your application has to be visible and foregrounded in order to start a tag reading activity.
A tag reading session will be ended if your application is backgrounded or ceases to be visible.
Next, each tag reading activity is limited to 60 seconds at a time.
If a session has timed out or invalidated, your application must create a new session to initiate another tag reading activity.
You can configure a session to read either a single tag or multiple tags.
In a single tag reading mode, the session will be ended automatically after a tag is read.
On the other hand, a multi-tag reading session will remain active until canceled by the user, or the 60-second timeout is reached.
Finally, as mentioned previously, the NFC Usage String defined in your info P-list will be displayed to the user while the tag reading activity is in progress.
We have provided a sample application along with this presentation to demonstrate the use of Core NFC.
Consider the case where you want to take a physical kind of inventory.
Here, we are showing you the key user interaction sequence of the sample application.
The sample application consists of a main table view, and a Scan button.
Every time an inventory item is scanned, it is displayed as a role entry in this main table view.
Just click on the Scan button to start a tag scanning.
This UI will be presented to the user hopefully on top of your application once tag scanning has begun.
During tag scanning, the user's description string is displayed within the UI.
At any time, the user can hit the Cancel button to stop a tag scanning, which will invalidate the reader session.
The UI will get updated once an NFC tag has been successfully read.
Here, we have configured our reader session to be single tag read mode.
Finally, the overlaid UI will be dismissed, and the application will be foregrounded once the tag reading session has ended.
Let's walk through the code together from the sample application we have just shown.
At a high level, you would need to perform these three easy steps to enable tag reading in your application.
First, adopt the NFC NDEF Reader Session Delegate Protocol.
Next, create an instance of the NFC NDEF Reader Session Class, and provide it with your delegate.
Finally, start a reader session using the Begin method, and handle the delegate callbacks.
Here is a cool snippet from the sample application, illustrating the three-step approach.
To start off, we import the Core NFC framework into the code.
Here we adopt the delegate protocol in Table View Controller, which will handle the two required callbacks.
They invalidate with error and detect NDEF.
The invalidate with error callback will notify your application when a tag reading activity has stopped.
This can happen for a variety of reasons.
For example, a tag has been successfully read in a single tag read session.
The user has chosen to stop the tag scanning activity.
The 3-second timeout has expired or the application is no longer in the foreground.
The specific session object provided in the first parameter will be invalidated after the function exits.
A new reader session instance is required for additional tag reading.
The detect NDEFs will be invoked every time an NDEF has been read from an NFC tag.
Your application can then grab the payload from the NDEF message, decode it, and handle the message as appropriate.
Finally, we have an extra method that links to the Scan button for starting a single tag read session.
All you need to do is create an instance of NFC NDEF Reader Session with your data gate, then invoke to begin method to start tag scanning.
If you wish to create a multi-tag reading session, set the invalidate at the first read parameter to False.
If you need to stop an ongoing session programmatically, you can call the invalidate method.
This will trigger your invalidate with error callback, letting you know that the session has ended.
In summary, it is very simple to enable NFC tag reading with Core NFC by following these steps.
Enable the NFC tag reading capability.
Make sure your Scan Usage Description String is set in your info P-list.
Integrate the Core NFC framework in your code.
And start reading tags.
For more information about this presentation and our sample code, please visit this online link.
Also, here are some related sessions you might be interested in.
Privacy and Your Apps will discuss important privacy-related topics, and What's New In Apple Pay and Wallet will talk about all the exciting Apple Pay features coming to iOS and Mac OS.
Thank you for watching this presentation on Core NFC Framework.