Ücretsiz APK oluştur

JavaScript köprü API'si

NFC

window.AndroidNFC ΓΌzerinden bir etiketi okuma ve NDEFReader polyfill'inin arkasΔ±ndaki yazma tarafΔ±.

NDEFReader web standardı#

new NDEFReader() — Web NFC

Örnek

Standart Web NFC: new NDEFReader(), yΓΌklenen uygulamada NFC etiketlerini okur, yazar ve kilitler; Android'de Chrome'un kabul ettiΔi aynΔ± kodla.

DΓΆner deΔer: web standardΔ±nda olduΔu gibi Promise'ler ve reading / readingerror olaylarΔ±. KayΔ±tlar NDEFRecord nesneleridir: recordType ('text', 'url', 'absolute-url', 'mime', 'smart-poster', 'empty', 'unknown' veya 'example.com:thing' gibi harici bir tΓΌr), mediaType (mime kayΔ±tlarΔ±), id, encoding ve lang (metin kayΔ±tlarΔ±) ve data bir DataView olarak. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±n. O olmadan NDEFReader bulunmaz. Γalışma zamanΔ± izin istemi yoktur; navigator.permissions.query({name:'nfc'}) yanΔ±tlar granted.

Etiketleri okuyun. data deΔerini Chrome'daki gibi TextDecoder ile Γ§ΓΆzΓΌn:

function describe(record) {
  if (record.recordType === 'text') return new TextDecoder(record.encoding).decode(record.data);
  if (record.recordType === 'url' || record.recordType === 'absolute-url') return new TextDecoder().decode(record.data);
  if (record.recordType === 'mime') return record.mediaType + ' (' + record.data.byteLength + ' bytes)';
  return record.recordType;
}

var scanStop = null;

document.getElementById('read').addEventListener('click', async function () {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  var reader = new NDEFReader();
  scanStop = new AbortController();
  reader.onreading = function (e) {
    showStatus('Tag ' + e.serialNumber + ': ' + e.message.records.map(describe).join(' | '));
  };
  reader.onreadingerror = function () { showStatus('That tag holds no NFC data this phone can read.'); };
  try {
    await reader.scan({ signal: scanStop.signal });
    showStatus('Hold a tag to the back of the phone.');
  } catch (err) {
    showStatus('NFC error: ' + err.name + ' ' + err.message);   // NotReadableError = NFC switched off
  }
});

document.getElementById('stop').addEventListener('click', function () {
  if (scanStop) scanStop.abort();   // the standard way to stop scanning
});

Metin veya baΔlantΔ± yazΔ±n. Promise, kullanΔ±cΔ± bir etikete dokunduktan sonra Γ§ΓΆzΓΌlΓΌr:

async function writeTag(kind, value) {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  var reader = new NDEFReader();
  showStatus('Tap a tag to write it...');
  try {
    if (kind === 'text') await reader.write(value);   // same as { records: [{ recordType: 'text', data: value }] }
    else await reader.write({ records: [{ recordType: 'url', data: value }] }, { overwrite: false });
    showStatus('Tag written.');
  } catch (err) {
    showStatus('Write failed: ' + err.name + ' ' + err.message);   // NotAllowedError: read-only, or overwrite:false on a used tag
  }
}

Bir etiketi sonsuza dek kilitleyin. makeReadOnly() geri alΔ±namaz β ΓΆnce sorun:

async function lockTag() {
  if (!('NDEFReader' in window)) return;
  if (!confirm('Lock the next tag you tap? It can never be changed again.')) return;
  try { await new NDEFReader().makeReadOnly(); showStatus('Tag locked.'); }
  catch (err) { showStatus('Lock failed: ' + err.message); }
}

