Adres defterinden kişilere erişme

Bazen uygulamanızın kullanıcılarının, kişilerinden birini e-posta ya da sohbet uygulaması aracılığıyla seçmesine izin vermek veya kişilerinden hangilerinin daha önce bir sosyal platforma katılmış olduğunu keşfetmelerine yardımcı olmak istersiniz.

Modern yöntem

Kişi Seçici API'sini kullanma

Adres defterindeki kişileri almak için Contact Picker API'yi kullanmanız gerekir. Bu API, kullanıcıların kendi kişi listelerindeki girişleri seçmelerine ve seçilen girişlerin sınırlı ayrıntılarını uygulamanızla paylaşmalarına olanak tanır. name, email, tel, address ve icon gibi çeşitli özellikler mevcuttur. Somut olarak desteklenen özellikler hakkında bilgi edinmek için navigator.contacts.getProperties() çağrısı yapın. Kullanıcının birden çok kişi seçmesine izin vermek için {multiple: true} değerini navigator.contacts.select() öğesinin ikinci parametresi olarak geçirin.

Tarayıcı Desteği

  • x
  • x
  • x
  • x

Kaynak

Contact Picker API, Chrome'un Android 80 ve sonraki sürümlerinde kullanılabilir.

Klasik yöntem

Normal bir form kullanma

Yedek yöntem, kullanıcının kişi bilgilerini girmesine olanak tanıyan normal bir form kullanmaktır.

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • ≤4

Kaynak

Progresif geliştirme

Contact Picker API'si destekleniyorsa statik form alanlarını gizleyin ve bunun yerine bir seçici düğmesi gösterin.

const button = document.querySelector('button');
const name = document.querySelector('.name');
const address = document.querySelector('.address');
const email = document.querySelector('.email');
const tel = document.querySelector('.tel');
const pre = document.querySelector('pre');
const autofills = document.querySelectorAll('.autofill');

if ('contacts' in navigator) {
  button.hidden = false;
  for (const autofill of autofills) {
    autofill.parentElement.style.display = 'none';
  }
  address.parentElement.style.display = 'block';
  button.addEventListener('click', async () => {
    const props = ['name', 'email', 'tel', 'address'];
    const opts = { multiple: false };
    try {
      const [contact] = await navigator.contacts.select(props, opts);
      name.value = contact.name;
      address.value = contact.address;
      tel.value = contact.tel;
      email.value = contact.email;
    } catch (err) {
      pre.textContent = `${err.name}: ${err.message}`;
    }
  });
}

Daha fazla bilgi

Demografi

HTML

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link
      rel="icon"
      href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🎉</text></svg>"
    />
    <title>How to access contacts from the address book</title>
  </head>
  <body>
    <h1>How to access contacts from the address book</h1>

    <p>Ship your order as a present to a friend.</p>
    <button hidden type="button">Open address book</button>
    <pre></pre>

    <label> Name <input class="name" autocomplete="name"></label>

    <label hidden>Address <input class="address" required></label>

    <label>Street <input class="autofill" autocomplete="address-line1" required></label>

    <label>City <input class="autofill" autocomplete="address-level2" required></label>

    <label>State / Province / Region (optional) <input class="autofill" autocomplete="address-level1"></label>

    <label>ZIP / Postal code (optional) <input class="autofill" autocomplete="postal-code"></label>

    <label>Country <input class="autofill" autocomplete="country"></label>

    <label>Email<input class="email" autocomplete="email"></label>

    <label>Telephone<input class="tel" autocomplete="tel"></label>
  </body>
</html>

CSS


        html {
  box-sizing: border-box;
  font-family: system-ui, sans-serif;
  color-scheme: dark light;
}

*, *:before, *:after {
  box-sizing: inherit;
}

body {
  margin: 1rem;
}

input {
  display: block;
  margin-block-end: 1rem;
}
        

JS


        const button = document.querySelector('button');
const name = document.querySelector('.name')
const address = document.querySelector('.address')
const email = document.querySelector('.email')
const tel = document.querySelector('.tel')
const pre = document.querySelector('pre')
const autofills = document.querySelectorAll('.autofill')

if ('contacts' in navigator) {
  button.hidden = false;
  for (const autofill of autofills) {
    autofill.parentElement.style.display = 'none'
  }
  address.parentElement.style.display = 'block';
  button.addEventListener('click', async () => {
    const props = ['name', 'email', 'tel', 'address'];
    const opts = {multiple: false};
    try {
      const [contact] = await navigator.contacts.select(props, opts);
      name.value = contact.name;
      address.value = contact.address;
      tel.value = contact.tel
      email.value = contact.email;
    } catch (err) {
      pre.textContent = `${err.name}: ${err.message}`
    }
  });
}