Kata sandi yang dihasilkan secara otomatis di iOS 12

Jika aplikasi Anda memiliki fungsi registrasi yang mencakup kemampuan atau kebutuhan untuk memasukkan nama pengguna dan kata sandi baru, kemungkinan besar, Anda akan tertarik dengan inovasi di "iOS 12" , yang ingin saya uraikan. Ini adalah layanan yang menciptakan kata sandi baru untuk pengguna, secara otomatis menggantinya di bidang yang diperlukan dan menyimpannya dengan aman di Gantungan Kunci .

Secara otomatis dihasilkan oleh kata sandi sistem adalah yang paling tahan terhadap seleksi (secara acak dihasilkan urutan karakter - disesuaikan dengan pembatasan kustom, tetapi lebih pada nanti), membebaskan pengguna aplikasi dari kebutuhan untuk datang dengan urutan mereka sendiri dan secara fleksibel dikonfigurasi untuk kebutuhan aplikasi tertentu. Dukungan untuk fungsi baru cukup mudah disediakan, namun, bukan tanpa fitur. Tetapi hal pertama yang pertama.

Hak dan Kewajiban


Pertama-tama, aplikasi harus menyatakan keinginannya untuk menggunakan fungsi ini. Dalam daftar Kemampuan Target yang sesuai , Anda harus terlebih dahulu memiliki domain di daftar Domain Terkait . Anehnya, aplikasi harus memiliki "Domain Terkait" agar dapat menggunakan kata sandi yang dihasilkan dan menyimpannya di "Keychain" pengguna (dua fungsi ini saling berhubungan, dan pembuatan tidak dapat digunakan secara terpisah dari penyimpanan).

Jika aplikasi sudah mendukung penggunaan akun bersama dengan situs Anda (yang disebut "Kredensial Bersama") , maka langkah ini sudah ketinggalan. Mungkin juga sudah ketinggalan, dan jika aplikasi mendukung Tautan Universal atau mekanisme lain untuk memproses "URL" eksternal.

Bagaimanapun, setelah menambahkan kompatibilitas ini, aplikasi akan memiliki "Hak" baru .

Selain kompatibilitas yang lebih umum ini, aplikasi juga harus memiliki "Capatibility" "Autofill Credential Provider" - ini memungkinkan aplikasi, dengan seizin pengguna, untuk menggunakan nama pengguna dan kata sandi yang ditawarkan oleh sistem. Menambahkan kompatibilitas ini akan menyebabkan izin Kepemilikan Penyedia Isi Otomatis muncul .
Ngomong-ngomong, penambahan ini dan fitur lainnya hanya tersedia untuk anggota Program Pengembang Apple .
Profil Penyedia yang digunakan oleh aplikasi juga harus menyertakan dua fitur berikut.

Ketergantungan Digunakan


Menambahkan kompatibilitas yang sesuai akan menghasilkan tampilan kerangka kerja AuthenticationServices dalam daftar Linked Frameworks and Libraries dari target yang sesuai. Poin ini memiliki beberapa fitur yang layak disebut.

Pertama, penambahan otomatis kerangka kerja terkait mungkin tidak "bekerja" pertama kali: ketika saya meluncurkan aplikasi pada perangkat nyata dari salinan "Xcode" versi 10.1, aplikasi segera "macet" karena kurangnya "AuthenticationServices". Menghapus kerangka kerja secara manual dan menambahkannya kembali ke daftar komponen terkait menyelesaikan masalah.

Kedua, secara otomatis menambahkan kerangka menandainya sebagai "Diperlukan". Jika aplikasi Anda menyiratkan kemungkinan bekerja "di bawah" versi "iOS" di bawah 12, ini juga akan menyebabkan crash pada tahap peluncuran "dari bawah" sistem operasi versi yang lebih rendah. "AuthenticationServices" hanya tersedia untuk sistem versi 12. Masalah ini diselesaikan dengan menandai kerangka kerja sebagai "Opsional" .

Dukungan Kotak Teks


Untuk mendukung fungsionalitas dengan bidang teks, variabel textContentType protokol textContentType UITextInputTraits . Kelas UITextField , yang kemungkinan besar digunakan untuk memasukkan login dan kata sandi dalam aplikasi, sudah mengimplementasikan persyaratan protokol yang kita butuhkan.

textContentType adalah bidang bertipe UITextContentType yang hanya berisi seperangkat konstanta. Yang kita butuhkan saat ini adalah newPassword , yang digunakan untuk memasukkan kata sandi baru yang sedang ditemukan saat ini (jangan dikacaukan dengan password digunakan untuk memasukkan kata sandi yang ada).

 let passwordTextField = UITextField() if #available(iOS 12, *) { passwordTextField.textContentType = .newPassword } 

Menyetel nilai textContentType dibungkus dengan pemeriksaan aksesibilitas "API" , karena, seperti fungsi umum, konstanta ini hanya tersedia dimulai dengan "iOS 12".

Selain jenis konten, bidang teks harus menyediakan entri data yang aman:

 passwordTextField.isSecureTextEntry = true 

Meskipun aplikasi mungkin menyediakan fungsionalitas menampilkan dan menyembunyikan kata sandi yang dimasukkan yang populer di zaman kita, kata sandi yang dihasilkan hanya akan ditawarkan jika flag true pada saat ini.

