Appleでサインイン—アプリに実装する方法

公開: 2020-03-06

編集者注:この記事は、2020年1月14日にMiquido.comで最初に公開されました


サインインウィズアップル—昨年WWDCでアップルが発表した新機能がiOS 13から利用可能になりました。この機能は、アプリケーションまたはWebサイトへのシンプルで安全なアカウント登録とログインを提供します。 登録フォームに記入したり、ソーシャルメディア経由でログインしたりする代わりに、アカウントを作成してApple IDでログインし、Face ID、Touch ID、またはパスコードで確認できるようになりました。

👨‍💻Appleでのサインインの簡単な説明:

  • 迅速で簡単なアカウント設定とサインイン
  • 確認済みのメールアドレス
  • ビルトインセキュリティ
  • 不正防止
  • クロスプラットフォーム📱💻⌚️
  • iOS13以降

この記事では、Webバージョンとの統合やバックエンドとの統合を行わずに、iOSデバイスでのSign In WithAppleの基本的な実装に焦点を当てます。

それがどのように機能するかを見てみましょう

「Appleでサインイン」または「Appleで続行」(アプリケーションに実装するために選択したボタンによって異なります)をタップすると、このソリューションの可能性を示す情報ウィンドウが表示されます(2番目のスクリーンショット)。 次に、[続行]をタップすると、アプリケーションの所有者と共有されるデータに関する情報が表示されます。

ここでは、Appleでサインインを使用してアプリケーションにアカウントを登録するための2つのオプションがあります。

  • 私たちの電子メールアドレスを共有することで—あなたの実際の電子メールアドレスはアプリケーションまたはウェブサイトと共有されます。
  • メールアドレスを非表示にすると、実際のメールはアプリケーションやWebサイトに共有されなくなります。 Appleは、@ privaterelay.appleid.comドメインを使用して一意の電子メールを生成します。 メールは実際のメールアドレスに転送されるため、アプリの所有者からのすべてのメールはとにかく受信トレイに転送されますので、ご安心ください。 アプリの所有者は、Appleドメインで生成されたメールアドレスのみを知っています。

オプションの1つを選択し、[続行]をタップした後、電話のロックを解除する場合と同様に、Face ID、Touch ID、またはパスコードを入力して、AppleIDを確認します。 この時点で、ユーザーの一意の識別子を使用してアプリケーション/ Webサイトにアカウントを作成する必要があります。

以前にアプリケーションで「Appleでサインイン」を使用したことがある場合は、このログイン設定方法の詳細をプレビューして、この機能の使用を停止できます。 これを行うには、 [設定] > [ AppleID ]> [パスワードとセキュリティ]> [ AppleIDを使用するアプリ]> [アプリ]を選択します。

「Appleでサインイン」の理論的な部分を読んだ後、実装に進むことができます👨‍💻

まず、プロジェクトで「署名と機能」を開き、+を押して「Appleでサインイン」機能を追加する必要があります。

AppleはWWDC基調講演で、この機能を実装するプロセスを4つの段階に分けています。 すべての段階を以下に説明します。

  1. ボタン📱

最初に、画面にボタンを追加する必要があります。 これはAuthenticationServiceフレームワークASAuthorizationAppleIDButtonボタンである必要があります。 タイトルの異なる2色(白と黒)があります。 ボタンに、それをタップした後に呼び出されるアクションを追加する必要があります。 2番目のポイントで承認アクションについて説明します。

 AuthenticationServicesをインポートします

let button = ASAuthorizationAppleIDButton(type:.signIn、style:.white)

