Webエンジニアが普段の開発で得たことをつぶやいていきます
Webエンジニアの独り言
  • ホーム
  • プログラム
  • デザイン
  • マネジメント

Sign In with Appleの実装 Swift編

プログラム
TwitterFacebookはてブPocketLINE
2020.01.20

今回はSign In with Appleの対応のSwiftの実装について説明していきます。敷居が高そうに感じますが、Appleが必ず対応しろよというだけあって、簡単に実装ができるようになっていました。

スポンサーリンク
  1. Xcodeの設定
  2. ボタンの設置
  3. APIへリクエストする
    1. スコープについて
  4. Delegateを設定する
  5. 最後に
  6. Sign In with Apple関連記事

Xcodeの設定

TARGET -> Signing & Capadilitiesを開きます。左上の +Capabilityを選択し、Sign In with Appleを追加する。

ボタンの設置

ストーリーボードを使う場合はストーリーボード上でボタンを追加し、アクションを設定します。ボタンのデザインは下記のルールがありますのでそれに沿って実装してください。
iOS13以下は対象外なので、非表示の処理も忘れずに入れておいてください。

Introduction - Technologies - Human Interface Guidelines - Design - Apple Developer
Sign in with Apple provides a fast, private way to sign into apps and websites, giving people a consistent experience they can trust and the convenience of not ...
developer.apple.com

APIへリクエストする

providerを生成し、APIへリクエストします。リクエストする際にスコープも合わせて設定します。

import AuthenticationServices

@objc
func authorizationAppleID() {
  // iOS13以上の場合のみ処理する
  if #available(iOS 13.0, *) {
    // providerの生成
    let appleIDProvider = ASAuthorizationAppleIDProvider()
    let request = appleIDProvider.createRequest()
    // 取得するスコープの設定 .fullName:ユーザー名 .email:ユーザーのメールアドレス
    request.requestedScopes = [.fullName, .email]

    let authorizationController = ASAuthorizationController(authorizationRequests: [request])
    authorizationController.delegate = self
    authorizationController.performRequests()
  }
}

スコープについて

AppleのAPIからは下記のデータを取得することができます。APIへリクエストする際にどのデータを取得するかを選択します。
ユーザー名もメールアドレスもユーザー名も本名と正式なメールアドレスを取得できるわけではないことに注意が必要です。

スコープ名内容備考
fullNameユーザー名ユーザーが登録時にサービスへ渡すユーザー名を設定することができる
emailメールアドレスユーザーが登録してあるメールアドレスか、Appleが発行するメールアドレスかを選択することができる。

Delegateを設定する

APIからデータ取得成功時にdidCompleteWithAuthorizationが呼び出されます。そこで必要な情報を取得しログイン処理へ流していく感じになります。

extension UserLoginViewController: ASAuthorizationControllerDelegate {
    // iOS13のみ処理する
    @available(iOS 13.0, *)
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        guard let idTokenData = appleIDCredential.identityToken,
                let email = appleIDCredential.email,
                let fullName = appleIDCredential.fullName?.nickname,
                let idToken = String(data: idTokenData, encoding: .utf8) else { return }
            let userIdentifier = appleIDCredential.user
            print("ユーザー名:" + fullName)
            print("メールアドレス:" + email)
            print("ユーザーのID:" + userIdentifier)
            print("idToken:" + idToken)
    }
 
    @available(iOS 13.0, *)
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Authorization Failed: \(error)")
    }
}

最後に

これでSwiftの実装が完了となります。設定がうまくいっていれば、ボタンを押した際にAppleIDのログイン画面が表示され入力を求められます。そこで入力をし完了するとアプリに戻ってきてDelegateの処理が実行されます。

Swift側の実装はそんなに難しくなくできるかと思います。ここで取得したデータを元にログイン処理を実装すれば完了です。

Sign In with Apple関連記事

Sign In with Appleに対応 事前準備編
ソーシャルログインが実装されているアプリは必ず対応しないといけないSign In with Appleですが、Apple Developerの画面でまずは設定することがたくさんあります。実装に入る前にやらないといけない手順をまとめました。...
yosshy.work
2020.01.20
Sign In with Appleの対応をして思ったこと
担当しているアプリでSign In with Appleの対応をしないといけないことがあり、その対応をした際に流石だなーと思った点があったので、まとめておこうと思います。実際にどんな感じで実装したのかは、別の記事で書く予定...
yosshy.work
2019.12.25
Sign In with Appleでprivate email relay serviceを使った メール転送の方法
Sign In with Appleにはサービス側にユーザーのメールアドレスを伝えずにAppleが作ったサンプルのメールアドレスを送信することができます。(Private Email Relay Service)Appleはこのアドレスに...
yosshy.work
2020.01.20
人気記事
cssで破線を引く方法
2020.02.212020.02.22
MySQLでNULLを任意の値に置換して取得する方法
2020.02.072020.07.06
読み込み中のアニメーションをCSSを使って実装する方法
2020.01.282020.07.06
WordpressでMySQLに接続できないときの解決方法
2020.02.06
npm scriptでscssのビルドをリアルタイムで反映させる
2020.02.11
Sign In With AppleをWebページに実装する方法
2020.04.15
プログラム
iosアプリ Sign In with Apple アプリ
スポンサーリンク
シェアする
TwitterFacebookはてブPocketLINE
yosshyをフォローする
yosshy
Webエンジニアの独り言

