Beispiel #1
0
        public override void DidDetectTags(NFCNdefReaderSession session, INFCNdefTag[] tags)
        {
            try
            {
                var nFCNdefTag = tags[0];
                session.ConnectToTag(nFCNdefTag, CompletionHandler);
                string         dominio        = "http://boxweb.azurewebsites.net/";
                string         user           = MainViewModel.GetInstance().User.UserId.ToString();
                string         tag_id         = "";
                string         url            = dominio + "index3.aspx?user_id=" + user + "&tag_id=" + tag_id;
                NFCNdefPayload payload        = NFCNdefPayload.CreateWellKnownTypePayload(url);
                NFCNdefMessage nFCNdefMessage = new NFCNdefMessage(new NFCNdefPayload[] { payload });
                nFCNdefTag.WriteNdef(nFCNdefMessage, delegate
                {
                    session.InvalidateSession();
                });
                //Task task = App.DisplayAlertAsync(user_id_tag);

                //AppDelegate.user_id_tag = "?";
                //PopupNavigation.Instance.PopAsync();


                //session.InvalidateSession();
                //session.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                session.Dispose();
                session.InvalidateSession();
            }

            MainViewModel.GetInstance().Home = new HomeViewModel();
            Xamarin.Forms.Application.Current.MainPage = new MasterPage();
        }
Beispiel #2
0
        /// <summary>
        /// Returns an empty iOS <see cref="NFCNdefMessage"/>
        /// </summary>
        /// <returns>iOS <see cref="NFCNdefMessage"/></returns>
        NFCNdefMessage GetEmptyNdefMessage()
        {
            var records = new NFCNdefPayload[1];

            records[0] = GetEmptyPayload();
            return(new NFCNdefMessage(records));
        }
Beispiel #3
0
        public void ReadValues(NFCNdefMessage message, NSError error)
        {
            try
            {
                if (MainPage.currentPage == "Read From Node") //If current page is read page
                {
                    NFCNdefPayload messageRecord = message.Records[0];

                    ReadNFC.DisplayValues(messageRecord.Payload.ToArray()); //Encrypt nonce and create reply
                    Session.InvalidateSession();
                }
                else // If current page is write page
                {
                    string test = "sjkdsakdjdksad";
                    //byte[] bytes = Encoding.ASCII.GetBytes(test);
                    byte[] bytes = WriteNFC.CreateRequest();


                    NFCNdefPayload writePayload = new NFCNdefPayload(NFCTypeNameFormat.Unknown, NSData.FromArray(new byte[0]), NSData.FromArray(new byte[0]), NSData.FromArray(bytes));
                    NFCNdefMessage writeMessage = new NFCNdefMessage(new NFCNdefPayload[] { writePayload });
                    tag.WriteNdef(writeMessage, delegate { Console.WriteLine("Write"); });
                    System.Threading.Thread.Sleep(300);
                    Session.InvalidateSession();
                }
            }
            catch
            {
                Console.WriteLine("Did not contain a message");
            }
        }
Beispiel #4
0
 public void DidDetectTags(NFCNdefReaderSession session, INFCNdefTag[] tags)
 {
     try
     {
         string user_id_tag = AppDelegate.user_id_tag;
         if (user_id_tag == "?")
         {
             Task task = App.DisplayAlertAsync("¡Primero escanea este Tag para escribirlo!");
             session.InvalidateSession();
             session.Dispose();
             AppDelegate.user_id_tag = "?";
         }
         else
         {
             if ((Convert.ToInt32(user_id_tag) == Convert.ToInt32(MainViewModel.GetInstance().User.UserId.ToString())) || (0 == Convert.ToInt32(user_id_tag)))
             {
                 var nFCNdefTag = tags[0];
                 session.ConnectToTag(nFCNdefTag, CompletionHandler);
                 string         dominio        = "http://boxweb.azurewebsites.net/";
                 string         user           = MainViewModel.GetInstance().User.UserId.ToString();
                 string         tag_id         = "";
                 string         url            = dominio + "index3.aspx?user_id=" + user + "&tag_id=" + tag_id;
                 NFCNdefPayload payload        = NFCNdefPayload.CreateWellKnownTypePayload(url);
                 NFCNdefMessage nFCNdefMessage = new NFCNdefMessage(new NFCNdefPayload[] { payload });
                 nFCNdefTag.WriteNdef(nFCNdefMessage, delegate
                 {
                     Console.WriteLine("ok");
                 });
                 //Task task = App.DisplayAlertAsync(user_id_tag);
             }
             else
             {
                 Task task2 = App.DisplayAlertAsync("¡Este Tag esta vinculado con otro usuario!");
                 session.Dispose();
                 session.InvalidateSession();
                 AppDelegate.user_id_tag = "?";
             }
             AppDelegate.user_id_tag = "?";
             PopupNavigation.Instance.PopAsync();
             session.InvalidateSession();
             _tagSession.InvalidateSession();
             Thread.Sleep(4000);
         }
     }
     catch (Exception ex)
     {
         Console.Write(ex);
         modo_escritura = false;
     }
 }