button.addTarget(self、action:#selector(appleIdButtonClicked)、for:.touchUpInside)

stackView.addArrangedSubview(button)
  1. 承認⚙️

ここでは、承認リクエストを作成します。requestedScopesとして、アプリケーションまたはWebサイトでアカウントを作成するために必要な情報のみを提供します。 私の場合、これはフルネームとメールアドレスです。 次に、デリゲートを設定してリクエストを行います。

 @objc func appleIdButtonClicked(){

let request = ASAuthorizationAppleIDProvider()。createRequest()

request.requestedScopes = [.fullName、.email]

コントローラー= ASAuthorizationController(authorizationRequests:[request])

controller.delegate = self

controller.presentationContextProvider = self

controller.performRequests()

}
  1. 検証

Face ID、Touch ID、またはパスコードで簡単に確認した後、認証結果が返されます。 承認が成功すると、 didCompleteWithAuthorizationメソッドはAppleIdCredentialタイプのオブジェクトを返します。 次に、それらがASAuthorizationAppleIdCredentialタイプのクレデンシャルであるかどうかを確認する必要があります。ある場合、このオブジェクトには、一意のユーザーID、フルネーム、電子メールアドレス(ユーザーが以前に要求した)。 この時点で、必要な情報のみを提供することで、システムにアカウントを作成することができます。 エラーが発生した場合は、 didCompleteWithErrorメソッドで返され、このエラーを処理できます。

func authenticationController(コントローラー:ASAuthorizationController、didCompleteWithAuthorization承認:ASAuthorization){

 appleIDCredential = authentication.credential as? ASAuthorizationAppleIDCredential {

//システムにアカウントを作成します。

} else if passwordCredential = authentication.credential as? ASPasswordCredential {

//既存のiCloudキーチェーンクレデンシャルを使用してサインインします。

}

}




func authenticationController(コントローラー:ASAuthorizationController、didCompleteWithErrorエラー:エラー){

印刷(エラー)

}
  1. 変更の処理🔀

たとえば、ユーザーがAppleIDを使用したアプリケーションログインの使用を停止したという事実に備える必要があります。 これは、ユーザーがアプリケーションを再起動した後に適切に処理する必要があります。

アカウント登録時に受け取ったユーザーIDを使用して、 getCredentialStateメソッドを非常にすばやく呼び出すことにより、AppleIDクレデンシャルの現在の状態を取得できます。 このメソッドは、次の3つの状態を返すことができます。

  • 承認済み—アプリケーションの使用を継続できる承認済みユーザー。
  • 取り消されました—ユーザーをログアウトします。オプションで、ユーザーをログイン画面に誘導して再度ログインすることができます。
  • notFound —ユーザーが以前に「Appleでサインイン」を使用したことがないことを意味します。 この時点で、ユーザーにログイン画面も表示します。

getCredentialStateメソッドの呼び出しは didFinishLaunchingWithOptionsメソッドAppDelegateにある必要があります

さらに、Appleは通知を提供します。この通知では、資格情報が取り消されたときに通知し、このステータスについては上記の方法で処理する必要があります。

 appleIDProvider.getCredentialState(forUserID:userId){credentialState、エラー

credentialStateを切り替えます{

ケース.authorized:

// AppleIDクレデンシャルは有効です。

ケースが取り消されました:

// Apple IDクレデンシャルが取り消され、ログアウトします。

ケース.notFound:

//クレデンシャルが見つからなかったため、サインインUIを表示します。

ディフォルト:

壊す

}

}


//失効通知に登録します

NotificationCenter.default.addObserver(forName:NSNotification.Name.ASAuthorizationAppleIDProviderCredentialRevoked、

オブジェクト:nil、

キュー:nil){_ in

//ユーザーをサインアウトし、オプションで再度サインインするようにガイドします

}

サンプルアプリケーションで4つのステージすべてを実装した後、すべてが機能します🎉🎉🎉そして次のようになります:

アプリに「Appleでサインイン」を追加する必要がありますか? 🤔

アプリケーションでFacebook、Google、LinkedInなどのサードパーティのログイン方法を使用している場合は、新しいガイドラインに従ってAppleでサインインも追加する必要があります。 追加しないと、申請が却下され、Appleによる審査を受けられない場合があります。 以下はニュースへのリンクとガイドラインからの引用です。

Appleでサインインするための新しいガイドライン— 2019年9月12日⚠️

本日より、AppStoreに送信される新しいアプリはこれらのガイドラインに従う必要があります。 既存のアプリとアプリのアップデートは、2020年4月までにそれらに従う必要があります。

以下は、新しいAppleの機能を使用してログインを提供するアプリケーションです。もちろん、毎日ますます増えています😎

👨‍💻ここでGitHubでプロジェクト全体を確認できます

📚出典:

  • https://developer.apple.com/videos/play/wwdc2019/706/
  • https://developer.apple.com/videos/play/wwdc2019/516
  • https://developer.apple.com/sign-in-with-apple/get-started/
  • https://developer.apple.com/news/?id=09122019b
  • https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple