Google Play Games対応のゲームを作っていて、実績をアンロックした際に表示されるはずのポップアップが出なくてハマったことのメモです。
参考にしたのは公式のサンプルアプリ
https://github.com/playgameservices/android-basic-samples
上記の「TypeANumber」を参考に作成しました。
ある程度作り込み、アチーブメントのアンロックはできるが自動で表示されるはずのポップアップが表示されないことに気づきました。
原因1:実装が足りない
ポップアップを出すための実装が足りませんでした。
ネットで調べると同じ問題で悩んでいる人が多く、解決策がすぐに見つかりました。
解決策
1.アクティビティのレイアウトにポップアップ表示用の枠を追加します。
<FrameLayout android:id="@+id/game_popup_area" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </FrameLayout>
2.上記のポップアップ表示枠を、GameClientに設定する
private fun onConnected(googleSignInAccount: GoogleSignInAccount) { val gameClient = Games.getGamesClient(this, googleSignInAccount) gameClient.setViewForPopups(findViewById(R.id.game_popup_area))
設定するタイミングは、サインイン後です。
原因2:ポップアップ表示枠の配置がまずかった
原因1の解決策で解決するはずだったのに何故か表示されませんでした。
解決策
どうやら「wrap_content」で適当に置いたのがダメだったようです。
親要素いっぱいに広げて配置したら表示されるようになりました。
<FrameLayout android:id="@+id/game_popup_area" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </FrameLayout>
最後に
公式サンプルアプリに「実績アンロック時のポップアップは自動で出るから実装しなくていいよ」と書いてあるけど丸っと信じてはいけなかった。
以上。