wootan's diary

iOSアプリ開発を中心としたエンジニアブログ

iOS11の Password AutoFill に対応してみた

iOS11がリリースされましたね!
アプリの審査がかなりギリギリでしたが、対応したものをリリースすることができました 笑
今回はPassword AutoFillについて書きたいと思います。

Password AutoFillとは?

Password AutoFillはiOS11のあたらしい機能で、
iCloud Keychainに保存されたアカウント/パスワードをアプリ上で自動入力することができます。

保存されたアカウント/パスワードはiOSの設定画面から閲覧、編集することができます。
また、新しく追加することも可能です。
設定 > アカウントとパスワード > AppとWebサイトのパスワード

Password AutoFillが有効な条件

  • Webとアプリにログイン機能がある。
  • ユーザがiCloudキーチェーンを有効にしている。
  • ユーザがSafariを使用している。

Safari以外のブラウザをつかっていたり、サードパーティのパスワードマネージャを使っている場合は使えません...

対応方法 アプリ編

1. TextFieldのContentTypeにUsernameとPasswordを設定する

Swift

if #available(iOS 11.0, *) {
    usernameTextField.textContentType =  UITextContentType.username
    passwordTextField.textContentType = UITextContentType.password
}

Objective-C

if (@available(iOS 11.0, *)) {
    [usernameTextField setContentType:UITextContentTypeUsername];
    [passwordTextField setContentType:UITextContentTypePassword];
}

※StoryboardからContentTypeを設定することもできます。

2. Associated Domainsを有効化する

https://developer.apple.com/account/ios/identifier/bundle

f:id:wootan1102:20170921010410p:plain

※Universal Linksなどに対応していれば対応済のはずです。

3. Associated Domainsを設定する

Xcode > Project > Capabilities > Associated Domains
f:id:wootan1102:20170921010550p:plain

「webcredentials:ドメイン名」を追加

対応方法 サーバ編

apple-app-site-associationファイルを設置する

  • 設置場所はドメインのルート配下
  • httpsでアクセスできるように設定(httpの場合は署名が必要?)
  • jsonファイルだが拡張子はつけない

apple-app-site-association

{
  "webcredentials": {
    "apps": ["TeamID.BundleIdentifier"]
  }
}

※Universal Linksなどに対応していればファイルは設置済のはずです。

対応は以上になります。
Universal Linksなどに対応していれば、アプリもサーバサイドもほとんど工数はかかりません。

実機での動作

TextContentTypeが設定されているTextFieldにフォーカスがあたると鍵アイコンが表示されます。
このアイコンをタップすることでTextFieldにアカウント/パスワードを自動入力することができます。

iOS11の Password AutoFill は工数をあまりかけずに対応することができます!
ちょっとしたことですが、メールアドレスやパスワードを入力しなくても済むようになるので
ユーザの離脱率の改善にもなりそうです。ログイン機能がある場合はぜひ実装してみてください。