今まで Google Play Games のログインはアセットストアのものを使っていたのですが、Google公式のプラグインに載せ替えたのでまとめ。
- DeveloperConsoleでゲームをセットアップ
- SHA-1フィンガープリントを登録
- unitypackageをインポート
- PlatformをAndroidに切り替える
- プロジェクトのセットアップ
- サインインしてみる
- リーダーボード
- 実績
- 後書きというか自戒というか愚痴
DeveloperConsoleでゲームをセットアップ
Unityプロジェクトを開く前に、PlayDeveloperConsoleでゲームサービスの設定をしておきます。
ここでイベント、実績、リーダーボードのどれかをセットアップする必要があります。
セットアップしたら「リソースを取得」から、Unityプロジェクトで使うXMLテキストを取得できるので後で使います。
SHA-1フィンガープリントを登録
Androidアプリをリリースする際にキーストアを作ってアプリに署名しますが、このファイルから取得できるSHA-1フィンガープリントをコンソールに登録しなければサインインできません。
.keystore ファイルを作成したら、以下のコマンドを打ちます。
keytool -list -v -keystore [keystoreファイルのPATH] -alias [エイリアス名] -storepass [keystoreのパスワード] -keypass [keyのパスワード]
出てきた「SHA1」欄の文字列を使います。
コンソールのメニューで「リンク済みアプリ」を選択し、「別のアプリをリンク」をクリック。
進んでいくとSHA-1フィンガープリントを登録する画面が出るので、さきほど取得した文字列を入れます。
すでに登録済みの場合は入力画面は出ません。
unitypackageをインポート
[公式github(https://github.com/playgameservices/play-games-plugin-for-unity)からZIPをダウンロードし、current-build ディレクトリ内の GooglePlayGamesPlugin-0.9.36.unitypackage をダブルクリックしてUnityプロジェクトにインポートします。
下のようなエラーが出たら、いさぎよく関連ディレクトリを全て削除(Admobなども使ってたら全部)してから再度インポートするとエラーは消えると思います。
Assets/PlayServicesResolver/Editor/ResolverVer1_2.cs(55,32): error CS0115: `GooglePlayServices.ResolverVer1_2.ShouldExplode(string)' is marked as an override but no suitable method found to override
Assets/PlayServicesResolver/Editor/ResolverVer1_2.cs(24,35): error CS0246: The type or namespace name `ResolverVer1_1' could not be found. Are you missing an assembly reference?
PlatformをAndroidに切り替える
Unityメニューの File > Build Settings とクリックしてAndroidを選択し、ビルドプラットフォームを変更します。
切り替えることではじめてセットアップダイアログを使えるようになります。
プロジェクトのセットアップ
Unityメニューの Window > Google Play Games > Setup > Android setup ...とクリック。セットアップダイアログが表示されます。
ここからプロジェクト設定をstaticクラスとして出力します。
Directory to save constants には出力したいディレクトリ、Constants class name にクラス名を入力。
Resources Difinition にコンソールで取得したXMLをペースト。
「Setup」ボタンを押すとクラスが出力されます。
サインインしてみる
さっそくサインインしてみます。
using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; public class GoogleServiceManager : MonoBehaviour { void Start () { // 初期化 PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate(); // サインイン実行 Social.localUser.Authenticate((bool success) => { if (success) { // サインイン成功! } }); }
サインインするだけなら、これだけのコードでいけます。
アプリ側で権限の確認画面が出てきたら成功。
リーダーボード
UI表示は一行。
Social.ShowLeaderboardUI();
スコア登録もこれだけ。
Social.ReportScore("スコア", "リーダーボードのID", (bool success) => { // handle success or failure });
実績
UI表示は一行。
Social.ShowAchievementsUI();
実績解放は以下のとおり
Social.ReportProgress('実績ID', 0.0f, (bool success) => { // handle success or failure });
第二引数は実績の進捗。0で解放。100で完了。
後書きというか自戒というか愚痴
なんで今更載せ替えたのかというと、自分のゲームのパーミッションに GET_ACCOUNTS が入っているにもかかわらずプライバシーポリシーのURLを載せたりなんやりするのを怠っていて、Googleから注意を受けてしまったんですね。
でもGooglePlayService使ってるからなあ、機能消すしかないかなあと思ってたら、
自分が勝手に勘違いしていたのですが、GameService使うのに特別なパーミッションは必要ないみたいでした。
使っていたアセットが勝手に追加していたわけです。
もう自分の愚かさを呪ったと同時にアセットを呪った。そして捨てた。