Beispiel #5
0
        private void ManageWriteTextOperation(NFCNdefReaderSession session, INFCNdefTag[] tags)
        {
            var nFCNdefTag = tags[0];

            session.ConnectToTag(nFCNdefTag, (error) => OnNfcTagTextWriten(this, false));

            NFCNdefPayload payload        = NFCNdefPayload.CreateWellKnownTypePayload(textToWrite, NSLocale.CurrentLocale);
            NFCNdefMessage nFCNdefMessage = new NFCNdefMessage(new NFCNdefPayload[] { payload });

            nFCNdefTag.WriteNdef(nFCNdefMessage, delegate
            {
                OnNfcTagTextWriten(this, true);
            });
        }
Beispiel #6
0
        /// <summary>
        /// Returns ndef payload into MimeType
        /// </summary>
        /// <param name="payload"><see cref="NFCNdefPayload"/></param>
        /// <returns>string</returns>
        public static string ToMimeType(this NFCNdefPayload payload)
        {
            switch (payload.TypeNameFormat)
            {
            case NFCTypeNameFormat.NFCWellKnown:
                if (payload.Type.ToString() == "T")
                {
                    return("text/plain");
                }
                break;

            case NFCTypeNameFormat.Media:
                return(payload.Type.ToString());
            }
            return(null);
        }
Beispiel #7
0
        /// <summary>
        /// Returns NDEF payload
        /// </summary>
        /// <param name="record"><see cref="NFCNdefRecord"/></param>
        /// <returns><see cref="NFCNdefPayload"/></returns>
        NFCNdefPayload GetiOSPayload(NFCNdefRecord record)
        {
            if (record == null)
            {
                return(null);
            }

            NFCNdefPayload payload = null;

            switch (record.TypeFormat)
            {
            case NFCNdefTypeFormat.WellKnown:
                var lang = record.LanguageCode;
                if (string.IsNullOrWhiteSpace(lang))
                {
                    lang = Configuration.DefaultLanguageCode;
                }
                var langData = Encoding.ASCII.GetBytes(lang.Substring(0, 2));
                var payloadData = new byte[] { 0x02 }.Concat(langData).Concat(record.Payload).ToArray();
                payload = new NFCNdefPayload(NFCTypeNameFormat.NFCWellKnown, NSData.FromString("T"), new NSData(), NSData.FromString(Encoding.UTF8.GetString(payloadData), NSStringEncoding.UTF8));
                break;

            case NFCNdefTypeFormat.Mime:
                payload = new NFCNdefPayload(NFCTypeNameFormat.Media, record.MimeType, new NSData(), NSData.FromArray(record.Payload));
                break;

            case NFCNdefTypeFormat.Uri:
                payload = NFCNdefPayload.CreateWellKnownTypePayload(NSUrl.FromString(Encoding.UTF8.GetString(record.Payload)));
                break;

            case NFCNdefTypeFormat.External:
                payload = new NFCNdefPayload(NFCTypeNameFormat.NFCExternal, record.ExternalType, new NSData(), NSData.FromString(Encoding.UTF8.GetString(record.Payload), NSStringEncoding.UTF8));
                break;

            case NFCNdefTypeFormat.Empty:
                payload = GetEmptyPayload();
                break;

            case NFCNdefTypeFormat.Unknown:
            case NFCNdefTypeFormat.Unchanged:
            case NFCNdefTypeFormat.Reserved:
            default:
                break;
            }
            return(payload);
        }
