Всплывающее окно достижений в Google Play Games не отображается
Я открываю достижение, используя этот простой метод из документации разработчиков:
Games.Achievements.unlock(getApiClient(), "my_achievement_id");
Достижение разблокируется, но всплывающее окно не отображается. Там также нет всплывающего окна при входе в Google Play Games - который подключен.
5 ответов
Некоторое время я боролся с этим, поэтому решил поделиться им на stackru. Я описал простое решение этой проблемы в блоге моего разработчика.
Вот короткая версия:
Просто добавьте вид в макеты, на которых вы хотите отобразить достижения, например:
<FrameLayout
android:id="@+id/gps_popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp" />
Когда у вас есть готовый макет, вы должны выполнить его внутри своей деятельности или фрагмента:
Games.setViewForPopups(getApiClient(), findViewById(R.id.gps_popup));
Вы должны быть уверены, что ваш GoogleApiClient подключен, в противном случае ваше приложение будет зависать.
<FrameLayout
android:id="@+id/gps_popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp" />
Это то же самое в Яцек Kwiecień ответ
GamesClient gamesClient = Games.getGamesClient(MainActivity.this, GoogleSignIn.getLastSignedInAccount(context));
gamesClient.setViewForPopups(findViewById(R.id.gps_popup));
Это изменилось, потому что setViewForPopups с 2 параметрами устарел.
Яцек и user3782779 ответы не помогли мне, мне пришлось сделать следующее:
GamesClient gamesClient = Games.getGamesClient(this, GoogleSignIn.getLastSignedInAccount(this));
gamesClient.setViewForPopups(findViewById(android.R.id.content));
gamesClient.setGravityForPopups(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
Была такая же проблема. Я решил это, добавив иконку к достижению. Я не шучу, это действительно странно, но после этого заработало. Обратите внимание, что я говорю о неопубликованном проекте, я просто тестировал свое приложение и задавался вопросом, что происходит.
Единственный
activity.window.decorView.findViewById(android.R.id.content)
У меня была такая же проблема с всплывающим окном достижения. Всплывающее окно «Добро пожаловать обратно» отображалось правильно, просто используя мой собственный вид, но как только я начал открывать другие экраны, где я хотел показать всплывающее окно с разблокированным достижением, оно не работало. Единственное, что в итоге сработало, это использование
val gamesClient = Games.getGamesClient(activity, googleSignInAccount)
gamesClient.setGravityForPopups(Gravity.TOP or Gravity.CENTER_HORIZONTAL)
gamesClient.setViewForPopups(activity.window.decorView.findViewById(android.R.id.content))
Вы можете вызвать этот код из любой новой активности, которую вы открываете, и всплывающее окно появится там, как только вы разблокируете свои достижения.