I am developing an Android+iOS app with Flutter which have several screens of user interaction and NFC screen.
On the NFC screen the users taps phones back to back (as we do with Android beam data transfer): one phone is Android phone which have app running and sending NFC NDEF message just like in this example.
On the second phone "my app" with NFC screen is running and reading the NDEF with nfc_in_flutter (there are only 3 nfc plugins in flutter and this is the only one seemed to be currently maintained) plugin and displays on the screen.
This scenario works fine on Android device, however on iOS device when I tap Android device to it nothing happens. It does not read.
I tested simple NFC tag (not Android device) with iOS device and it reads the tag. Could someone explain what is the reason?
Here are my assumptions, please correct me if I am wrong: Since iOS supports only NDEF format and no HCE, I should send NDEF from Android to iOS.
What I know about Host card emulation:
In order for the device to act like a card (or use HCE), app needs to create HostApduService. While this service is running phone (and the app itself) is able to recognize the reader and if everything is fine it sends the payload. The format of the message is IsoDep (not NDEF).
On the other hand the reader side sends ADPU to establish the connection and if its ok, it receives the payload.
In the above example sender creates NDEF messages and does not act as a card (HCE) since no HostApduService created.
So if iOS supports NDEF messages, why in the world iOS device does not read the message from on Android device?