コネヒト開発者ブログ

コネヒト開発者ブログ

【iOS】GoogleSignIn v7.0.0へのアップデート対応方法

こんにちは!2023年1月にiOSエンジニアとしてjoinしました、yoshitakaです!

今後iOS関連の内容で定期的に発信していきたいと思いますので、よろしくお願いいたします!

ママリのアプリではログイン連携でGoogleSignInを使っておりますが、先日GoogleSignInのメジャーアップデート対応を行ったので、内容を簡単にまとめたいと思います。

Google Sign-Inとは

Google Sign-In とは、Googleが提供している認証系ツールで、スマホアプリやWebアプリの認証をGoogleアカウントでできるようにするものです。

developers.google.com

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.signInclientIDを渡す必要がなくなりました。

また、ログインが成功したかどうかを表す新しい 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の改善により他にも変わっている部分がいくつかありました。

この記事では修正が必要になった部分のみ記載しておりますが、公式ドキュメントに詳しくありましたので対応される際は確認してみてください!

developers.google.com

developers.google.com