Poin yang menarik terhubung dengan jenis konten dari bidang teks: jika tidak ada bidang lain di layar, dengan username jenis konten, kata sandi yang dihasilkan secara otomatis tidak akan ditawarkan. Hal ini disebabkan oleh fakta bahwa fungsi ini tidak hanya didasarkan pada jenis konten bidang teks yang ditentukan, tetapi pada analisis heuristik dari konten layar .

Tampaknya pembuatan kata sandi "mematahkan" logika layar yang memerlukan kata sandi baru untuk dimasukkan dua kali untuk memverifikasi. Setidaknya saya belum menemukan cara untuk menggunakan kedua fungsi ini bersama-sama. Dan sepertinya aku bukan satu-satunya .

Perlu disebutkan bahwa jika login secara semantik adalah alamat email (dan, oleh karena itu, saya benar-benar ingin memiliki jenis keyboard yang sesuai), jenis - jenis keyboard dan konten dapat dikombinasikan:

 let userNameTextField = UITextField() userNameTextField.keyboardType = .emailAddress userNameTextField.textContentType = .username 

Persyaratan Kata Sandi


Seringkali kata sandi pengguna harus mengikuti aturan tertentu (memiliki panjang tertentu, termasuk karakter tertentu, dll.). Aturan-aturan ini dapat ditentukan sehingga sistem memperhitungkannya saat membuat kata sandi. Ini dilakukan melalui properti passwordRules dari protokol UITextInputTraits . Sebagai contoh:

 if #available(iOS 12, *) { passwordTextField.passwordRules = UITextInputPasswordRules(descriptor: "required: upper; required: lower; required: digit; minlength: 8;") } 

Properti ini juga tersedia hanya dimulai dengan "iOS 12".

Jenis properti ini adalah UITextInputPasswordRules . Inisialisasi - menggunakan string deskriptor. Pegangan memiliki sintaksis sederhana dan terdiri dari persyaratan kata sandi sederhana, terdaftar dengan tanda titik koma. Setiap persyaratan adalah pasangan nilai kunci, dipisahkan oleh titik dua. Kuncinya adalah jenis aturan (misalnya, "harus menyertakan" - required ), dan nilainya adalah elemen yang harus mengikuti aturan ini (misalnya, digit - digit ).

Dalam contoh di atas, deskriptor berarti:

  • required: upper - required: upper setidaknya satu huruf kapital;
  • required: lower - sama untuk setidaknya satu huruf kecil;
  • required: digit - sama untuk setidaknya satu digit huruf kecil;
  • minlength: 8 - panjang minimum adalah delapan karakter.

Daftar terperinci dari kunci dan nilai yang mungkin dapat ditemukan dalam artikel bagus yang diterbitkan di situs web NSHipster .

Dan Apple menawarkan asisten kompilasi deskriptor yang lebih nyaman, yang tidak hanya menyediakan cara mudah untuk membangunnya, tetapi juga pemeriksaan deskriptor yang dikompilasi dalam bentuk jumlah contoh yang dihasilkan tidak terbatas. Di sana Anda dapat melihat aturan apa yang diterapkan secara default.

Validasi


Untuk berjaga-jaga, harus diklarifikasi bahwa mekanisme pembuatan kata sandi tidak memberikan validasi data yang dimasukkan oleh pengguna - Anda harus mengurusnya sendiri. Yang tentu saja cukup logis, karena pengguna aplikasi dapat menolak kata sandi yang dihasilkan secara otomatis yang diusulkan atau bahkan melarang pembuatan kata sandi dan pelengkapan otomatis bidang.

Pembuat antarmuka


Apa yang perlu diperhatikan dan dalam semangat zaman kita, semua pengaturan bidang teks yang tercantum dapat diatur dalam "Pembuat Antarmuka" , hingga "Aturan Kata Sandi":

gambar

Pemeriksaan Fungsi


Fungsionalitasnya tidak rumit, tetapi memiliki sejumlah nuansa: ketika Anda mengkonfigurasinya, Anda dapat dengan mudah melupakan sesuatu. Dalam hal ini, dalam majelis "debug", ketika bidang teks yang sesuai diaktifkan, alasannya akan ditampilkan di konsol yang fungsinya saat ini tidak berfungsi.

Sebagai contoh:

 [AutoFill] Cannot show Automatic Strong Passwords for app bundleID: <...> due to error: Cannot save passwords for this app. Make sure you have set up Associated Domains for your app and AutoFill Passwords is enabled in Settings 

Selain itu, Anda harus selalu ingat bahwa jenis fungsi ini adalah di antara tindakan yang memerlukan izin pengguna. Dalam hal ini, diperlukan dua:

1. Gantungan Kunci iCloud;
2. IsiOtomatis.

Kesimpulan


Ini sepertinya adalah semua yang harus diperhatikan sambil memberikan dukungan untuk fungsionalitas baru. Jika seseorang dalam proses mengerjakan ini telah menemukan fitur menarik lainnya, saya akan berkomentar satu kali dan, jika perlu, pastikan untuk melengkapi artikel tersebut.

Fitur ini cukup menarik dan, jika digunakan dengan benar, cukup mampu meningkatkan pengalaman pengguna aplikasi Anda!

Source: https://habr.com/ru/post/id438580/


All Articles