2021年08月09日

[Unity - Android] Google Play Game Serviceのリーダーボードを実装したときのメモ

UnityでGoogle Play Game Serviceのリーダーボードを利用したときにハマったのでメモ。
Google Play Consoleの管理画面が新しくなって、ややこしくなった。



■略語の説明:
・GPGS = Google Play Game Service(リーダーボード等、ゲームで使う機能がある)
・GPC = Google Play Console(Androidアプリを管理するサイト)
・GCP = Google Cloud Platform(GPGSを使う時に使うOAuth認証を管理するサイト)



■注意点
@Unityでの実装編
・PlatformがAndroidになっている
GPGSのSDKを使っている
・GPGSとAdMobのSDKでAndroid Resolverが重複したとき、バージョンの新しい方を採用する
・2021年8月1日から、申請できるアプリはAndroid11.0(API30)以上
・GPGSのUnityでの設定は、
 Unity > Window > Google Play Gams > Setup > Android setup...
 「Resources Definition」の欄に入力するのは、
 Google Play Console > Playゲームサービス > 設定と管理 > リーダーボード > 画面右上の「リソースを取得」 > Android(XML) の内容 ※GPCでリーダーボードを既に作っていること
 Client IDは、Androidアプリなので空欄でOK。
・Android実機のログ確認は、
 Unity > Window > Analytics > Android Log Cat

AGoogle Play Console(管理画面)編
・.apkまたは.aabファイルを内部テストに登録している
・クローズドテストをする場合は、ストア情報を全て埋める必要がある
・ポリシー > ポリシーのステータス で、プライバシーポリシー(Webサイト)を登録する
・ポリシー > アプリのコンテンツ で、アンケートにすべて答える
・テスト > 内部テスト > テスター数 で、テストユーザーを登録する
 招待URLは、テスター数 の下にある「テストへの参加方法」にある。
・Playゲームサービス > 設定と管理 > テスター数 で、テストユーザーを登録する

BGoogle Cloud Platform(管理画面)編
・GPC > Playゲームサービス > 設定と管理 > 設定 > OAuthクライアント
 から GCP に行ける。
・GCPでは、必須項目以外は記入しない(色々と申請が面倒そう)
・認証情報 > SHA-1証明書のフィンガープリントに記入するのは、実機のログ(後述)で出力された方を採用。
 ※「keytool -keystore...」を使って取得したSHA-1証明書は、なぜかエラーになった
 ※GPC > 設定 > アプリの完全性 > SHA-1 証明書のフィンガープリント でもないので注意
・OAuth同意画面 > 公開ステータス が「本番環境 or テスト環境」かをチェックする
 ※テスト環境の場合、テストユーザーが登録されていることを確認する



■エラーの内容
実機で実行すると下記のエラーが出てGPGSの認証に失敗した。
下記の(1)(2)(3)を設定できているかチェックする。

APP NOT CORRECTLY CONFIGURED TO USE GOOGLE PLAY GAME SERVICES
DEVELOPER_ERROR
This is usually caused by one of these reasons:
(1) Your package name and certificate fingerprint do not match
the client ID you registered in Developer Console.

(2) Your App ID was incorrectly entered.

(3) Your game settings have not been published and you are
trying to log in with an account that is not listed as
a test account.

(4) A server auth code was requested, but an incorrect client
id was provided. The client id for server auth codes should
be the client id for the game server (not the android app).

To help you debug, here is the information about this app
Package name : [アプリのパッケージ名]
Cert SHA1 fingerprint: [XX:XX:XX:XX:.... といった、SHA-1証明書のフィンガープリント]
App ID from manifest : [GPC > Playゲームサービス > 設定と管理 > 設定 > プロジェクトID と一致]

※GCP > 認証情報 > OAuth2.0クライアントID > 該当ID > SHA-1証明書のフィンガープリント
 には、上記のフィンガープリントを設定する必要がある

【2021.8.10追記】
オープンテストのためGPCにアップロードしてストアからインストールしたところ、また認証で失敗して上記エラーが出た。PCから直接インストールするのと、ストアからインストールするのとで、フィンガープリントが違っていた。なぜ!
ということで、ログに出力されたフィンガープリントを改めてGCPで設定しなおすと、オープンテストでインストールしたアプリで認証できた。仕組みがわからない!




■リンク
GPGS(Google Play Game Service) for Unityプラグイン:
https://github.com/playgameservices/play-games-plugin-for-unity
※2021年8月9日時点 = v10.12

GPC(Google Play Console):
https://play.google.com/console/u/0/developers/

GCP(Google Cloud Platform):
https://console.cloud.google.com/apis/credentials



■参考
GPGSの実装でハマりやすい点:
https://qiita.com/flying_water_pot/items/eb18ad1e8520eb068907

UnityからAndroidの署名あり/なしビルド:
https://light11.hatenadiary.com/entry/2019/07/07/211057

GCPでOAuth同意画面の公開ステータスが「本番環境 or テスト環境」かチェック:
https://tyatran.hatenablog.com/entry/2020/12/29/140700

Xcodeの不要ファイルが重くなった場合の削除シェル:
https://qiita.com/star__hoshi/items/0ce9cd1c3793e6a951fc
posted by be-style at 10:31| Comment(0) | Unity

