【解説】Sign In with Apple、Facebook/Googleログインは無くなるのか?

こんにちは、WWDC三日目に参加しておりますiOSエンジニアの齋藤です。
早くも半分が終了し、寂しさを感じています。
今回のKeynoteでついにApple公式のAuthが出ましたね。その名もSign In with Apple

f:id:kohei1218:20190606040941p:plain
引用: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秒でサービスにサインインできてしまいます。

f:id:kohei1218:20190606105117p:plain
引用:Apple

f:id:kohei1218:20190606105124p:plain
引用:Apple

SNSへ投稿される心配もありません。

自動生成メールアドレスとは

サービスに登録する際、自分の本メールアドレスを使用したくないときがあると思います。
しかし、FacebookやTwitter認証だと付随するメールアドレスが登録され、結果的に本メールアドレスを知られてしまうことが多いです。

Sign In with Appleでのサインインはメインのメールアドレス自動で生成されるメールアドレスかを選択することができます。

f:id:kohei1218:20190606110010p:plain
引用:Apple

生成されるメールアドレスはランダムな文字列@privaterelay.appleid.comというようになります。

f:id:kohei1218:20190606110033p:plain
引用:Apple

この生成されたメールアドレス宛てに届いたメールは、本メールアドレスに転送されます。 また設定から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 JS

いかがだったでしょうか?
Sign In with Appleを使用すればiOSユーザーにとっては最良のUXのサインイン画面を実装できると思います。
今年中に正式リリースとのことで待ち遠しいですね。
ではまた明日の記事でお会いしましょう!