Beispiel #8
0
 private NfcNdefRecord[] GetRecords(NFCNdefPayload[] records)
 {
     NfcNdefRecord[] results = new NfcNdefRecord[records.Length];
     for (var i = 0; i < records.Length; i++)
     {
         NFCNdefPayload record     = records[i];
         var            ndefRecord = new NfcNdefRecord
         {
             TypeFormat = (NfcNdefTypeFormat)record.TypeNameFormat,
             Uri        = records[i].ToUri()?.ToString(),
             MimeType   = records[i].ToMimeType(),
             Payload    = record.Payload.ToByteArray()
         };
         results.SetValue(ndefRecord, i);
     }
     return(results);
 }
Beispiel #9
0
        /// <summary>
        /// Returns NDEF payload
        /// </summary>
        /// <param name="record"><see cref="NFCNdefRecord"/></param>
        /// <returns><see cref="NFCNdefPayload"/></returns>
        NFCNdefPayload GetiOSPayload(NFCNdefRecord record)
        {
            if (record == null)
            {
                return(null);
            }

            NFCNdefPayload payload = null;

            switch (record.TypeFormat)
            {
            case NFCNdefTypeFormat.WellKnown:
                payload = NFCNdefPayload.CreateWellKnownTypePayload(Encoding.UTF8.GetString(record.Payload), NSLocale.CurrentLocale);
                break;

            case NFCNdefTypeFormat.Mime:
                payload = new NFCNdefPayload(NFCTypeNameFormat.Media, record.MimeType, new NSData(), NSData.FromArray(record.Payload));
                break;

            case NFCNdefTypeFormat.Uri:
                payload = NFCNdefPayload.CreateWellKnownTypePayload(NSUrl.FromString(Encoding.UTF8.GetString(record.Payload)));
                break;

            case NFCNdefTypeFormat.External:
                payload = new NFCNdefPayload(NFCTypeNameFormat.NFCExternal, record.ExternalType, new NSData(), NSData.FromString(Encoding.UTF8.GetString(record.Payload), NSStringEncoding.UTF8));
                break;

            case NFCNdefTypeFormat.Empty:
                payload = GetEmptyPayload();
                break;

            case NFCNdefTypeFormat.Unknown:
            case NFCNdefTypeFormat.Unchanged:
            case NFCNdefTypeFormat.Reserved:
            default:
                break;
            }
            return(payload);
        }
Beispiel #10
0
        /// <summary>
        /// Returns Ndef payload into URI
        /// </summary>
        /// <param name="payload"><see cref="NFCNdefPayload"/></param>
        /// <returns><see cref="Uri"/></returns>
        public static Uri ToUri(this NFCNdefPayload payload)
        {
            switch (payload.TypeNameFormat)
            {
            case NFCTypeNameFormat.NFCWellKnown:
                if (payload.Type.ToString() == "U")
                {
                    var uri = payload.Payload.ParseWktUri();
                    return(uri);
                }
                break;

            case NFCTypeNameFormat.AbsoluteUri:
            case NFCTypeNameFormat.Media:
                var content = Encoding.UTF8.GetString(payload.Payload.ToByteArray());
                if (Uri.TryCreate(content, UriKind.RelativeOrAbsolute, out var result))
                {
                    return(result);
                }

                break;
            }
            return(null);
        }
