こちらの記事は以前にNewsPicks Tech Guideに投稿された記事をインポートしたものです。元の記事はid:kohei1218によって書かれました。
こんにちは、WWDC三日目に参加しておりますiOSエンジニアの齋藤です。
早くも半分が終了し、寂しさを感じています。
今回のKeynoteでついにApple公式のAuthが出ましたね。その名もSign In with Apple
ひとことで特徴を説明すると、
AppleのIDでアプリにサインインすることができる
2段階認証
Appleはユーザーの情報をトラッキングしない
ということ。
ただいまいち何ができて、なにが利点なのか、そして自動生成メールアドレスとはなんなのか、実装はどのようになるのか、など疑問点多いと思いますのでそこを一つずつ解決していきたいと思います。
初日のKeynoteと公開されている情報を元に中身を見ていきましょう。(AppleのNDAに抵触しているような内容ありましたら即対応しますのでコメント下さい!)
Keynoteの動画はこちら(40分あたりから)
Sign In with Apple
SNSサインイン
いまやメールアドレスやパスワードでサインインするアプリは少なくなってきました。大体のアプリがFacebookやTwitter、最近だとLINEなども増えてきましたがSNSのアカウントを使うのが一般的になってきています。
なぜSNSサインインが一般的か?
一番の利点は登録、運用の手軽さだと思います。
ユーザーにとって会員登録のハードルとはとても高く、入力する項目が増える度に離脱率はみるみる上昇します。
さらに、登録しようとしてもメールアドレスの入力が間違っていて確認メールを受信できなかったり、登録したあと、サインインしようとしても自分のログサインインン情報を忘れてサインインできないなど...
しかし、SNSサインインを追加すればユーザーはワンタップでサインインすることができ、自分の認証情報を忘れるということもありません。ただこのSNSサインインにも問題がありました。それは
- 対応しているSNSを利用していない
- 連携してSNSの情報がとられたり変な投稿をされないか不安
でした。この問題をなんとも上手に解決しているのが今回出てきたSign In with Appleです。
Sign In with Appleではなにができる?
自分のAppleIDを使用してアプリにサインインすることができます。
アプリをインストールしている時点で全てのユーザーがAppleIDを持っているので、Sign In with Appleを使用してサインインできないユーザーはいないということになります。
さらにユーザーがサインインボタンを押したらアプリインストール時の顔認証または指紋認証のおなじみの画面が表示されますので操作に迷うこともなく、1,2秒でサービスにサインインできてしまいます。
SNSへ投稿される心配もありません。
自動生成メールアドレスとは
サービスに登録する際、自分の本メールアドレスを使用したくないときがあると思います。
しかし、FacebookやTwitter認証だと付随するメールアドレスが登録され、結果的に本メールアドレスを知られてしまうことが多いです。
Sign In with Appleでのサインインはメインのメールアドレスか自動で生成されるメールアドレスかを選択することができます。
生成されるメールアドレスはランダムな文字列@privaterelay.appleid.comというようになります。
この生成されたメールアドレス宛てに届いたメールは、本メールアドレスに転送されます。 また設定からSign In with Appleでサインインしているサービス一覧も見ることができて、そこから連携も解除できるようです。
実装
下記developerサイトからサンプルコードを見ることができます。
Adding the Sign In with Apple Flow to Your App
実装自体は至極単純で
ASAuthorizationAppleIDButtonを追加すればAppleが推奨するUIのボタンが生成されます。
let authorizationButton = ASAuthorizationAppleIDButton() authorizationButton.addTarget(self, action: #selector(handleAuthorizationAppleIDButtonPress), for: .touchUpInside) self.loginProviderStackView.addArrangedSubview(authorizationButton)
次にリクエストしたい情報をセットしてASAuthorizationControllerを生成してrequestします.
let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self authorizationController.performRequests()
あとはdelegateで受け取るだけです.
サーバー側もjsのフレームワークが公開されます.
いかがだったでしょうか?
Sign In with Appleを使用すればiOSユーザーにとっては最良のUXのサインイン画面を実装できると思います。
今年中に正式リリースとのことで待ち遠しいですね。
ではまた明日の記事でお会いしましょう!