Unity+PlayFabでGoogle認証でのログイン

# はじめに
PlayFabのGoogle認証ログインについて(https://docs.microsoft.com/ja-jp/gaming/playfab/features/authentication/platform-specific-authentication/google-sign-in-unity )現在(202105)と仕様が変わりすぎていて落とし穴にハマったので備忘録的な形で作ることに

# 実際にログインを試行した環境
Unity 2019.4.21f1
play-games-plugin-for-unity v10.12
Android実機

# 用意する物
・Unityプロジェクト(Androidビルドができるようにしておく)
・PlayFabを一通り扱えるような環境
（こちらが導入しやすかったので紹介しておきます https://kan-kikuchi.hatenablog.com/entry/PlayFabLogin ）
・GooglePlayゲームSDK (https://github.com/playgameservices/play-games-plugin-for-unity )
・Google開発者アカウントの作成(若干の初期費用がかかります)
・GoogleログインをするためのAndroid環境(実機がベスト)

# 実際に行った手順
##GooglePlayゲームSDKのユニティパッケージをインポートする。
これは**GooglePlayGamesPlugin-0.10.12.unitypackage**をそのまま流れるように全部ImportでOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/3afe7b00-6a7a-a1fe-6af4-df6ef30481dd.png)
インポートが終わると、Unityエディタに下記のメニューが追加される。
**ビルド設定をAndroid**にしないと恐らくメニューが有効かされないので注意！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/4dced499-eb72-7531-3964-107347ff6770.png)

**Enable Android Auto-resolution?**はEnableを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/075fe11e-d340-9599-3902-5d9aabb3ceaa.png)
前述のAndroid setupが開けるようになったらこの項目は完了

##APKファイルの作成
アップロード用のAPK(Android実行ファイル)を作成する。
作成するためにプレイヤー設定を変更していく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/45e40ec6-2c44-86f3-5612-43aff5624236.png)
Android⇒その他の設定を開いてパッケージ名の項目を探す。
このパッケージ名が環境構築中しょっちゅう～～.～～.～～の書式から変わってしまっていることもあるので注意しておく。
また、このパッケージ名は各所で使用する為すぐ見れるようにしておくと良い。命名規則等についてはこのあたりを参照してほしい。( http://jumbuck.cocolog-nifty.com/blog/2011/07/android-6c2b.html　)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/487bd9a2-68f5-fb91-3a0a-cecc4b3dd2b9.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/748f12e5-0427-8dfe-91aa-6c09d26d79e1.png)

スクリプティングバックエンドを**IL2CPP**に変更しておく
これをしないと**ARM64**出力ができない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/1858ce39-6a0f-6105-7517-79374a94e4c6.png)

**ARM64**にチェックを入れる
これをしないと64bit系に対応してないよとGooglePlayConsoleでエラーが吐かれる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/c735c005-3252-63a9-1837-76a38e9df203.png)

暗号化用のカギの作成をする
公開設定タブ⇒キーストアマネージャーを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/db15352e-4699-359e-a43e-e59fed61747e.png)
鍵を自分で管理しやすい場所に作成し、パスワードを設定する。
Aliasには鍵の名前を設定する
この時のパスワードをしっかり記憶しておかないと、アプリが今後GooglePlayConsole上から変更できなくなる可能性もあるそうなのでしっかり管理しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/b879b686-9de0-26b1-7ff7-90526924db45.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/18a378ce-32e8-25ae-bd1a-be2de6517f17.png)

カギが設定できると下記のように鍵のファイルと今どの名前のカギを使っているかが表示されるようになる。
Unityを立ち上げる度にパスワードは空になるので、ビルドできなかったら大体ここを入力しなおさなければならない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/e9ba08fd-173e-3d78-3176-b70ed20e0711.png)

ここまでできたら一度ビルドをする
ビルドをするとエラーがなければAPKファイルが出力されるはず
途中下記のGooglePlaySDKの設定がされてないよというポップアップが出るが、ひとまず最初は無視して良い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/3090712f-e56b-f9b2-fac8-d941b6f266e2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/45066899-29dd-6c25-d889-b0b6d8a7d490.png)

##GooglePlayConsoleでアプリを作成する
Google開発者アカウントでGooglePlayConsoleにサインインすると下記のような画面が出るので、まずは右上の**アプリを作成**
アプリ名入力項目は適当で良いが、Googleサインイン用のプロジェクトだからといってアプリ名に**Google**を入れるとアプリ作成ができないので注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/4fed333d-b4af-b8d8-c40d-6a728d296a58.png)
ここからが自分が引っかかったポイントになるが、**内部テスト**⇒**新しいリリースを作成**ボタンでテスト用に作らなければならない。そうしなかった場合、アプリが恐らく製品版リリースした状態でないと接続確認ができないという落とし穴にはまってしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/3a1b96b5-c268-b983-88b1-02df30858737.png)
作成したら署名しないとリリースできませんよ。ということで次へボタンを押す。
押した後、内部リリースが下記画像のようにアクティブになり、作成できるようになるはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/3bec3a54-481c-84e8-3dce-c950ffa6d7a5.png)
アップロードしてエラーが出ないかどうかを確認する。エラーが出たらエラー内容に言われたとおりに対応をする。
リリース名とかリリースノートはテストならとりあえず適当で問題なし。リソースのレビューができなければ一旦保存ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/aba7c6b1-465b-db44-02ea-3312e18be9c2.png)

