はじめに
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
インポートが終わると、Unityエディタに下記のメニューが追加される。
ビルド設定をAndroidにしないと恐らくメニューが有効かされないので注意!
**Enable Android Auto-resolution?**はEnableを選択
前述のAndroid setupが開けるようになったらこの項目は完了
APKファイルの作成
アップロード用のAPK(Android実行ファイル)を作成する。
作成するためにプレイヤー設定を変更していく。
Android⇒その他の設定を開いてパッケージ名の項目を探す。
このパッケージ名が環境構築中しょっちゅう~~.~~.~~の書式から変わってしまっていることもあるので注意しておく。
また、このパッケージ名は各所で使用する為すぐ見れるようにしておくと良い。命名規則等についてはこのあたりを参照してほしい。( http://jumbuck.cocolog-nifty.com/blog/2011/07/android-6c2b.html )
スクリプティングバックエンドをIL2CPPに変更しておく
これをしないとARM64出力ができない
ARM64にチェックを入れる
これをしないと64bit系に対応してないよとGooglePlayConsoleでエラーが吐かれる
暗号化用のカギの作成をする
公開設定タブ⇒キーストアマネージャーを開く
鍵を自分で管理しやすい場所に作成し、パスワードを設定する。
Aliasには鍵の名前を設定する
この時のパスワードをしっかり記憶しておかないと、アプリが今後GooglePlayConsole上から変更できなくなる可能性もあるそうなのでしっかり管理しておく。
カギが設定できると下記のように鍵のファイルと今どの名前のカギを使っているかが表示されるようになる。
Unityを立ち上げる度にパスワードは空になるので、ビルドできなかったら大体ここを入力しなおさなければならない。
ここまでできたら一度ビルドをする
ビルドをするとエラーがなければAPKファイルが出力されるはず
途中下記のGooglePlaySDKの設定がされてないよというポップアップが出るが、ひとまず最初は無視して良い。
GooglePlayConsoleでアプリを作成する
Google開発者アカウントでGooglePlayConsoleにサインインすると下記のような画面が出るので、まずは右上のアプリを作成
アプリ名入力項目は適当で良いが、Googleサインイン用のプロジェクトだからといってアプリ名にGoogleを入れるとアプリ作成ができないので注意。
ここからが自分が引っかかったポイントになるが、内部テスト⇒新しいリリースを作成ボタンでテスト用に作らなければならない。そうしなかった場合、アプリが恐らく製品版リリースした状態でないと接続確認ができないという落とし穴にはまってしまう。
作成したら署名しないとリリースできませんよ。ということで次へボタンを押す。
押した後、内部リリースが下記画像のようにアクティブになり、作成できるようになるはず。
アップロードしてエラーが出ないかどうかを確認する。エラーが出たらエラー内容に言われたとおりに対応をする。
リリース名とかリリースノートはテストならとりあえず適当で問題なし。リソースのレビューができなければ一旦保存ボタンを押す。
保存ボタン押下後、リリースのレビューボタンが押せるようになるはずなので、それを押す。
この時点でもエラーが出る可能性があるのでそれは対応するが、警告は一旦無視しても問題ない。
内部テストとしての公開を開始ボタンでテストバージョンを作成する。
GooglePlayGameサービスAPIの設定
GooglePlayConsole内のPlayゲームサービス⇒設定と管理⇒設定⇒いいえ、ゲームでGoogleAPIを使用していません。を選択し、ゲーム名を入力して画面右下作成ボタンを押す。
Playゲームサービスの設定画面になるはずなので、
OAuth同意画面を設定を押す
そうするとGoogleCloudPlatformに行くように指示されるのでリンクへ飛ぶ
GoogleCloudPlatform(APIとサービス)の設定
OAuth同意画面では外部のラジオボタンにチェックを入れる。後で、テストユーザーを追加することによりテストが実行できるようになる。
チェックを入れたら作成する。
次にアプリ情報の入力画面になるので、入力必須の項目を入力して次へ進めていく。
進めていくとテストユーザーの登録画面になるので、テストユーザーに追加したいGoogleアカウントのメールアドレスを入力して登録しておく。これをしておかないとサインインのテストができないので注意。
Androidを選択してパッケージ名はUnityのプロジェクト設定に記入したものと同じものを入れる。
証明書(フィンガープリント)はGooglePlayConsole内にある
設定⇒アプリの完全性⇒アプリ署名鍵の証明書⇒SHA1 フィンガープリントの内容をコピペ。終わったら作成ボタンでAndroidクライアントを作成完了。
次にAndroidアプリケーションの作成と同じ手順でウェブアプリケーションの作成を選択する。
承認済みのJavaScript生成元のURIを追加ボタンを押して
自分のPlayFabタイトルのAPIエンドポイントを入力する。
PlayFabタイトルのエンドポイントの取得の仕方はタイトルへ入る⇒設定アイコン⇒タイトルの設定⇒API機能タブ⇒APIエンドポイントにある。これはタイトル毎に違うのでそのまま入力しないように注意!また末尾の/は消しておく。
承認済みリダイレクトURIは決まったURL(https://oauth.playfab.com/oauth2/google )を入力して作成ボタンを押す。
作成すると下記画面が出て、クライアントIDとシークレットが出るので、控えておく。
また、このIDとシークレットは認証情報から該当のクライアントIDをクリックすれば見ることもできる。
PlayFabのタイトルにGoogleを連携する
PlayFabタイトルの左側メニューからアドオンを選択
Googleを選択
Googleをインストールを選択
インストールには各項目が必要
ここで必要になるライセンスキーはGooglePlayConsole内の収益化のセットアップのライセンスを参照する
全て入力ができたらGoogleをインストールボタンで完了。
GooglePlayConsoleに認証情報を追加する
ゲームサーバーを選択し、名前を適当につける。
認証クライアントに候補が出ない場合は下記のOAuthクライアントを更新をクリックする。
選択することができたら変更を保存する。
上記手順と同じ手順でAndroidの認証情報も追加しておく。
直接はクライアント内では使っていないがこれをやっていないとストアからテストアプリを落とせないので注意。
テスターの追加
こちらはGooglePlayConsole側の内部リリースに対するテスターの追加をする。
テスト⇒内部テスト⇒テスター数⇒メーリングリストを作ってその中にテスト用のGoogleアカウントのメールアドレスを入力し、選択する。
テストへの参加という項目があるのでリンクをコピーし、該当の端末でリンクを入力する。(まだこの時点ではアプリダウンロードページへは飛べない)
また、変更がおわったら最後に変更を保存ボタンを押しておく。
Unity側でのGoogleサインイン処理
Googleサインインを実行する為のボタンと、サインイン状態を表示するテキストを用意。
サインイン用のスクリプトを作り、クリックした時のイベントにSignInメソッド(とりあえず今は空)が実行されるようにしておく。
この時点で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を開く。
AndroidSetupのResourcesDefinitionはGooglePlayConsole⇒Playゲームサービス⇒設定と管理⇒設定⇒リソースを取得からコピペ。
ClientIDは同じく設定にあるゲームサーバーのOAuthクライアントIDから。(ウェブアプリケーションのクライアントID)
Setupボタンを押して完了
実行ファイルの生成とアップロード
ビルドをする。
この時2回目のビルドになるのでバンドルバージョンを過去の物より高くしないとアップロードが通らないので注意。
APKが出力できたら新しいリリースをアップロードして公開する
画面を進めて内部テストとしての公開を開始で公開。
実行確認
テスターの追加時にコピーして、Androidデバイスに送ったリンクの下記画像のdownload it on GooglePlayのリンク先に飛べるようになるので、そこからアプリをダウンロードする。
あとは実機でダウンロードボタンを押してGoogleのOAuth確認画面が出て進めることができれば成功。
お疲れ様でした。
PlayFabにログインできたかどうかのチェックは、コード内でも実装できるが下記のように各タイトルのページからユーザーが生成されたかどうかで確認することもできる。検索で出てこない時は何度か押すと出てくる。