iOS
...
Users
iOSでGoogleアカウントを使ったサインイン実装ガイド
11 分
googleでサインイン イントロダクション 最近では、アプリケーションが複数のサインイン方法を提供することが一般的です。したがって、ユーザーにとっては、すでに持っているアカウント(googleアカウントやapple idなど)でサインインする方が簡単です。さらに、ソーシャルネットワーク(facebookなど)は、開発者が自分のソーシャルネットワークの資格情報を使用してサインインオプションを統合できるsdkを提供しています。 このガイドでは、まずgoogleが提供するサインイン機能を統合することから始めます。ユーザーがgoogleの資格情報で正常にサインインした後、googleから返されたアカウント情報を使用して、対応するgoogleアカウントに関連付けられる新しいユーザーをサインインさせます。 この リポジトリ では、実装しているさまざまなサインイン方法をテストできるシンプルなxcodeテンプレートを提供しています。このプロジェクトはすでに 前のガイド https //www back4app com/docs/ios/parse swift sdk/users/user log in で紹介されており、プロジェクトの詳細については再度確認できます。 前提条件 このクイックスタートを完了するには、次のものが必要です: xcode back4appで作成されたアプリ。 「 新しいparseアプリのチュートリアル 」に従って、 back4app でparseアプリを作成する方法を学びます。 注意: 「 parse sdk (swift)のインストールチュートリアル 」に従って、 back4app に接続されたxcodeプロジェクトを作成します。 目標 googleのsdkを使用してユーザーサインイン機能を統合すること。 parseswift 1 googleのsdkの設定 xcodeプロジェクトが リンクされている back4app アプリケーションに、サインインフローを実装するためにgoogleのsdkを追加します。この例では、 swift package manager (spm)を使用してgoogleサインインの依存関係を追加します。xcodeプロジェクトで、「 ファイル>パッケージを追加… 」に移動し、検索バーで https //github com/google/googlesignin ios を探します。 オプションが結果に表示されたら、 googlesignin ios をクリックして、 パッケージを追加 ボタンを押します。 次に、 ダッシュボード に移動し、 新しいプロジェクトを作成 します。 プロジェクトが作成されたら、次のステップはoauthクライアントidを作成することです。 google cloud console で新しいプロジェクトを選択し、認証情報ページに移動します。これは左側のメニューから見つけることができます このプロセス中に、googleでサインインするフォームに表示されるoauth同意画面を設定し、対応する要件を適切に記入する必要があるかもしれません。 このステップを締めくくるために、oauthクライアントidの作成中に生成されたurlをアプリのurlスキームに追加する必要があります。プロジェクト設定に移動し、メインアプリターゲットを選択します。次に、 info セクションに移動し、googleプロジェクトから対応するurlスキームを追加します。 2 parseswiftを使用したgoogleサインイン googlesignin がxcodeプロジェクトに正常に統合されたので、googleでのサインイン機能を実装します。 プロジェクトの例 , logincontroller がさまざまなサインインオプションの処理と表示を担当します。次に、このコントローラーで signinwithapplebutton アクションを設定します 1 // logincontroller swift file 2 import googlesignin 3 4 5 class logincontroller uiviewcontroller { 6 7 8 private let signinwithgooglebutton uibutton = { 9 let button = uibutton(type system) 10 button setimage(uiimage(named "googleicon"), for normal) 11 button imageview? contentmode = scaleaspectfit 12 return button 13 }() 14 15 override func viewdidload() { 16 super viewdidload() 17 // 18 // layout configuration 19 // 20 21 signinwithgooglebutton addtarget(self, action #selector(handlesigninwithgoogle), for touchupinside) 22 } 23 } 24 25 // mark sign in with google section 26 extension logincontroller { 27 @objc fileprivate func handlesigninwithgoogle() { 28 // todo here we will implement the sign in procedure 29 } 30 } googleのサインインフォームを表示するために、 googlesignin googlesignin sdkは、 signin(with\ presenting\ callback) signin(with\ presenting\ callback) メソッドを使用してそれを設定し、表示することを可能にします。 gidsignin gidsignin クラスから。さらに、前のステップで作成した gidconfiguration gidconfiguration オブジェクトを渡す必要があります。次に、表示するビューコントローラーとコールバッククロージャを指定します。コールバッククロージャ内で、googleはユーザーの資格情報( gidgoogleuser gidgoogleuser オブジェクトに埋め込まれた)または認証が失敗した場合のエラーを返します。 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 5 6 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 7 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 8 if let error = error { 9 self? showmessage(title "error", message error localizeddescription) 10 return 11 } 12 13 // after google returns a successful sign in, we get the users id and idtoken 14 guard let googleuser = googleuser, 15 let userid = googleuser userid, 16 let idtoken = googleuser authentication idtoken 17 else { fatalerror("this should never happen!?") } 18 19 // todo sign in the user in your back4app application 20 } 21 } 22 } 次に、これらの資格情報を取得し、 back4app プラットフォームでユーザーにサインインするために使用します。ユーザーを表すオブジェクトは、次の構造体です( 前のガイド https //www back4app com/docs/ios/parse swift sdk/users/user log in を参照してください): 1 import parseswift 2 3 struct user parseuser { 4 5 6 var username string? 7 var email string? 8 var emailverified bool? 9 var password string? 10 11 var age int? 12 } したがって、googleから返された資格情報には、 idtoken idtoken とユーザーの id id が含まれており、サインインプロセスを完了するために使用されます。より正確には、 parsegoogle\<user> parsegoogle\<user> オブジェクトをインスタンス化し、 login(id\ idtoken\ completion) login(id\ idtoken\ completion) メソッドを呼び出します。 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 gidsignin sharedinstance signout() // this should be called when the user logs out from your app for login testing purposes, we are calling it each time the user taps on the 'signinwithgooglebutton' button 5 6 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 7 8 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 9 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 10 if let error = error { 11 self? showmessage(title "error", message error localizeddescription) 12 return 13 } 14 15 // after google returns a successful sign in, we get the users id and idtoken 16 guard let googleuser = googleuser, 17 let userid = googleuser userid, 18 let idtoken = googleuser authentication idtoken 19 else { fatalerror("this should never happen!?") } 20 21 // with the user information returned by google, you need to sign in the user on your back4app application 22 user google login(id userid, idtoken idtoken) { result in 23 // returns the user object asociated to the gidgoogleuser object returned by google 24 switch result { 25 case success(let user) 26 // after the login succeeded, we send the user to the home screen 27 // additionally, you can complete the user information with the data provided by google 28 let homecontroller = homecontroller() 29 homecontroller user = user 30 31 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 32 case failure(let error) 33 // handle the error if the login process failed 34 self? showmessage(title "failed to sign in", message error message) 35 } 36 } 37 } 38 } 39 } 3 ユーザーサインインとセッション作成の確認 googleサインインが正常に動作したことを確認するために、あなたの back4app アプリケーションダッシュボードを見て、新しい ユーザー ユーザー , googleの authdata authdata パラメータを含んでいることを確認できます。 ダッシュボードで有効なセッションが作成され、対応する ユーザー ユーザー オブジェクトへのポインタを含んでいることも確認できます。 4 既存のユーザーをgoogleアカウントにリンクする iosアプリが既存のユーザーを back4app プラットフォームのgoogleアカウントに関連付ける必要がある場合、 parsegoogle\<user> parsegoogle\<user> オブジェクトは、次のメソッドを実装しています link(id\ completion ) link(id\ completion ) ここで、リンクするgoogleアカウントの id id を渡します 1 let googleuserid string // the id of the google account to link to 2 3 user google link(id googleuserid) { \[weak self] result in 4 switch result { 5 case success(let user) 6 // linking succeeded, user object now is linked to the corresponding google account 7 case failure(let error) 8 // linking failed, handle the error 9 } 10 } 5 サインアウト サインアウトプロセスは、標準的な user signout() user signout() メソッドの呼び出し方法と異なりません(前のガイドで詳述)。ただし、ユーザーがgoogleアカウントでサインインしている場合、一貫性のために、現在のgoogleユーザーもサインアウトする必要があります。これを実現するために、次のメソッドを user signout() user signout() と一緒に呼び出します。 現在のユーザーがリンクされたgoogleアカウントを持っているかどうかを確認するには、 user current? authdata user current? authdata 辞書を見て確認できます。 6 アプリを実行する この リポジトリ にアクセスして、サンプルプロジェクトをダウンロードできます。プロジェクトを実行する前に、開発者アカウントに関連付けられたプロビジョニングプロファイルを設定してください。 結論 このガイドの最後に、googleでサインインまたは既存の back4app ユーザーをiosでリンクする方法を学びました。次のガイドでは、別のサインイン方法について続けます。