TapTapTap!!!(40)~アルファ版の不具合を修正する~ ではその中で出た不具合である Google Play Games にサインインできないことに対して対処を行った。しかしながら、未だにゲームを開始できない不具合が残っているようだ。
1.Google Play コンソール上からエラーを確認する
Google Play コンソールからリリース前レポートを確認できることがわかったのでその方法を紹介させていただく。[すべてのアプリ] > [当該アプリ] > [リリース前レポート] からエラーレポートを確認することができる。以下の画面から「エラー」が6つと「警告」が4つ発生していることがわかった。
「クラッシュ」の項目をクリックすると以下のようなクラッシュ画面が確認できるその中から端末名の横画赤色になっている機器を選択する。
すると、以下のクラッシュレポートを確認することができる。クラッシュレポート画面では「CatLog(アプリの出力ログ)」と「検証画面のキャプチャー動画」を確認することができる。
クラッシュレポートのCatLog(アプリの出力ログ)では以下ような内容のファイルをダウンロードすることができ、その中で問題となっている部分をブログ上で掲載させていただく。内容全てを確認したい方はこちらからダウンロードしていただけます。どうやら、Google Play Games for Unity の IncrementAchievement(累積実績)の処理に失敗していることが判明した。
10-09 12:16:23.564: I/Unity(14386): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 10-09 12:16:23.566: I/Unity(14386): [Info] 10/09/2018 12:16:23 : GooglePlayUtility::GooglePlayIncrementAchievement - Start 10-09 12:16:23.566: I/Unity(14386): 10-09 12:16:23.566: I/Unity(14386): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 10-09 12:16:23.571: W/GamesServiceBroker(12568): Client connected with SDK 13004000, Services 13280015, and Games 59040030 10-09 12:16:23.572: I/Unity(14386): [Info] 10/09/2018 12:16:23 : GooglePlayUtility::<>m__0 - Failre
クラッシュレポートの動画では以下の用に動画からどのようにエラーが起こったのかを確認することができる。本動画では 「ゲーム開始」 →「Google Play Games にログイン」 →「ロゴマークの表示」 → 「Startボタンのクリック」でアプリが強制終了してしまっていることがわかった。
2.不具合を修正する
Google Play Games for Unity の IncrementAchievement(累積実績)の処理に失敗している原因はサインイン状態が保持されていないことが原因の一つとして考えられるため、実績登録などのスクリプトに登録に失敗した際は再度サインインを行う処理を加えて挙動の確認を行う。自身の持っている端末でのエラーでは無いので対処が正しいかは判断が難しいが、一旦これで対応を行ってみたいと思う。
スクリプトの内容は以下の通り
[cce_csharp]using GooglePlayGames; using GooglePlayGames.BasicApi; using System.Reflection; using UnityEngine; public static class GooglePlayUtility { /// <summary> /// 連続タップした /// </summary> public static void ContinuityTap(int count) { MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); if (count == 8) { GooglePlayAchievement(GPGSIds.achievement_8); } else if (count == 50) { GooglePlayAchievement(GPGSIds.achievement_50); } else if (count == 100) { GooglePlayAchievement(GPGSIds.achievement_100); } MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); } /// <summary> /// レベルに到達した /// </summary> public static void ReachedLEVEL(int level) { MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); if (level == 5) { GooglePlayAchievement(GPGSIds.achievement); } else if (level == 10) { GooglePlayAchievement(GPGSIds.achievement_2); } else if (level == 20) { GooglePlayAchievement(GPGSIds.achievement_3); } MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); } /// <summary> /// プレイ回数 /// </summary> public static void PlayAnyTimes() { MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); // 5回プレイした GooglePlayIncrementAchievement(GPGSIds.achievement_5, 20); // 10回プレイした GooglePlayIncrementAchievement(GPGSIds.achievement_10, 10); MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); } public static void ScoredLevel(int level) { GooglePlayScore(GPGSIds.leaderboard, level); } public static void ScoredScore(int score) { GooglePlayScore(GPGSIds.leaderboard_2, score); } private static void GooglePlayScore(string id, int point) { MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); Social.ReportScore(point, id, (bool success) => { if (success) { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "Succsess"); } else { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "Failre"); SignIn(); GooglePlayScore(id, point); } }); MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); } /// <summary> /// GooglePlayGames 実績解除 /// </summary> /// <param name="id">実績 ID</param> private static void GooglePlayAchievement(string id) { MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); PlayGamesPlatform.Instance.ReportProgress( id, 100, (bool success) => { if (success) { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "Succsess"); } else { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "Failre"); SignIn(); GooglePlayAchievement(id); } }); MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); } /// <summary> /// GooglePlayGames 実績解除 /// </summary> /// <param name="id">実績 ID</param> private static void GooglePlayIncrementAchievement(string id, int increment) { MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); PlayGamesPlatform.Instance.IncrementAchievement( id, increment, (bool success) => { if (success) { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "Succsess"); } else { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "Failre"); SignIn(); GooglePlayIncrementAchievement(id, increment); } }); MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); } /// <summary> /// Google Play Games へのサインイン /// </summary> private static void SignIn() { MyLogger.GetInstance().StartLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); // Google Play Games へのログイン Social.localUser.Authenticate((bool success) => { if (success) { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "SignIn Success"); } else { MyLogger.GetInstance().InfoLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name, "SignIn Failre"); SignIn(); } }); MyLogger.GetInstance().EndLog("GooglePlayUtility", MethodBase.GetCurrentMethod().Name); } }[/cce_csharp]
これで対応ができれば良いのだが、再度アルファ版をリリースし状況を確認したい。