目次
Session概要
アプリにAutoFillを導入し、フィールドに情報を簡単にかつプライバシーを保ち、安全に記入できるようにしましょう。あなたのアプリの機能に沿ったより良い候補を提案できいるよう、システムに手を加えましょう。
例えば、ナビゲーションアプリからのスマートロケーション提案を提供できますし、プライバシーを保ったまま、QuickTypeバーから連絡先情報をフィールドに插入できるようにもなります。
MacOS Big Surでは、AutoFillはSafariを飛び出しアプリにも拡張されました。
この機能を利用し、あなたのmacOSアプリのユーザに、便利さとより高いセキュリティ、スムーズな体験を提供するための小さな変更について学びましょう https://developer.apple.com/videos/play/wwdc2020/10115/
現住所を利用してAutoFillを行う方法
- ナビのアプリには住所入力のテキストフィールドがあります
- テキストフィールドをタップした時にiOSが自動的に適切な場所の候補を提案します
- QuickTypeバーに候補が表示されるので、ユーザは1回タップするだけで住所を入力可能
- カレンダーで予定しているイベントが近づくと、キーボードがイベントの場所を提案します
- 帰宅したい場合には、自宅の住所が自動的に提案されます

どのようにアプリに実装するか
- TextFieldに
UITextContentType
APIを設定するだけで良い - 一つのUITextContentTypeプロパティに複数のtypeを設定することはできない
- そのため、アプリの用途に合わせて厳密に設定する必要がある
- 例えば、ナビゲーションアプリなら全ての住所(.fullStreetAddress)が必要であり、天気アプリなら市(.addressCity)までで十分
let streetAddressTextField = UITextField()
steetAddressTextField.textContentType = .fullStreetAddress
//Other address granularity:
// .addressCity, .addressCityAndState, .addressState, .countryName
// .postalCode, .streetAddressLine1, .streetAddressLine2, .sublocality
UITextContentTypeで設定可能な種類
- URL
- addressCity
- 市(都市)の名前
- addressCityAndState
- 市町村名
- addressState
- 州
- countryName
- fullStreetAdress
- creditCardNumber
- familyName
- 姓
- givenName
- 名
- jobTitle
- 仕事、職種
- location
- 関心のある座標/場所、住所
- middleName
- name
- namePrefix
- Dr. や Mr. などの接頭辞
- nameSuffix
- Jr. などの接尾辞
- nickname
- organizationName
- 組織名
- postalCode
- 郵便番号
- streetAddressLine1
- 通りの住所の最初の行(日本では市区町村名までかな??)
- streetAddressLine2
- 通りの住所の2行目(具体的なマンション名など)
- sublocality
- locality の中で一番大きい民生的な地域であることを示しています
- telephoneNumber
- username
- password
- newPassword
- oneTimeCode
- SMSで送られた2段階認証用one time codeなど
プライバシーについて
- Appleは「何を」「誰と」共有するかは完全に個人に委ねられるべきであるという考え
- 例えば、連絡先アプリの情報を別アプリから取得する場合に、ユーザにアクセス権限を求めたりするが、オススメは
Contact Picker
APIを使用して連絡先へアクセスしないようにすること。そして、ユーザが共有した特定のデータだけアプリに渡されるのでデータの共有を限定的にすることが可能 - iOS 14ではQuickTypeキーボードにより、テキストフィールドへの入力と同時に連絡先を提案することが可能

// メールや電話番号のAutoFill設定をするだけで連絡先の自動入力が可能
// AutoFill contacts' email address
let emailTextField = UITextField()
emailTextField.textContentType = .emailAddress
// AutoFill contacts' phone number
let phoneTextField = UITextField()
phoneTextField.textContentType = .telephoneNumber
// AutoFill contacts' address
let streetAddressTextField = UITextField()
steetAddressTextField.textContentType = .fullStreetAddress
Password AutoFill
- ログイン時にユーザ名とパスワードを入力する必要があるアプリで有用
- iCloudキーチェーンなどに保存されたユーザ名とパスワードを自動的に提案してくれる

let userTextField = UITextField()
userTextField.textContentType = .username
let passwordTextField = UITextField()
passwordTextField.textContentType = .password
セキュリティコードのAutoFill

let securityCodeTextField = UITextField()
securityCodeTextField.textContentType = .oneTimeCode
強力なパスワードのAutoFill
- 強力なパスワードを自動生成して提案し、iCloudキーチェーンに自動保存することで、ユーザの利便性とアプリのセキュリティ強化となる
- 詳細はWWDC2018の Automatic Strong Passwords を参照

let userTextField = UITextField()
userTextField.textContentType = .username
let newPasswordTextField = UITextField()
newPasswordTextField.textContentType = .newPassword
macOSでのセキュリティコード AutoFill
- macOS Big Surからセキュリティコード自動入力が搭載
- AppKitで作成したアプリは自動入力が完全にサポートされるようになった

let usernameTextField = NSTextField()
usernameTextField.contentType = .username
let passwordField = NSSecureTextField()
passwordField.contentType = .password
let securityCodeTextField = NSTextField()
securityCodeTextField.contentType = .oneTimeCode