保存ボタン押下後、リリースのレビューボタンが押せるようになるはずなので、それを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/fb2a485e-d84d-a6bb-aa79-4d65203db86a.png)

この時点でもエラーが出る可能性があるのでそれは対応するが、警告は一旦無視しても問題ない。
**内部テストとしての公開を開始**ボタンでテストバージョンを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/70c49526-f4af-8228-3186-ca7b49ebd12f.png)

下記のような状態になっていればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/7801cd5f-ea10-cdad-03fc-a9346b63e9e0.png)

##GooglePlayGameサービスAPIの設定
GooglePlayConsole内のPlayゲームサービス⇒設定と管理⇒設定⇒いいえ、ゲームでGoogleAPIを使用していません。を選択し、ゲーム名を入力して画面右下作成ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/57a125ff-c9da-b7eb-6af1-1fa90ceaf67c.png)

Playゲームサービスの設定画面になるはずなので、
**OAuth同意画面を設定**を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/032f2d26-87a6-bee8-218d-47b0c8a83e9c.png)
そうするとGoogleCloudPlatformに行くように指示されるのでリンクへ飛ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/faa5e85f-410a-5d07-77b7-21355b7400ce.png)


##GoogleCloudPlatform(APIとサービス)の設定
OAuth同意画面では**外部**のラジオボタンにチェックを入れる。後で、テストユーザーを追加することによりテストが実行できるようになる。
チェックを入れたら作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/eec79e45-3b5d-4bf1-78fc-1f3712452d77.png)
次にアプリ情報の入力画面になるので、入力必須の項目を入力して次へ進めていく。
進めていくとテストユーザーの登録画面になるので、テストユーザーに追加したいGoogleアカウントのメールアドレスを入力して登録しておく。これをしておかないとサインインのテストができないので注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/40493464-d60d-3d65-92b7-9cc2acdaf1ca.png)

次に認証情報の作成を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/4f85b707-ae37-ec4e-568b-d65b6a53af22.png)

Androidを選択してパッケージ名はUnityのプロジェクト設定に記入したものと同じものを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/1819620d-69b2-3410-4997-31a602eb4cd7.png)
証明書（フィンガープリント）はGooglePlayConsole内にある
設定⇒アプリの完全性⇒アプリ署名鍵の証明書⇒SHA1 フィンガープリントの内容をコピペ。終わったら作成ボタンでAndroidクライアントを作成完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/4fd4ffd5-a22b-b3fd-9461-b60add454167.png)



次にAndroidアプリケーションの作成と同じ手順でウェブアプリケーションの作成を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/0a3475a8-ec43-6117-3493-9647a894e96f.png)

**承認済みのJavaScript生成元**の**URIを追加**ボタンを押して
自分のPlayFabタイトルのAPIエンドポイントを入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/f402274a-dada-591b-4beb-7850ea5138a5.png)
PlayFabタイトルのエンドポイントの取得の仕方はタイトルへ入る⇒設定アイコン⇒タイトルの設定⇒API機能タブ⇒APIエンドポイントにある。これは**タイトル毎に違う**のでそのまま入力しないように注意！また末尾の/は消しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/72d45f0f-f174-ab51-713c-2da5ff972a18.png)

承認済みリダイレクトURIは決まったURL(https://oauth.playfab.com/oauth2/google )を入力して作成ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/f4a8420a-0eec-18e4-f2ae-db3d263d765e.png)

作成すると下記画面が出て、クライアントIDとシークレットが出るので、控えておく。
また、このIDとシークレットは認証情報から該当のクライアントIDをクリックすれば見ることもできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/51b0bb31-63ae-929e-2839-3b6a66182c8e.png)

##PlayFabのタイトルにGoogleを連携する
PlayFabタイトルの左側メニューからアドオンを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/1d31cc4e-6f7c-6fcf-1f12-e114ff148f62.png)
Googleを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/0a72e1d9-c99a-7dbd-f766-df490882d6f9.png)
Googleをインストールを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/963785b5-ea50-d96d-bce5-e340e91bcaba.png)
インストールには各項目が必要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/1a6745e0-6538-22fb-9898-d627c8ff606f.png)
ここで必要になるライセンスキーはGooglePlayConsole内の**収益化のセットアップ**の**ライセンス**を参照する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/1ba14394-3c16-f940-1d79-b9ea1a6c0dcc.png)
全て入力ができたら**Googleをインストール**ボタンで完了。

