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(); }
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"); } }
private void OnNdefRed(NFCNdefMessage message, NSError error) { if (message == null) { OnNfcTagRead?.Invoke(this, null); return; } NfcTagInfo tagInfo = new NfcTagInfo(); tagInfo.Records = GetRecords(message.Records); OnNfcTagRead?.Invoke(this, tagInfo); }
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; } }
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); }); }
public async Task WriteNdefAsync(NdefMessage ndefMessage) { try { await _lockSemaphore.WaitAsync(); if (!_isSessionEnabled) { throw new Exception("NFC is not enabled"); } var tcs = new TaskCompletionSource <object>(); var iosNdefMessage = new NFCNdefMessage(ndefMessage.ToList().Select(record => new NFCNdefPayload ( format: (NFCTypeNameFormat)record.TypeNameFormat, type: NSData.FromArray(record.Type), identifier: NSData.FromArray(record.Id), payload: NSData.FromArray(record.Payload) )).ToArray()); _tag.WriteNdef(iosNdefMessage, (error) => { if (error != null) { throw new Exception(error.Description); } tcs.SetResult(null); }); await tcs.Task; } finally { _lockSemaphore.Release(); } }
/// <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()); }
/// <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); } }); }
public NfcDefTag(NFCNdefMessage tag) { Records = tag.Records.Select(r => new AppleNdefRecord(r)).ToArray(); }
public NfcTag(NFCNdefMessage tag, IEnumerable <NFCNdefPayload> rcs) { Records = rcs.Select(r => new IOSNfcRecord(r)).ToArray(); }