Beispiel #11
0
        /// <summary>
        /// Converte an iOS <see cref="NFCNdefMessage"/> into an array of bytes
        /// </summary>
        /// <param name="message">iOS <see cref="NFCNdefMessage"/></param>
        /// <returns>Array of bytes</returns>
        public static byte[] ToByteArray(this NFCNdefMessage message)
        {
            var records = message?.Records;

            // Empty message: single empty record
            if (records == null || records.Length == 0)
            {
                records = new NFCNdefPayload[] { null };
            }

            var m = new MemoryStream();

            for (var i = 0; i < records.Length; i++)
            {
                var record         = records[i];
                var typeNameFormat = record?.TypeNameFormat ?? NFCTypeNameFormat.Empty;
                var payload        = record?.Payload;
                var id             = record?.Identifier;
                var type           = record?.Type;

                var flags = (byte)typeNameFormat;

                // Message begin / end flags. If there is only one record in the message, both flags are set.
                if (i == 0)
                {
                    flags |= 0x80;                          // MB (message begin = first record in the message)
                }
                if (i == records.Length - 1)
                {
                    flags |= 0x40;                          // ME (message end = last record in the message)
                }
                // cf (chunked records) not supported yet

                // SR (Short Record)?
                if (payload == null || payload.Length < 255)
                {
                    flags |= 0x10;
                }

                // ID present?
                if (id != null && id.Length > 0)
                {
                    flags |= 0x08;
                }

                m.WriteByte(flags);

                // Type length
                if (type != null)
                {
                    m.WriteByte((byte)type.Length);
                }
                else
                {
                    m.WriteByte(0);
                }

                // Payload length 1 byte (SR) or 4 bytes
                if (payload == null)
                {
                    m.WriteByte(0);
                }
                else
                {
                    if ((flags & 0x10) != 0)
                    {
                        // SR
                        m.WriteByte((byte)payload.Length);
                    }
                    else
                    {
                        // No SR (Short Record)
                        var payloadLength = (uint)payload.Length;
                        m.WriteByte((byte)(payloadLength >> 24));
                        m.WriteByte((byte)(payloadLength >> 16));
                        m.WriteByte((byte)(payloadLength >> 8));
                        m.WriteByte((byte)(payloadLength & 0x000000ff));
                    }
                }

                // ID length
                if (id != null && (flags & 0x08) != 0)
                {
                    m.WriteByte((byte)id.Length);
                }

                // Type length
                if (type != null && type.Length > 0)
                {
                    m.Write(type.ToArray(), 0, (int)type.Length);
                }

                // ID data
                if (id != null && id.Length > 0)
                {
                    m.Write(id.ToArray(), 0, (int)id.Length);
                }

                // Payload data
                if (payload != null && payload.Length > 0)
                {
                    m.Write(payload.ToArray(), 0, (int)payload.Length);
                }
            }

            return(m.ToArray());
        }
 public AppleNdefRecord(NFCNdefPayload nativeRecord)
 {
     TypeNameFormat = GetTypeNameFormat(nativeRecord.TypeNameFormat);
     Payload        = nativeRecord.Payload.ToArray();
 }
Beispiel #13
0
        private static NdefRecord ParseNdefRecord(NFCNdefPayload payload)
        {
            string typeString   = System.Text.Encoding.UTF8.GetString(payload.Type.ToArray());
            var    parsedRecord = new NdefRecord()
            {
                Id         = System.Text.Encoding.UTF8.GetString(payload.Identifier.ToArray()),
                RecordType = ParseRecordType(payload.TypeNameFormat, typeString)
            };

            switch (parsedRecord.RecordType)
            {
            case NdefRecordType.Url:
                byte[] dataArray = payload.Payload.ToArray();
                string urlText   = string.Empty;
                switch (dataArray[0])
                {
                case 1:
                    urlText = "http://www.";
                    break;

                case 2:
                    urlText = "https://www.";
                    break;

                case 3:
                    urlText = "http://";
                    break;

                case 4:
                    urlText = "https://";
                    break;
                }
                urlText          += System.Text.Encoding.UTF8.GetString(dataArray, 1, dataArray.Length - 1);
                parsedRecord.Data = urlText;
                break;

            case NdefRecordType.AbsoluteUri:
                parsedRecord.Data = typeString;
                break;

            case NdefRecordType.Text:
                byte[] textDataArray  = payload.Payload.ToArray();
                byte   header         = textDataArray[0];
                int    languageLength = header & 0x1f;
                parsedRecord.Encoding = (header & 0x40) == 0 ? "utf-8" : "utf-16be";
                parsedRecord.Language = System.Text.Encoding.ASCII.GetString(textDataArray, 1, languageLength);
                parsedRecord.Data     = System.Text.Encoding.UTF8.GetString(textDataArray, languageLength + 1, textDataArray.Length - (languageLength + 1));
                break;

            case NdefRecordType.Mime:
                parsedRecord.MediaType = typeString;
                parsedRecord.Data      = payload.Payload.ToArray();
                break;

            default:
                parsedRecord.Data = payload.Payload.ToArray();
                break;
            }

            return(parsedRecord);
        }