##GooglePlayConsoleに認証情報を追加する
Playゲームサービスの設定から認証情報を追加を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/2679c965-b585-6925-e1d2-7065b516dd74.png)

ゲームサーバーを選択し、名前を適当につける。
認証クライアントに候補が出ない場合は下記のOAuthクライアントを更新をクリックする。
選択することができたら変更を保存する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/1bb8996b-9fe3-7d47-ea95-60bbd469d35d.png)

上記手順と同じ手順でAndroidの認証情報も追加しておく。
直接はクライアント内では使っていないがこれをやっていないとストアからテストアプリを落とせないので注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/5365eef4-074f-4e38-a7d4-7cf330db9660.png)

##テスターの追加
こちらはGooglePlayConsole側の内部リリースに対するテスターの追加をする。
テスト⇒内部テスト⇒テスター数⇒メーリングリストを作ってその中にテスト用のGoogleアカウントのメールアドレスを入力し、選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/0cc3a31c-9502-b876-24d7-313453540bc2.png)
テストへの参加という項目があるのでリンクをコピーし、該当の端末でリンクを入力する。（まだこの時点ではアプリダウンロードページへは飛べない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/98e61576-8289-09d6-e9e2-17e2fcc47f43.png)
また、変更がおわったら最後に変更を保存ボタンを押しておく。


##Unity側でのGoogleサインイン処理
Googleサインインを実行する為のボタンと、サインイン状態を表示するテキストを用意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/ac93bec8-7bdb-9cb1-e677-29e69bf1c4d9.png)

サインイン用のスクリプトを作り、クリックした時のイベントにSignInメソッド(とりあえず今は空)が実行されるようにしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/7e7441f5-f9a5-b21a-20dd-0fcbdf88475b.png)

この時点でPlayFabのセッティングは終了させておくこと。
GoogleSignIn.csの中身は大体こんなかんじ。
Textは作ったテキストオブジェクトと紐づけておく。

    [SerializeField] Text testText;

    void Start(){
        // GooglePlayの初期化
        PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .AddOauthScope("profile")
        .RequestServerAuthCode(false)
        .Build();
        PlayGamesPlatform.InitializeInstance(config);

        PlayGamesPlatform.DebugLogEnabled = true;

        PlayGamesPlatform.Activate();
    }

    public void SignIn(){
        // サインイン
        Social.localUser.Authenticate((bool success) => {
            if (success)
            {
                testText.text = "GoogleSignInState:Success";
                PlayFabClientAPI.LoginWithGoogleAccount(new LoginWithGoogleAccountRequest()
                {
                    TitleId = PlayFabSettings.TitleId,
                    ServerAuthCode = PlayGamesPlatform.Instance.GetServerAuthCode(),
                    CreateAccount = true
                }, (result) =>
                {
                    // PlayFabLoginに成功した内容を書く
                }, (result) =>
                {
                    // PlayFabLoginに失敗した内容を書く
                });
            }
            else
            {
                testText.text = "GoogleSignInState:Failed";
            }
        });
    }
##GooglePlayGames環境設定
GooglePlayGames⇒Setup⇒AndroidSetupを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/47f5e1fb-c53c-9e7f-628e-7cb56c356063.png)
AndroidSetupのResourcesDefinitionはGooglePlayConsole⇒Playゲームサービス⇒設定と管理⇒設定⇒リソースを取得からコピペ。
ClientIDは同じく設定にあるゲームサーバーのOAuthクライアントIDから。(ウェブアプリケーションのクライアントID)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/e7e787ff-3c57-252c-c4d3-365827c2eaa9.png)
Setupボタンを押して完了
##実行ファイルの生成とアップロード
ビルドをする。
この時2回目のビルドになるのでバンドルバージョンを過去の物より高くしないとアップロードが通らないので注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/a7d2f428-b4a3-c7a5-6b85-308c8d431b7b.png)
APKが出力できたら新しいリリースをアップロードして公開する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/12529ab3-d9ee-acdf-128d-81964112b773.png)
画面を進めて**内部テストとしての公開を開始**で公開。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/a65c784e-b971-b16b-9901-3dab3c1db9b7.png)

##実行確認
テスターの追加時にコピーして、Androidデバイスに送ったリンクの下記画像の**download it on GooglePlay**のリンク先に飛べるようになるので、そこからアプリをダウンロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/d933044c-c1d2-f2cf-c873-9362eb273bf4.png)

あとは実機でダウンロードボタンを押してGoogleのOAuth確認画面が出て進めることができれば成功。
お疲れ様でした。
PlayFabにログインできたかどうかのチェックは、コード内でも実装できるが下記のように各タイトルのページからユーザーが生成されたかどうかで確認することもできる。検索で出てこない時は何度か押すと出てくる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1468737/d0df5ef6-5d30-ee2a-9968-10cc7de6ce86.png)