こんにちは!2023年1月にiOSエンジニアとしてjoinしました、yoshitakaです!
今後iOS関連の内容で定期的に発信していきたいと思いますので、よろしくお願いいたします!
ママリのアプリではログイン連携でGoogleSignInを使っておりますが、先日GoogleSignInのメジャーアップデート対応を行ったので、内容を簡単にまとめたいと思います。
Google Sign-Inとは
Google Sign-In とは、Googleが提供している認証系ツールで、スマホアプリやWebアプリの認証をGoogleアカウントでできるようにするものです。
Google Sign-Inを使ってやっていること
ママリユーザーが自分のGoogleアカウントを連携させることで、ママリ内でGoogleアカウントでのログインを可能にしています。
内部の処理としてはユーザーがGoogleログインに成功後その認証情報をサーバで確認、連携済みの場合にママリへのログインを許可しています。
アップデートで変わること
v7.0.0リリースノートより以下3点の変更がされました
- すべての構成を Info.plist で指定できるように
- Swift Concurrency のサポート
- API の改善
アップデートで対応したこと
clientID
を Info.plist で指定- API の改善による修正
の2点を対応しました。
GoogleログインからidToken
をサーバへ送る際の実装部分(対応前)はこのようになっておりました。
let config = GIDConfiguration(clientID: clientID) GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [weak self] user, error in if error == nil, let idToken = user?.authentication.idToken { self?.loginViewModel.loginWithGoogleId(idToken: idToken) } }
Info.plist の修正
まずは、clientID
の指定をInfo.plist
に移します。
ドキュメントを参考にGIDClientID
の値を追加しました。
ソースコードを修正する場合はこちらを追加
<key>GIDClientID</key> <string>${GOOGLE_SIGNIN_ID}</string>
今回はRelease
,Develop
, Local
で値を変えたいため
Build SettingsのAdd User-Defined Setting
より環境ごとに値を指定して使います
ログイン部分の修正
次にログインの実装部分を修正します。
Info.plistに追加したことでGIDSignIn.sharedInstance.signIn
でclientID
を渡す必要がなくなりました。
また、ログインが成功したかどうかを表す新しい GIDSignInResult
が追加されました。
以前user?.authentication.idToken
から取得していたidToken
は
signInResult?.user.idToken?.tokenString
とすることで同じ値が取得できました。
GIDSignIn.sharedInstance.signIn(withPresenting: self) { [weak self] signInResult, error in if error == nil, let idToken = signInResult?.user.idToken?.tokenString { self?.loginViewModel.loginWithGoogleId(idToken: idToken) } }
まとめ
APIの改善により他にも変わっている部分がいくつかありました。
この記事では修正が必要になった部分のみ記載しておりますが、公式ドキュメントに詳しくありましたので対応される際は確認してみてください!