Notlar: write iΓ§in kayΔ±t tΓΌrleri: text (dize veya encoding ile bayt), url ve absolute-url (dize), mime (bayt + mediaType), smart-poster ({records: [...]}), 'domain:thing' harici tΓΌrΓΌ (bayt veya {records: [...]}), unknown (bayt) ve empty. DΓΌz bir dize metin kaydΔ± yazar; dΓΌz baytlar application/octet-stream mime kaydΔ± yazar. YalnΔ±zca scan() Γ§aΔΔ±ran okuyucular reading olaylarΔ±nΔ± alΔ±r; signal ΓΌzerinde AbortController.abort() o okuyucuyu durdurur (standartta stop() yoktur). readingerror, NFC verisi tutamayan bir etiket iΓ§in tetiklenir. Telefon aynΔ± anda YALNIZCA BΔ°R etiket iΕlemi bekler: biri beklerken yeni bir write() veya makeReadOnly() onun yerini alΔ±r ve deΔiΕtirilen Γ§aΔrΔ± AbortError ile reddedilir (Chrome sΔ±raya alΔ±rdΔ±). write() / makeReadOnly() ΓΌzerindeki bir signal beklemeyi iptal eder. Hatalar: NotSupportedError (NFC yok, etiket NDEF tutamΔ±yor veya Γ§ok kΓΌΓ§ΓΌk), NotReadableError (NFC kapalΔ±), NotAllowedError (salt okunur etiket veya kayΔ±tlΔ± bir etikette overwrite: false), NetworkError (etiket uzaklaΕtΔ±), TypeError (standardΔ±n izin vermediΔi bir kayΔ±t). NDEFReader ana sayfada vardΔ±r, iframe'lerin iΓ§inde yoktur.

__nfcCancelWrite köprü#

window.WebToApk.__nfcCancelWrite()

Bekleyen yazma/kilitleme iΕlemini iptal eder (polyfill, iΕlemin `signal` deΔeri iptal edildiΔinde bunu Γ§aΔΔ±rΔ±r).

Örnek

SΔ±raya alΔ±nmΔ±Ε bir NFC yazma veya kilitleme iΕlemini siler, bΓΆylece sonraki etiket dokunuΕu normal Εekilde okunur. Sayfalar web standardΔ± ΓΌzerinden iptal eder β bir AbortController signal β ve NDEFReader polyfill'i bunu onlar iΓ§in Γ§aΔΔ±rΔ±r.

DΓΆner deΔer: hiΓ§bir Εey. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.

UygulamanΔ±n dikkate aldΔ±ΔΔ± standart yol β bekleyen write() Εununla reddedilir: AbortError:

var controller = null;

async function writeWithCancel(text) {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  controller = new AbortController();
  showStatus('Tap a tag to write it... (or press Cancel)');
  try {
    await new NDEFReader().write(text, { signal: controller.signal });
    showStatus('Tag written.');
  } catch (err) {
    showStatus(err.name === 'AbortError' ? 'Cancelled.' : 'Write failed: ' + err.message);
  }
}

document.getElementById('cancel').addEventListener('click', function () {
  if (controller) controller.abort();
});

Zamanla etiket gelmezse kendiliΔinden vazgeΓ§in; sinyali iptal eden bir zamanlayΔ±cΔ± aynΔ± Εekilde iptal eder:

async function writeWithTimeout(url, ms) {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  var controller = new AbortController();
  var timer = setTimeout(function () { controller.abort(); }, ms);
  showStatus('Tap a tag within ' + Math.round(ms / 1000) + ' seconds...');
  try {
    await new NDEFReader().write({ records: [{ recordType: 'url', data: url }] }, { signal: controller.signal });
    showStatus('Tag written.');
  } catch (err) {
    showStatus(err.name === 'AbortError' ? 'Timed out. Tap Write to try again.' : 'Write failed: ' + err.message);
  } finally {
    clearTimeout(timer);
  }
}

KullanΔ±cΔ± ekrandan ayrΔ±ldΔ±ΔΔ±nda bekleyen bir kilidi (veya yazmayΔ±) iptal edin; bΓΆylece sonraki bir dokunuΕ bir etiketi deΔiΕtirmez:

var pendingTagOp = null;

window.addEventListener('hashchange', function () {
  if (pendingTagOp) { pendingTagOp.abort(); pendingTagOp = null; }
});

document.getElementById('lock').addEventListener('click', function () {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  if (pendingTagOp) pendingTagOp.abort();
  var controller = pendingTagOp = new AbortController();
  showStatus('Tap the tag to lock it...');
  new NDEFReader().makeReadOnly({ signal: controller.signal })
    .then(function () { showStatus('Tag locked.'); })
    .catch(function (err) { if (err.name !== 'AbortError') showStatus('Lock failed: ' + err.message); })
    .finally(function () { if (pendingTagOp === controller) pendingTagOp = null; });
});

Notlar: WebToApk.__nfcCancelWrite() iΕlevini kendiniz Γ§aΔΔ±rmayΔ±n: doΔrudan Γ§aΔrΔ±lΔ±rsa yerel beklemeyi bΔ±rakΔ±r ama sayfanΔ±n Promise'ini sonuΓ§landΔ±ramaz. signal ikisini de yapar. Δ°ptal etmek ayrΔ±ca sΔ±raya alΔ±nmΔ±Ε makeReadOnly().

