TapTapTap!!!(45)~アルファ版の Google Play Games のサインインを行う~

TapTapTap!!!(44)~Unity ベータ版 2018.3.0b5 用に設定を行う~では Unity のベータ版をインストールしたことによって変わってしまったゲーム画面の調整等を行った。今回は以前からうまく行っていない、Google Play Games へのサインインに再度挑戦する。

1.参考サイト

サインインに再挑戦するにあたり、くらげになりたい。様のサイトが参考になりそうだったので、こちらを参考に「TapTapTap!!!」の改良を行っていきたいと思う。

スポンサーリンク

2.Google Play Games 用のスクリプトを作成する。

Google Play Games 用のスクリプトでは、「サインイン」、「サインアウト」、「実績解除」、「スコアの登録」を行うメソッドを作成する。今回、改良した点としては各処理の中ですでにサインインが完了しているかを判定する処理を加えている。これによってサインインエラーによって強制終了することがなくなることおよび無駄なサインイン処理をなくすことを狙っている。ここではクラス名を「GPGManager」としている。※ GPG は Google Play Games の略


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using System.Reflection;
using UnityEngine;

public class GPGManager : MonoBehaviour
{
    /// <summary>
    /// スクリプトの開始
    /// </summary>
    void Start()
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        // Google Play Games へログイン済みか判定する
        if (!IsLogined())
        {
            // クライアントの設定
            PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build();
            PlayGamesPlatform.InitializeInstance(config);
            PlayGamesPlatform.DebugLogEnabled = true;
            PlayGamesPlatform.Activate();
        }
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }

    /// <summary>
    /// Google Play Games の処理完了時のコールバックメソッド
    /// </summary>
    /// <param name="success"></param>
    public delegate void GPGExecute(bool success);

    /// <summary>
    /// Google Play Games へのサインイン
    /// </summary>
    /// <param name="method">サインイン処理完了時のコールバックメソッド</param>
    public void SignIn(GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        Social.localUser.Authenticate((bool success) =>
        {
            method(success);
        });
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }

    /// <summary>
    /// Google Play Games からのサインアウト
    /// </summary>
    public void SingOut()
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        PlayGamesPlatform.Instance.SignOut();
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }

    /// <summary>
    /// Google Play Games へのサインイン状態の確認
    /// </summary>
    /// <returns>サインイン状態</returns>
    public bool IsLogined()
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        return Social.localUser.authenticated;
    }
    /// <summary>
    /// 連続タップした
    /// </summary>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    public void ContinuityTap(int count, GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        if (count == 8)
        {
            GooglePlayAchievement(GPGSIds.achievement_8, method);
        }
        else if (count == 50)
        {
            GooglePlayAchievement(GPGSIds.achievement_50, method);
        }
        else if (count == 100)
        {
            GooglePlayAchievement(GPGSIds.achievement_100, method);
        }
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }
    /// <summary>
    /// 実績解除特定のレベルに到達した
    /// </summary>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    public void ReachedLEVEL(int level, GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        if (level == 5)
        {
            GooglePlayAchievement(GPGSIds.achievement, method);
        }
        else if (level == 10)
        {
            GooglePlayAchievement(GPGSIds.achievement_2, method);
        }
        else if (level == 20)
        {
            GooglePlayAchievement(GPGSIds.achievement_3, method);
        }
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }

    /// <summary>
    /// プレイ回数
    /// </summary>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    public void PlayAnyTimes(GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        // 5回プレイした
        GooglePlayIncrementAchievement(GPGSIds.achievement_5, 20, method);
        // 10回プレイした
        GooglePlayIncrementAchievement(GPGSIds.achievement_10, 10, method);
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }
    /// <summary>
    /// レベルの登録
    /// </summary>
    /// <param name="level">レベル</param>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    public void RegisterLevel(int level, GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        GooglePlayScore(GPGSIds.leaderboard, level, method);
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }

    /// <summary>
    /// スコアの登録
    /// </summary>
    /// <param name="score">スコア</param>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    public void RegisterScore(int score, GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        GooglePlayScore(GPGSIds.leaderboard_2, score, method);
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }


    /// <summary>
    /// Google Play Games のスコア登録
    /// </summary>
    /// <param name="id">スコアID</param>
    /// <param name="point">スコア</param>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    private void GooglePlayScore(string id, int point, GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        // ログインしていない場合はスコアを登録しない
        if (!IsLogined())
        {
            method(false);
            MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
            return;
        }
        Social.ReportScore(point, id, (bool success) =>
        {
            method(success);
        });
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }

    /// <summary>
    /// GooglePlayGames 実績解除
    /// </summary>
    /// <param name="id">実績 ID</param>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    private void GooglePlayIncrementAchievement(string id, int increment, GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        // ログインしていない場合は実績を解除しない
        if (!IsLogined())
        {
            method(false);
            MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
            return;
        }
        PlayGamesPlatform.Instance.IncrementAchievement(id, increment, (bool success) =>
        {
            method(success);
        });
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }

    /// <summary>
    /// GooglePlayGames 実績解除
    /// </summary>
    /// <param name="id">実績 ID</param>
    /// <param name="method">Google Play Games の処理完了時のコールバック</param>
    private void GooglePlayAchievement(string id, GPGExecute method)
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        // ログインしていない場合は実績を解除しない
        if (!IsLogined())
        {
            method(false);
            MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
            return;
        }
        PlayGamesPlatform.Instance.ReportProgress(id, 100, (bool success) =>
        {
            method(success);
        });
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }
}

3.他のスクリプトとの調整を行う

今回「GPGManager」を作成したことによって「GoolePlayUtility」が不要となった。そこで、「GoolePlayUtility」を使っていた箇所を「GPGManager」に移行する。基本的には大きな変更はせず、以下のような変更となり、参照するクラスを変更するのみで対応できる。


1
2
3
GoolePlayUtility.ReachedLEVEL(level);

GetComponent<GPGManager>().ReachedLEVEL(level, GPGExecute);

4.Google Play コンソールにアップロードし動作確認を行う

Studio Fun の環境では無事サインインを行えた。あとはアルファ版テスターさんの環境で動作が行われるかが問題だ。相も変わらずテスターさんを募集しておりますので、テスターをご希望いただける方はお問い合わせまたは以下のフォームからご連絡ください。

スポンサーリンク
%d人のブロガーが「いいね」をつけました。