Всплывающее окно достижений в 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))

Вы можете вызвать этот код из любой новой активности, которую вы открываете, и всплывающее окно появится там, как только вы разблокируете свои достижения.

Другие вопросы по тегам