__nfcMakeReadOnly köprü#

window.WebToApk.__nfcMakeReadOnly(): String

Sonraki etiket dokunuΕΔ± iΓ§in kalΔ±cΔ± bir kilit (`NDEFReader.makeReadOnly()`) sΔ±raya alΔ±r; iΕlem kimliΔini dΓΆndΓΌrΓΌr, bu uygulamada NFC kapalΔ±ysa "" dΓΆndΓΌrΓΌr.

Örnek

NDEFReader.makeReadOnly() arkasΔ±ndaki iΓ§ aktarΔ±m. Sayfalar new NDEFReader().makeReadOnly() kullanΔ±r; bunu asla doΔrudan Γ§aΔΔ±rmayΔ±n.

DΓΆner deΔer: (makeReadOnly ΓΌzerinden) kullanΔ±cΔ± bir etiketi dokundurup etiket kilitlendikten sonra Γ§ΓΆzΓΌlen veya DOMException ile reddedilen bir Promise. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.

Kilitleme kalΔ±cΔ±dΔ±r. Γnce etiketi yazΔ±n, sonra kilitleyin ve ikisinden ΓΆnce de kullanΔ±cΔ±ya sorun:

document.getElementById('publish-tag').addEventListener('click', async function () {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  if (!confirm('Write and lock this tag? A locked tag can never be changed.')) return;
  var reader = new NDEFReader();
  try {
    showStatus('Tap the tag to write it...');
    await reader.write({ records: [{ recordType: 'url', data: 'https://example.com/item/42' }] });
    showStatus('Now tap the same tag again to lock it...');
    await reader.makeReadOnly();
    showStatus('Tag written and locked.');
  } catch (err) {
    showStatus('Failed: ' + err.message);
  }
});

Zaten yazΔ±lmΔ±Ε bir etiketi kilitleyin ve 20 saniye iΓ§inde etiket gelmezse vazgeΓ§in:

async function lockTag() {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  if (!confirm('Lock this tag for good? It can never be changed again.')) return;
  var controller = new AbortController();
  var timer = setTimeout(function () { controller.abort(); }, 20000);
  showStatus('Tap the tag to lock it...');
  try {
    await new NDEFReader().makeReadOnly({ signal: controller.signal });
    showStatus('Tag locked.');
  } catch (err) {
    if (err.name === 'AbortError') showStatus('No tag was tapped. Try again when ready.');
    else if (err.name === 'NotAllowedError') showStatus('This kind of tag cannot be locked.');
    else showStatus('Lock failed: ' + err.message);
  } finally {
    clearTimeout(timer);
  }
}

Γnce bir etiketi okuyun ve yalnΔ±zca beklenen baΔlantΔ±yΔ± iΓ§eriyorsa kilitlemeyi ΓΆnerin:

async function checkThenLock(expectedUrl) {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  var reader = new NDEFReader();
  var scanning = new AbortController();
  var lockBtn = document.getElementById('lock-btn');
  reader.onreading = function (e) {
    var rec = e.message.records.find(function (r) { return r.recordType === 'url'; });
    var url = rec ? new TextDecoder().decode(rec.data) : null;
    showStatus(url ? 'Tag points to ' + url : 'This tag holds no link.');
    lockBtn.disabled = url !== expectedUrl;
  };
  await reader.scan({ signal: scanning.signal });
  showStatus('Hold the tag to the phone to check it.');

  lockBtn.onclick = async function () {
    if (!confirm('Lock this tag? It can never be changed again.')) return;
    scanning.abort();
    showStatus('Tap the tag again to lock it...');
    try { await reader.makeReadOnly(); showStatus('Tag locked.'); }
    catch (err) { showStatus('Lock failed: ' + err.message); }
  };
}

Notlar: Her adΔ±m kendi dokunuΕunu gerektirir. Γaδrı bir iΕlem kimliΔi dΓΆndΓΌrΓΌr ve sonuΓ§ window.__appmintNfcDone ΓΌzerinden gelir. Reddedilme nedenleri: NotSupportedError "Etiket NDEF desteklemiyor", NotAllowedError "Bu etiket salt okunur yapΔ±lamaz" (birΓ§ok etiket kilitlenemez), etiket uzaklaΕtΔ±ΔΔ±nda NetworkError. Bir kilit beklerken write() baΕlatmak kilidin yerini alΔ±r ve kilit AbortError ile reddedilir. makeReadOnly({ signal }) iΓ§ine verilen bir signal beklemeyi iptal eder.

