Esempio n. 1
0
        public override async void DidDetectTags(NFCNdefReaderSession session, INFCNdefTag[] tags)
        {
            System.Diagnostics.Debug.WriteLine("========> DidDetectTags");

            _tag = tags[0];
            await session.ConnectToTagAsync(_tag);

            TagDetected?.Invoke(this, new NfcTagDetectedEventArgs(
                                    tagId: string.Empty, //// TODO: CHECK HOW TO GET ID
                                    ndefMessage: await ReadNdefAsync()));
        }
Esempio n. 2
0
        public override void DidDetectTags(NFCNdefReaderSession session, INFCNdefTag[] tags)
        {
            //Connect with the NDEF Tag
            tag = tags[0];

            Session = session;

            session.ConnectToTag(tag, delegate { });

            Action <NFCNdefMessage, NSError> readValues;

            readValues = ReadValues;

            tag.ReadNdef(readValues); //Read NDEF tag and then encrypt the nonce
        }
Esempio n. 3
0
 /// <summary>
 /// Returns NFC Tag identifier
 /// </summary>
 /// <param name="tag"><see cref="INFCNdefTag"/></param>
 /// <returns>Tag identifier</returns>
 byte[] GetTagIdentifier(INFCNdefTag tag)
 {
     byte[] identifier = null;
     if (tag is INFCMiFareTag mifareTag)
     {
         identifier = mifareTag.Identifier.ToByteArray();
     }
     else if (tag is INFCFeliCaTag felicaTag)
     {
         identifier = felicaTag.CurrentIdm.ToByteArray();
     }
     else if (tag is INFCIso15693Tag iso15693Tag)
     {
         identifier = iso15693Tag.Identifier.ToByteArray();
     }
     else if (tag is INFCIso7816Tag iso7816Tag)
     {
         identifier = iso7816Tag.Identifier.ToByteArray();
     }
     return(identifier);
 }
Esempio n. 4
0
        /// <summary>
        /// Returns NFC Tag identifier
        /// </summary>
        /// <param name="tag"><see cref="INFCNdefTag"/></param>
        /// <returns>Tag identifier</returns>
        public static byte[] GetTagIdentifier(INFCNdefTag tag, ref string technology)
        {
            byte[] identifier = null;
            if (tag is INFCMiFareTag mifareTag)
            {
                technology = "MiFare";
                identifier = mifareTag.Identifier.ToByteArray();
                NFCMiFareFamily f = mifareTag.GetMifareFamily();
                if (f == NFCMiFareFamily.Ultralight)
                {
                    technology = "MiFare Ultralight";
                }
                else if (f == NFCMiFareFamily.Plus)
                {
                    technology = "MiFare Plus";
                }
                else if (f == NFCMiFareFamily.DesFire)
                {
                    technology = "MiFare DesFire";
                }
            }
            else if (tag is INFCFeliCaTag felicaTag)
            {
                technology = "Felica";
                identifier = felicaTag.CurrentIdm.ToByteArray();
            }
            else if (tag is INFCIso15693Tag iso15693Tag)
            {
                technology = "Iso15693";
                identifier = iso15693Tag.Identifier.ToByteArray();
            }
            else if (tag is INFCIso7816Tag iso7816Tag)
            {
                technology = "Iso7816";
                identifier = iso7816Tag.Identifier.ToByteArray();
            }


            return(identifier);
        }
Esempio n. 5
0
        void MakeTagReadOnly(NFCTagReaderSession session, INFCTag tag, INFCNdefTag ndefTag)
        {
            session.ConnectTo(tag, (error) =>
            {
                if (error != null)
                {
                    Console.WriteLine(error.LocalizedDescription);
                    return;
                }

                ndefTag.WriteLock((error) =>
                {
                    if (error != null)
                    {
                        Console.WriteLine("Error when locking a tag on iOS: " + error.LocalizedDescription);
                    }
                    else
                    {
                        Console.WriteLine("Locking Successful!");
                    }
                });
            });
        }
Esempio n. 6
0
        /// <summary>
        /// Writes or clears a TAG
        /// </summary>
        /// <param name="session"><see cref="NFCTagReaderSession"/></param>
        /// <param name="tag"><see cref="INFCNdefTag"/></param>
        /// <param name="tagInfo"><see cref="ITagInfo"/></param>
        /// <param name="clearMessage">Clear message</param>
        void ExecuteWriteOrClear(NFCTagReaderSession session, INFCNdefTag tag, ITagInfo tagInfo, bool clearMessage = false)
        {
            tag.QueryNdefStatus((status, capacity, error) =>
            {
                if (error != null)
                {
                    Invalidate(session, error.LocalizedDescription);
                    return;
                }

                if (status == NFCNdefStatus.ReadOnly)
                {
                    Invalidate(session, UIMessages.NFCErrorReadOnlyTag);
                    return;
                }

                if (Convert.ToInt32(capacity) < NFCUtils.GetSize(tagInfo.Records))
                {
                    Invalidate(session, UIMessages.NFCErrorCapacityTag);
                    return;
                }

                NFCNdefMessage message = null;
                if (!clearMessage)
                {
                    session.AlertMessage = UIMessages.NFCSuccessWrite;

                    var records = new List <NFCNdefPayload>();
                    for (var i = 0; i < tagInfo.Records.Length; i++)
                    {
                        var record = tagInfo.Records[i];
                        if (GetiOSPayload(record) is NFCNdefPayload ndefPayload)
                        {
                            records.Add(ndefPayload);
                        }
                    }

                    if (records.Any())
                    {
                        message = new NFCNdefMessage(records.ToArray());
                    }
                }
                else
                {
                    session.AlertMessage = UIMessages.NFCSuccessClear;
                    message = GetEmptyNdefMessage();
                }

                if (message != null)
                {
                    tag.WriteNdef(message, (error) =>
                    {
                        if (error != null)
                        {
                            Invalidate(session, error.LocalizedDescription);
                            return;
                        }

                        tagInfo.Records = GetRecords(message.Records);
                        OnMessagePublished?.Invoke(tagInfo);
                        Invalidate(NfcSession);
                    });
                }
                else
                {
                    Invalidate(session, UIMessages.NFCErrorWrite);
                }
            });
        }