関連記事

css

cssで破線を引く方法

cssで破線を引く場合、デフォルトでない線を使いたくなる時があります。破線の間隔を自由に調整したいや、二色が交互の線にしたい!となった時には、デフォルトの機能だけでは再現することができません。 css3を使うことで、再現できるので、...
Swift

Sign In with Appleでprivate email relay serviceを使った メール転送の方法

Sign In with Appleにはサービス側にユーザーのメールアドレスを伝えずにAppleが作ったサンプルのメールアドレスを送信することができます。(Private Email Relay Service)Appleはこのアドレスに...
html

htmlのdialogのshowをshowModalの違い

Webサイトでよく使うであろうダイアログについて、htmlタグだけで再現できるようになったので、今更ながら使ってみました。 dialogタグを使ってモーダルを実装した際に開く方法として、show()とshowModal()の二種類が...
css

簡単にできる!cssでWebフォントを読み込む方法

Webサイトを作っているときに、フォントによっては表示が崩れてしまったり、意図しない表示レイアウトになってしまったりすることがあります。 最近は使われているサイトも増えてきており、普及していきていますが、まだまだ知らない人や、これか...
npm

npmでscssのビルド環境を構築する

web制作をしていく上で、cssをscss使ってかいて、ビルドしたいことが多々あるかと思います。その環境を毎回0から作っていたら手間だったので、備忘録的に書いておこうかと思います 前提条件 macで開発しており、nodeとnp...
php

phpで変数の中身が空か判定をする3つの方法

phpを実装していると空判定、null判定を書くことがありと思います。そんな時にemptyだっけ、issetだっけと迷いますよね。これの違いをしっかりと説明できる人ってなかなかいないのではないでしょうか。 私自身、よくわからなくなっ...
Sign In with Appleに対応 事前準備編
Sign In with Appleでprivate email relay serviceを使った メール転送の方法
ホーム
プログラム
Sign In with Appleの実装 Swift編
スポンサーリンク

最近の投稿

  • git pullした際にPermissioon deniedのエラーが発生した際の対応方法
  • SESと自社開発両方を経験したエンジニアが感じた違い
  • プラグインを使わずにWordPressをSSL化する方法
  • GAS(Google Action Script)を使ってLINE Botを作る方法
  • WordPressを高速化させるために必須なgzip圧縮のNginXの設定について

アーカイブ

  • 2022年11月
  • 2021年12月
  • 2021年8月
  • 2021年3月
  • 2021年2月
  • 2020年7月
  • 2020年5月
  • 2020年4月
  • 2020年2月
  • 2020年1月
  • 2019年12月

カテゴリー

  • css
  • GAS
  • html
  • JavaScript
  • linux
  • MySQL
  • npm
  • php
  • scss
  • Swift
  • Wordpress
  • イベント
  • その他
  • デザイン
  • プログラム
  • マネジメント
  • 未分類
Webエンジニアの独り言
Copyright © 2019 yosshy All Rights Reserved.
    • ホーム
    • プログラム
    • デザイン
    • マネジメント
  • ホーム
  • トップ
  • スポンサーリンク

    最近の投稿

    • git pullした際にPermissioon deniedのエラーが発生した際の対応方法
    • SESと自社開発両方を経験したエンジニアが感じた違い
    • プラグインを使わずにWordPressをSSL化する方法
    • GAS(Google Action Script)を使ってLINE Botを作る方法
    • WordPressを高速化させるために必須なgzip圧縮のNginXの設定について

    アーカイブ

    • 2022年11月
    • 2021年12月
    • 2021年8月
    • 2021年3月
    • 2021年2月
    • 2020年7月
    • 2020年5月
    • 2020年4月
    • 2020年2月
    • 2020年1月
    • 2019年12月

    カテゴリー

    • css
    • GAS
    • html
    • JavaScript
    • linux
    • MySQL
    • npm
    • php
    • scss
    • Swift
    • Wordpress
    • イベント
    • その他
    • デザイン
    • プログラム
    • マネジメント
    • 未分類