__nfcState köprü#

window.WebToApk.__nfcState(): String

"on", "off" (NFC telefon ayarlarΔ±ndan kapatΔ±lmΔ±Ε) veya "none" (NFC yok ya da bu uygulamada etkin deΔil) β `NDEFReader.scan()` ΓΆnce bunu denetler.

Örnek

NDEFReader.scan() arkasΔ±ndaki iΓ§ denetim: bu uygulamanΔ±n NFC'yi Εu anda kullanΔ±p kullanamayacaΔΔ±. Sayfalar scan() Γ§aΔΔ±rΔ±r ve onun reddini okur.

DΓΆner deΔer: 'on', 'off' (NFC telefon ayarlarΔ±ndan kapatΔ±lmΔ±Ε) veya 'none' (telefonda NFC yok ya da uygulama Web NFC DesteΔi olmadan derlenmiΕ). Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.

Standart yol β scan() aynΔ± yanΔ±tla reddedilir:

async function startReading() {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  try {
    await new NDEFReader().scan();
    showStatus('Hold a tag to the back of the phone.');
  } catch (err) {
    if (err.name === 'NotReadableError') showStatus('Turn on NFC in the phone settings, then try again.');
    else if (err.name === 'NotSupportedError') showStatus('This phone has no NFC.');
    else showStatus('NFC error: ' + err.message);
  }
}

Ekran aΓ§Δ±ldΔ±ΔΔ±nda bir kez denetleyin; NFC paneli, "NFC'yi aΓ§Δ±n" ipucu veya NFC'yi tamamen gizleme arasΔ±nda seΓ§im yapmak iΓ§in. YoklamanΔ±n taramasΔ±nΔ± hemen iptal etmek hiΓ§bir Εeyin Γ§alΔ±ΕΔ±r durumda kalmamasΔ±nΔ± saΔlar:

async function nfcStatus() {
  if (!('NDEFReader' in window)) return 'none';
  var probe = new AbortController();
  try {
    await new NDEFReader().scan({ signal: probe.signal });
    return 'on';
  } catch (err) {
    return err.name === 'NotReadableError' ? 'off' : 'none';
  } finally {
    probe.abort();
  }
}

async function refreshNfcUi() {
  var state = await nfcStatus();
  document.getElementById('nfc-panel').hidden = state !== 'on';
  document.getElementById('nfc-off-hint').hidden = state !== 'off';
}

refreshNfcUi();
document.addEventListener('visibilitychange', function () {
  if (document.visibilityState === 'visible') refreshNfcUi(); // back from the phone settings
});

Etiketleri yalnΔ±zca bir ekran aΓ§Δ±kken okuyun ve boΕ ya da okunamayan bir etiketi NFC'nin kapalΔ± olmasΔ±ndan ayΔ±rt edin:

var tagScreen = null;

async function openTagScreen() {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  tagScreen = new AbortController();
  var reader = new NDEFReader();
  reader.onreading = function (e) {
    var n = e.message.records.length;
    showStatus(n ? 'Tag ' + e.serialNumber + ' holds ' + n + ' record(s).' : 'This tag is empty.');
  };
  reader.onreadingerror = function () { showStatus('This tag cannot be read. Try another one.'); };
  try {
    await reader.scan({ signal: tagScreen.signal });
    showStatus('Hold a tag to the back of the phone.');
  } catch (err) {
    showStatus(err.name === 'NotReadableError' ? 'NFC is off. Turn it on in the phone settings.' : 'NFC error: ' + err.message);
  }
}

function closeTagScreen() {
  if (tagScreen) { tagScreen.abort(); tagScreen = null; }
}

Notlar: Polyfill iΓ§in altyapΔ±dΔ±r; scan() kullanΔ±n. window.AndroidNFC.startScan() aynΔ± soruyu mantΔ±ksal deΔerle yanΔ±tlar ve NFC kapalΔ±yken "LΓΌtfen NFC'yi aΓ§Δ±n" mesajΔ±nΔ± gΓΆsterir.

__nfcWrite köprü#

window.WebToApk.__nfcWrite(messageJson: String): String

