Unityゲーム開発 AndroidにおけるSign in with Google

2023年1月22日

infeed1

広告

はじめに

Sign in with Googleを行う必要がある場合に調べてみても、何故かFirebaseを扱うことが前提の情報が多いため記事を書くことにしました。
以降Google Cloud PlatformをGCPと略します。

Google Cloud Platformの設定

1.GCPにアクセスしてプロジェクトを作成
2.作成後メニューの「APIとサービス」からメニュー「認証情報」へ進む
 新規の場合は、「OAuth 同意画面」という設定を行う必要がありますがここはGCPから操作を促されるので特に詰まることはないと思う…!
3.「APIとサービス」の画面の設定


こんな画面が出てきます
Sign in with Googleで必要なのはAndroidアプリの情報とウェブアプリケーションの情報です

  • Androidアプリ情報:ビルドしたアプリを認証できる状態にするために用意します
    • 「+認証情報を作成」からOAuthクライアントIDを選択
      出てきた画面で以下設定
      • アプリケーション種類:Android
      • 名前:アプリ名+Androidとかにしておきましょう
      • パッケージ名:アプリのパッケージ名
        UnityのProjectSettings内、Androidメニューの中にあります
        Other Settings > identification > PackegaName
      • フィンガープリント
        作成したapkファイルもしくはkeuStoreファイルからターミナル上でkeytoolコマンドを使用すると抽出できる
        apkファイルの場合
         keytool -list -printcert -jarfile [apkファイル]
        KeyStoreファイルの場合
         keytool -v -list -keystore [KeyStoreファイル]
  • ウェブアプリケーション情報:クライアントIDと呼ばれる情報を使用するために用意します
    • 「+認証情報を作成」からOAuthクライアントIDを選択
      出てきた画面で以下設定
      • アプリケーション種類:ウェブアプリケーション
      • 名前:アプリ名+Web Clientとかにしておきましょう
      • 承認済みの JavaScript 生成元:承認済みのリダイレクト URIign in with Googleだけであれば、自分のブログやホームページなど自分もしくは会社で用意したURLでとりあえずはよいです
      • 承認済みのリダイレクト URI:承認済みのリダイレクト URIign in with Googleだけであれば、自分のブログやホームページなど自分もしくは会社で用意したURLでとりあえずはよいです


こんな状態になっていればOKです
ここで出てくるOAuth 2.0 クライアントIDリストのうち、ウェブアプリケーションのクライアントIDを使用するので覚えておきましょう

プラグイン導入

ネイティブプラグインを自作してもよいですし、既存のプラグインを使用してもよいですが、
今回は、「google-signin-unity」を使用します
ここから、unitypackageをダウンロードしてUnityにインポートしましょう
インポート後にResolveを実施することをお勧めします

C#側実装

using Google;を忘れないように。

初期化処理
WebClientIdに、ウェブアプリケーションのクライアンを指定
一度だけ呼ぶようにしましょう。
再設定するとえらーになります。

GoogleSignIn.Configuration = new GoogleSignInConfiguration {
      RequestIdToken = true,
      WebClientId = "1072123000000-iacvb7489h55760s3o2nf1xxxxxxxx.apps.googleusercontent.com"
};

認証部分処理

Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn ();
signIn.ContinueWith (task => {
  if (task.IsCanceled) {
    // キャンセル
    Debug.LogError("Canceled");
  } 
  else if (task.IsFaulted) {
    // 失敗
    Debug.LogError("Faulted");
  } 
  else 
  {
    // 成功
    Debug.Log($"IdToken: {task.Result.IdToken}");
    // アカウント選択画面を都度だすために
    GoogleSignIn.DefaultInstance.SignOut();
  }
});

ここまで実装するとGoogleアカウントの選択UIが出てきて認証を行えます
必要に応じてIdTokenを使用することでFirebaseとの連携や、アカウントの管理に役立つでしょう
SignOut関数を用意しているのは1度認証が通ると以降はサイレント認証をされてしまうため、
こちらは仕様に応じて使用してください。

最後に

今回紹介したプラグインは最終更新が2018年と古くサポートされていない可能性も高いため
もしかしたらほかのプラグインか自作したほうが安全性は高いと思われます。
今回に限らずプラグインを使用する際に、会社のプロジェクトで使用する場合などは
サポートや保守性などをしっかりと確かめてから使用しましょう。