概要
Unity で Google Play ゲームを使用して PlayFab 認証を設定する(マイクロソフト公式, 2018/06/11)(以下、本家)
「Unity ゲームへの Google サインインの追加」のコードでAddOauthScope("profile")
が必要になっていることの調査。
環境
- Unity 2019.4.17f1
- PlayFab SDK 2.104.210208
-
Google Play Games plugin for Unity
v0.10.12
本家ドキュメントなどを参考にひととおりセットアップが終わっているものとします。
Google サインインのコード
本家ドキュメントからコピペ
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
.AddOauthScope("profile")
.RequestServerAuthCode(false)
.Build();
PlayGamesPlatform.InitializeInstance(config);
サインインのダイアログ
「Googleで公開されているお客様の個人情報とお客様を関連付ける」とかいう、ちょっとものものしく感じる許可を求められます。
言っても公開されている個人情報ってデフォルトは氏名ぐらいではあるんですが、ゲーム程度で要求されたらサインインを躊躇orプレイ自体離脱するユーザーもいそうな気配。
PlayFabマスタープレイヤーアカウント
サインイン→PlayFabClientAPI.LoginWithGoogleAccountしたら、作成されたPlayFabのマスタープレイヤーアカウントにもガッツリ氏名が出てきます(下側の黒塗り部分)
アカウント連携の目的って、端末変更した時のユーザー紐付けだけできたら良くて、氏名はゲームのアカウントに必要な情報ではないと思うんですけどねー
AddOauthScope("profile")
を削除してみる
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
.RequestServerAuthCode(false)
.Build();
PlayGamesPlatform.InitializeInstance(config);
必要なのはPlayFabClientAPI.LoginWithGoogleAccountのrequestに含めるServerAuthCodeだけで、profileとか要らないのでは? と思ったんですが、
AddOauthScope("profile")
無しだと、PlayFabClientAPI.LoginWithGoogleAccountで以下のエラーが返ってきて、PlayFabログインに失敗します。
(PlayFabError.GenerateErrorReportをDebug.Logしたものをlogcatで取得)
I Unity : /Client/LoginWithGoogleAccount: GoogleOAuthNoIdTokenIncludedInResponse
サインインのダイアログ
「Googleで公開されているお客様の個人情報とお客様を関連付ける」がなくて、健全っぽい。
(でもPlayFabログインでエラーになるから、ダメ)
Firebaseなど他のWebサービスとの連携のサンプルコードをWebで見ていると、このAddOauthScope("profile")
無しパターンなので、PlayFabもそれじゃダメなのかなーと思うわけですが、うーむ
RequestIdToken()
してみる
GoogleOAuthNoIdTokenIncludedInResponse
というエラーコードをふまえて、IdTokenが要るのかな? と思ってAddOauthScope("profile")
の代わりにRequestIdToken()
を追加してみました。
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
.RequestServerAuthCode(false)
.RequestIdToken()
.Build();
PlayGamesPlatform.InitializeInstance(config);
これだとサインイン→PlayFabClientAPI.LoginWithGoogleAccountでPlayFabアカウント作成できました。
サインインのダイアログ
「Googleで公開されているお客様の個人情報とお客様を関連付ける」有り
APIのスコープ説明を見てると、OAuthでopenid取り扱うこと自体がこれにあたるから、この個人情報〜の許可確認はあって然るべきということなのかな?
PlayFabマスタープレイヤーアカウント
ここはユーザーに見える画面ではないので、ユーザー目線では何も変わっていないけど、現状はこれが落とし所なのかなーという感じです。
宣伝
そんなこんなでGoogle Play ゲームとPlayFabを連携させたゲームがこちらです。
PlayFabでは、先に作ったWebGL版(unityroomで公開)と共有になるランキング(リーダーボード)機能程度しか使っていないのに、個人情報の関連付け要求とか表示されるのしのびないのですが…
Google Play ゲームのサインインを拒否した場合も、Android端末に紐づけてユーザー作るので、遊べないことはないです。
あとGoogle Play ゲーム初めて使ったついでに、実績(クエスト、アチーブメント)もつけてみました。