[messageJson] deΔerini (`NDEFReader.write()` ile oluΕturulan `{records:[β¦], overwrite}`) sonraki etiket dokunuΕu iΓ§in sΔ±raya alΔ±r ve iΕlem kimliΔini dΓΆndΓΌrΓΌr; bu uygulamada NFC etkin deΔilse "" dΓΆndΓΌrΓΌr.

Örnek

NDEFReader.write(message) arkasΔ±ndaki iΓ§ aktarΔ±m. Sayfalar new NDEFReader().write(...) kullanΔ±r; bunu asla doΔrudan Γ§aΔΔ±rmayΔ±n.

DΓΆner deΔer: (write ΓΌzerinden) kullanΔ±cΔ± bir etiketi dokundurup etiket yazΔ±ldΔ±ktan sonra Γ§ΓΆzΓΌlen veya DOMException ile reddedilen bir Promise. Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±.

document.getElementById('write-table-tag').addEventListener('click', async function () {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  showStatus('Tap a tag to write it...');
  try {
    await new NDEFReader().write({
      records: [
        { recordType: 'url', data: 'https://example.com/menu' },
        { recordType: 'text', data: 'Table 12', lang: 'en' },
        { recordType: 'mime', mediaType: 'application/json',
          data: new TextEncoder().encode(JSON.stringify({ table: 12 })) }
      ]
    });
    showStatus('Tag written.');
  } catch (err) {
    showStatus('Write failed: ' + err.message);
  }
});

YalnΔ±zca boΕ bir etikete yazΔ±n, bΓΆylece veri iΓ§eren bir etiket yanlΔ±ΕlΔ±kla deΔiΕtirilmez:

async function writeToBlankTag(url) {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  showStatus('Tap a blank tag...');
  try {
    await new NDEFReader().write(
      { records: [{ recordType: 'url', data: url }] },
      { overwrite: false }
    );
    showStatus('Tag written.');
  } catch (err) {
    if (err.name === 'NotAllowedError') showStatus('That tag already holds data or is locked. Use a blank tag.');
    else if (err.name === 'NetworkError') showStatus('Hold the tag still until it is written.');
    else showStatus('Write failed: ' + err.message);
  }
}

AkΔ±llΔ± bir poster yazΔ±n; bir baΔlantΔ±yΔ± baΕlΔ±ΔΔ±yla birlikte tek bir kayΔ±t olarak:

document.getElementById('write-poster').addEventListener('click', async function () {
  if (!('NDEFReader' in window)) { showStatus('NFC is not available in this app.'); return; }
  showStatus('Tap a tag to write the poster...');
  try {
    await new NDEFReader().write({
      records: [{
        recordType: 'smart-poster',
        data: { records: [
          { recordType: 'url', data: 'https://example.com/events/spring-fair' },
          { recordType: 'text', data: 'Spring Fair tickets', lang: 'en' }
        ] }
      }]
    });
    showStatus('Poster tag written.');
  } catch (err) {
    showStatus(err.name === 'NotSupportedError' ? 'This tag is too small or cannot hold NFC data.' : 'Write failed: ' + err.message);
  }
});

Notlar: Polyfill kayΔ±tlarΔ± denetler, {records:[{recordType, id, data(base64), encoding, lang, mediaType, records?}], overwrite} biΓ§imine Γ§evirir ve JSON dizesini buraya iletir. Γaδrı bir iΕlem kimliΔi dΓΆndΓΌrΓΌr; sonuΓ§ sayfaya window.__appmintNfcDone(id, errorName, message) ΓΌzerinden geri gelir, bΓΆylece deΔiΕtirilmiΕ bir yazmanΔ±n yanΔ±tΔ± daha yeni bir yazmayΔ± asla sonuΓ§landΔ±rmaz. BiΓ§imlendirilmemiΕ etiketler ΓΆnce biΓ§imlendirilir. Reddedilme nedenleri: NotAllowedError ("Etiket salt okunur" veya overwrite false iken kayΔ±tlΔ± bir etiket), NotSupportedError ("Etiket NDEF desteklemiyor", "Etiket Γ§ok kΓΌΓ§ΓΌk (N bayt kullanΔ±labilir)"), NetworkError (etiket uzaklaΕtΔ±), SyntaxError (etiket biΓ§iminin tutamayacaΔΔ± bir kayΔ±t). Uygulama ayrΔ±ca kendi kΔ±sa "Yazmaya hazΔ±r" ve "NFC etiketi yazΔ±ldΔ±" mesajlarΔ±nΔ± gΓΆsterir.

startScan köprü#

window.AndroidNFC.startScan(): Boolean

