How can I read the NFC content from Apple membership passes? - ios

We started to develop a strong use-case with NFC-compatible Wallet Passes, but we got stuck at one point. We already created an NFC pass and stored it into an iPhone's Wallet, so now we want to read out the NFC content (what is provided in the "message" key in the NFC dictionary; reference: https://developer.apple.com/library/archive/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/LowerLevel.html). How can we do it with a standard NFC reader, like an ACR1255u-J1?
There is a video from a working demo: https://www.youtube.com/watch?v=XhmKxKpU4x4 -- they successfully read out the membership pass content somehow.
As we don't have NFC certification for creating passes, we used a pass from PassNinja's example, which has an "encryptionPublicKey". Is this the reason why we can't read out the content? I tried to read out the content via ACR1255u-J1, a standard PCSC driver, and this package's first example: https://www.npmjs.com/package/nfc-pcsc
The first example of the linked repository represents the code that I used for the first tests.
The NFC reader can read all of the standard tags, but can't read an iPhone tag. The error message is: "Tag not compatible with AID F222222222."

Related

Is there a service that creates a pass that supports the express mode of the wallet?

Thank you for reading.
I'm trying to make a system that turns on the iPhone just by holding it over a certain machine.
To do that, I need to put a pass that supports express mode into the user's iPhone wallet.
It would be ideal to have a system like Japan's SuiCa where after registering an IC card in the iPhone, the ticket gate can be unlocked simply by holding the iPhone over the ticket gate.
There are many services that create passes, but all of them can only create barcode type or normal NFC type passes.
Even making a normal NFC type pass must go through Apple's strict examination and get approval, so I think it's more difficult to get approval for a pass that supports express mode.
Perhaps because of that, only global car manufacturers are able to create passes that support express mode.
Therefore, the service I want may not exist.
However, if you know of a service that can create a pass that supports express mode, please let me know.
Thank you very much.
I searched for a service that creates a pass compatible with the express mode of the wallet, but I couldn't find it.
I hope to find a service that will create a pass for the express mode of the wallet.
NFC Passes can do that to an extent. You will need to obtain an NFC Pass Type ID Certificate from Apple and use NFC reader with firmware that implements the Apple VAS protocol or create an app that uses iOS's NFCVASReaderSession class and configure it to poll for your NFC Pass Type ID, to be able to automatically wake the iPhone and select your NFC pass. Note that the Apple VAS protocol only polls for passes and makes them appear automatically. It is not possible to engage with the pass automatically like an Express pass, because the user still has to authenticate. But the experience is slicker than having to manually select a pass.

Does iOS NFC Background Reading support NDEF Contact Card records?

I'm just getting into NFC Tags for iOS and I want to program a contact record into an NFC tag so that it can be read by an iPhone that supports Background Tag Reading. It seems like Background Tag Reading in iOS only supports universal links and certain URI/URL messages. This is the link I read for reference:
Background Tag Reading Support Info
I know that Android supports the NDEF VCard Record Type, where one can then program a tag with a contact's info, and then scan and add that contact. I noticed that when I used the same tag with Apple, nothing showed up, so that's why I am assuming Apple doesn't support this NDEF Record type.
First off, am I correct in this information so far? Apple does not support NDEF VCard Records?
If that's true, is there any way to program a contact in or is the closest I'm going to get to a contact through the use of the tel:+14085551212 url, as stated by the link above?
Yes only URIs are identified by iOS. For v-Card you must use a third party app. The app I made for example can handle v-Cards. https://apps.apple.com/us/app/nfc-for-iphone/id1249686798
Apple might open this in the future but who knows...
This can be achieved using URL NDEF record itself. Just host a vcard on a URL and use that for URL NDEF record. Scanning the tag will trigger browser, and opening it will open the contact application with the details in the vcard loaded.
Note the URL should have VCARD content, and content type header should be text/x-vcard. You can create one using service like www.vcard.link

Writing NDEF messages using sendMiFareCommand in CoreNFC

We are using the new NFC write functionality of iOS 13 to write data to a MiFare Ultralight NFC-tag, and it's working perfectly using the writeNDEF method
But as we are using the password protection feature of the NFC-tag we need to send the send the NDEF messages via the lowlevel method sendMiFareCommand
We have not been able to find any documentation for how to transform the NDEF format into the lowlevel data needed for the sendMiFareCommand-method
Any example or documentation on this for Swift would be greatly appreciated.
You might consider first unlocking the tag with a specific MIFARE command and then using the tag.writeNDEF() function on that. This can be accomplished in the same NFC Tag Session without terminating it. This will keep the tag unlocked in the meantime.
Review the Ultralight data sheet for instructions on PWD_AUTH. Code is 0x1B for Ultralight EV1 and newer. Section 1.8, page 30 shares instructions on specific use.
https://www.nxp.com/docs/en/data-sheet/MF0ULX1.pdf

How does YouTube and Netflix push content to Roku?

Using a mobile app, it is possible to "Cast" media from your mobile app to a Roku device on the same network. I do not understand the mechanism being used which allows a remote device (YouTube Android app for example) to cause the selected Roku to open the YouTube channel and start playing the video.
I have looked though the Roku developer documentation and am unable to locate any way to launch a channel without the user choosing that channel.
This is one way of doing it:
Use the External Control
API
to discover the Roku device(s).
Use the
query/apps
command to ensure that the app you're targeting is installed
and/or to obtain the app id. You could also use the
install/appID
command if you know the app id and you discovered that the app is
not installed.
Use the
launch/appID
to open the app and deep link to specific content. The url should
look something like this
http://<device-ip>:8060/launch/<your-app-id>?contentId=<movie-id-in-your-api>&mediaType=movie.
Quick note, the install/appID command also launches the app after
it's installed the same way the launch/appID command would.
Handle the deep link in your Roku app.
Example:
sub main(args as dynamic)
contentID = args.contentID
mediaType = args.mediaType
if contentID <> invalid and mediaType <> invalid
// Either store the parameters for later use in the app, or make the
// requests to your content API right here.
end if
end sub
More details on Deep Linking here.
Adding to the Alejandro Cotilla answer, You can check some simple implementation of the External Control API here on this repo.

Open foursquare app directly from NFC tag on Blackberry?

Has anyone been able to open the foursquare app directly from an NFC tag? If yes, what custom URL do you write onto the tag?
For android, a simple http://m.foursquare.com/venue/VENUE_ID does the trick.
The same url format works for BlackBerry devices. The only thing that may be different is the formatting of the NFC tag itself. It needs to be an NDEF tag with a record type of "U". The Android app also will read tags of that format.

Resources