2021年03月24日

[Unity - iOS] AdMobバナー広告で「SDK tried to perform a networking task before being initialized」となる時の対処法

Google Mobile Ads Unity Plugin v5.4.0 を使っているときに、AdMobバナー広告のイベント(HandleOnAdFailedToLoad)で、実機で実行したときに

SDK tried to perform a networking task before being initialized.

というエラーメッセージが出た。

原因は、先の記事「[Unity - iOS] AdMobプラグインを使ったときにビルドしても「.xcworkspace」が出力されないときの対処法」にて、「External Dependency Manager」のバージョンを
v1.2.161 -> v1.2.164
に上げてしまったことが原因だった。
v1.2.164->v1.2.163
にバージョンを下げたことで広告が表示されるようになったので、手順をメモ。


手順

(1) Packages 内の「External Dependency Manager」のバージョンを確認
AdMobのプラグインでは「v1.2.161」だったけど、最新の「v1.2.164」に上げた状態になっていた。

2021-03-24_01.png

(2) Package Managerを使ってバージョンを「v1.2.163」に戻す

先に記事にてGoogleのレジストリを登録していたので、「My Registories」を選択。

2021-03-24_02.png

「External Dependency Manager」の「v1.2.163」を選択し、「Update to 1.2.163」を押して実行する。

2021-03-24_03.png

(3) Package内を確認。

ちゃんとバージョンがv1.2.163に変わったことを確認。

2021-03-24_04.png

これで広告が表示された。
何でもかんでも最新版がいいとは限らないんだなー。
posted by be-style at 00:09| Comment(0) | Unity

2021年03月23日

[Unity - iOS] AdMobプラグインを使ったときにビルドしても「.xcworkspace」が出力されないときの対処法

AdMobプラグイン(v5.4.0)を導入してビルドしたとき、「.xcworkspace」が出力されずに困ったときがあったので、メモ。


環境

・Unity2020.3.0f1
・XCode12.4
AdMobプラグイン for Unity v5.4.0


目指す形は、「iOS Resolver Settings」というメニューから、「Xcode Workspace - Add Cocoapods to Xcode workspace」を設定すること(下図)。

2021-03-22_10.png


事前チェック

Unityメニュー > Assets > External Dependency Manager > iOS Resolver
が存在しないことを確認。
もしこのメニューが存在するなら、以下の導入手順は不要です。
上図にある「Xcode Workspace - Add Cocoapods to Xcode workspace」が設定できていれば問題解決です。

2021-03-22_07.png


External Dependency Manager 導入手順

(1) Packages に「External Dependency Manager」が入ってないことを確認。

2021-03-22_01.png

(2) AdMobプラグインからインポートする
AdMobプラグイン for Unity v5.4.0から「GoogleMobileAds-v5.4.0.unitypackage」をダウンロードして、「External Dependency Manager」をUnityプロジェクトにインポートする。

2021-03-22_02.png

(3) Assetの内容を確認
すると、「External Dependency Manager」がAssets配下にインポートされます。

2021-03-22_03.png

(4) Unityが依存関係を解決してくれる
(3)が終わると、自動で「Package Manager Resolver」が立ち上がるので、何も考えずに「Add Selected Register」を選択。

2021-03-22_04.png

(5) 「External Dependency Manager」をPackageに移す
(4)が終わると、「Migrating Packages」が立ち上がり、バージョンを「v1.2.161->v1.2.164」に上げると言われるので、何も考えずに「Apply」を押す。
※(4)の操作が、AdMob広告が表示されなくなる原因になるとは思ってもいなかった、
※v1.2.164ではなくv1.2.163だと問題なかった。そのときの対応は別記事にて。


2021-03-22_05.png

すると、 「External Dependency Manager」をPackageに移ったことが確認できる。

2021-03-22_06.png

(7) iOS Resolverを立ち上げる
Unityメニュー > Assets > External Dependency Manager > iOS Resolver > Settings
というメニューが出来ているので、選択する。

2021-03-22_09.png

(8) ビルド時に「.xcworkspace」が出力されるように設定する

2021-03-22_10.png

これで、iOS用にビルドしたときに「.xcworkspace」が出力されるようになった。
気づくのに苦労した。。。


Package Mangerから「External Dependency Manager」を入れる方法

上記はAdMobプラグインを使った方法だったけど、Package Managerを使って入れることも出来た。
Edit > Project Settings > 左メニューのPackage Manager を選択。

NameGame Package Registry by Google
URLhttps://unityregistry-pa.googleapis.com
Scope(s)com.google

を入力して、Applyボタンを押す。

2021-03-22_11.png

Window > Package Manager にて、レジストリを「My Registories」にすると、先ほど設定したGoogleのレジストリが表示される。

2021-03-22_12.png

ここから、「External Dependency Manager」をインストールすることができた。

2021-03-22_08.png

_/_/_/_/_/_/ 注意! _/_/_/_/_/_/
Package Managerからインストールする際、上記(3)の状態のように「Assets」内にも「External Dependency Manager」があると重複してしまいPackageManagerがおかしくなる。
必ず「Assets」内の「External Dependency Manager」を先に削除しておくこと。
posted by be-style at 23:49| Comment(0) | Unity