Eski kullanΔ±labilirlik yoklamasΔ±; yalnΔ±zca oluΕturan kiΕi NFC'yi etkinleΕtirdiΔinde bulunur. GerΓ§ek NFC iΕleri standart NDEFReader polyfill'i (window.WebToApk.__nfc*) ΓΌzerinden yΓΌrΓΌr ve bir sayfanΔ±n kullanmasΔ± gereken budur; bu yalnΔ±zca adaptΓΆrΓΌn aΓ§Δ±k olup olmadΔ±ΔΔ±nΔ± bildirir.

Kendi baΕΔ±na deΔil, grubu Web NFC ΓΌzerinden aΓ§Δ±klanΔ±r.

Örnek

Telefonun NFC'sinin aΓ§Δ±k olup olmadΔ±ΔΔ±nΔ± sΓΆyler. window.AndroidNFC ΓΌzerindedir, window.WebToApk ΓΌzerinde deΔil ve bir etiketi okumaz β okuma Εununla yapΔ±lΔ±r NDEFReader.

DΓΆner deΔer: telefonda NFC varsa ve aΓ§Δ±ksa (eΕzamanlΔ± olarak) true; telefonda NFC yoksa veya NFC kapalΔ±ysa false (bu durumda uygulama ayrΔ±ca kΔ±sa bir "LΓΌtfen NFC'yi aΓ§Δ±n" mesajΔ± gΓΆsterir). Gerekenler: derleme yaparken AdΔ±m 4'te (EriΕim) Web NFC DesteΔi aΓ§Δ±k olmalΔ±; aksi halde window.AndroidNFC bulunmaz.

Bir NFC dΓΌΔmesi gΓΆstermeden ΓΆnce denetleyin:

function nfcReady() {
  if (!window.AndroidNFC || typeof window.AndroidNFC.startScan !== 'function') return false;
  return window.AndroidNFC.startScan();
}

document.getElementById('scan-tag').addEventListener('click', async function () {
  if (!nfcReady()) { showStatus('Turn on NFC in the phone settings, then try again.'); return; }
  var reader = new NDEFReader();
  reader.addEventListener('reading', function (e) { showStatus('Tag ' + e.serialNumber); });
  await reader.scan();
  showStatus('Hold a tag to the back of the phone.');
});

Yazmadan hemen ΓΆnce denetleyin: NFC kapalΔ±yken yazma hiΓ§ gelmeyecek bir dokunuΕu bekler, startScan() ise hemen yanΔ±t verir ve uygulamanΔ±n "LΓΌtfen NFC'yi aΓ§Δ±n" mesajΔ±nΔ± gΓΆsterir:

document.getElementById('write-pass').addEventListener('click', async function () {
  if (!window.AndroidNFC || typeof window.AndroidNFC.startScan !== 'function') {
    showStatus('NFC is not available in this app.');
    return;
  }
  if (!window.AndroidNFC.startScan()) { showStatus('NFC is off, or this phone has no NFC.'); return; }
  showStatus('Tap a tag to write it...');
  try {
    await new NDEFReader().write('Visitor pass #1042');
    showStatus('Tag written.');
  } catch (err) {
    showStatus('Write failed: ' + err.message);
  }
});

KullanΔ±cΔ± geri dΓΆnΓΌp "AΓ§tΔ±m" dΓΌΔmesine dokunduΔunda yeniden denetleyin:

var retry = document.getElementById('nfc-retry');
retry.addEventListener('click', function () {
  if (!window.AndroidNFC || typeof window.AndroidNFC.startScan !== 'function') {
    showStatus('NFC is not available in this app.');
    return;
  }
  if (window.AndroidNFC.startScan()) {
    retry.hidden = true;
    document.getElementById('nfc-panel').hidden = false;
    startReading(); // your own NDEFReader.scan() code
  } else {
    showStatus('NFC is still off, or this phone has no NFC.');
  }
});

Notlar: window.AndroidNFC, sayfadaki ilk betikten itibaren vardΔ±r. KullanΔ±cΔ± ayarlardan NFC'yi aΓ§Δ±p geri dΓΆndΓΌΔΓΌnde etiket okuma kendiliΔinden baΕlar.

Her belge derlemesinde uygulama çalışma zamanından ve örnek dosyalarından oluşturulur. Markdown olarak okuyun · Tüm aileler.

22.10.2026 tarihinde yayınlanan köprüyle karşılaştırılarak kontrol edildi.