С помощью Google Play Games Services вы можете встроить ряд функций в свои приложения для Android, включая списки лидеров, достижения, многопользовательский игровой процесс, облачное хранилище и вход в Google+.
В этом уроке мы рассмотрим шаги, которые необходимо предпринять, чтобы добавить достижения в простую игру для Android. Мы подготовим среду разработки для использования Google Play Game Services, определим достижение в консоли разработчика и реализуем взаимодействие достижений в игре.
1. Подготовьте свою IDE
  Шаг 1 
Чтобы использовать инструменты Google Play Game Services, нам нужно подготовить нашу IDE. Помимо библиотеки сервисов Google Play, которая необходима для всех сервисов Google, мы будем использовать ресурс BaseGameUtils , который содержит ряд классов, которые особенно полезны при разработке игр.
Начните с создания нового приложения в вашей IDE. Пример кода этого руководства содержит простую игру, в которой пользователь должен угадать число, выбранное случайным образом. Вы можете использовать этот проект, чтобы начать разработку с Google Play Game Services, если хотите. Создайте новый проект Android и выберите для него имена и настройки.
Если вы не используете образец приложения в загрузке, возможно, вы захотите реализовать свой игровой процесс на этом этапе, учитывая, для чего вы собираетесь использовать достижение. Для примера приложения мы просто наградим достижение, когда пользователь выберет правильный ответ.
Шаг 2
На этом этапе мы готовим IDE и наш проект к использованию Сервисов Google Play Games и утилит. Откройте свой Android SDK Manager, который вы можете найти в меню « Окно» в Eclipse. Прокрутите вниз, пока не увидите папку Extras , разверните ее и выберите Службы Google Play и Google Repository . Вам также может понадобиться Платформа API Google, если вы планируете тестировать на эмуляторе, поэтому выберите это. Вы можете найти последнее в каталогах для последних версий платформы Android. Установите выбранные пакеты, принимая любые лицензии по мере необходимости.
Шаг 3
Нам также необходимо включить несколько ресурсов в фактическое рабочее пространство, чтобы мы могли ссылаться на них в приложении, начиная с библиотеки сервисов Google Play . Вы должны найти его в / extras / google / google_play_services / libproject / google-play-services_lib / в вашей папке SDK. Сделайте копию библиотеки и вставьте ее в другое место на вашем компьютере.
Вернувшись в Eclipse, импортируйте библиотеку, выбрав « Импорт»> « Android»> « Импортировать существующий код Android в рабочую область» из меню « Файл» . Найдите папку, в которую вы скопировали библиотеку, выберите библиотеку и импортируйте ее. Библиотека должна появиться как проект в вашем обозревателе пакетов Eclipse и рабочей области.
Щелкните правой кнопкой мыши по проекту библиотеки в Eclipse, выберите « Свойства» и перейдите в раздел Android. Выберите цель сборки API Google и убедитесь, что флажок Is Library установлен. Теперь библиотека должна быть готова к использованию в вашем приложении.
Шаг 4
Теперь давайте добавим ресурс BaseGameUtils в вашу среду IDE. Загрузите его из раздела « Примеры игр » на портале разработчиков Google . Поскольку код размещен на GitHub, вы можете просмотреть его и получить доступ к его руководствам на GitHub.
Импортируйте ресурс BaseGameUtils в Eclipse, используя тот же метод, который вы использовали для библиотеки Play Services, выбрав « Импорт»> «Android»> « Импортировать существующий код Android в рабочую область» из меню « Файл» . Щелкните правой кнопкой мыши проект BaseGameUtils в проводнике пакетов и убедитесь, что флажок Is Library установлен.
Теперь мы можем ссылаться как на библиотеку служб Google Play, так и на ресурсы BaseGameUtils в нашем приложении.
  Шаг 5 
Выберите свое игровое приложение в Eclipse Package Explorer, щелкните его правой кнопкой мыши и выберите « Свойства», как вы делали для импортированных ресурсов. В этот раз в разделе Android нажмите кнопку « Добавить» в области « Библиотека» . Выберите и библиотеку Google Play Services, и BaseGameUtils, чтобы добавить в качестве библиотек свой проект.
Это IDE, созданная для разработки с помощью Games Services.
2. Подготовьте свою игру в консоли разработчика
  Шаг 1 
Чтобы использовать достижения в своей игре, вам необходимо добавить игру в консоль разработчика Google Play . Войдите в консоль разработчика, нажмите кнопку « Игровые сервисы» слева от консоли и выберите « Настроить игровые сервисы Google Play», если вы ими ранее не пользовались.

Нажмите, чтобы добавить новую игру, выберите « Я пока не использую API Google в своей игре» и выберите название и категорию для своей игры. Нажмите Продолжить перейти к следующему шагу.

В разделе « Сведения об игре » все, что нужно добавить для тестирования приложения, — это название вашей игры.
  Шаг 2 
Нажмите « Связанные приложения» слева от списка игр на консоли разработчика. Выберите Android в списке связанных приложений.

Введите данные своего приложения, включая имя пакета, которое вы выбрали при его создании.

Нажмите « Сохранить» и продолжайте вверху и выберите « Авторизовать приложение» . Вам будет предложено ввести информацию о брендинге. Все, что вам нужно на данный момент, это название вашего приложения. На экране « Параметры идентификатора клиента» выберите « Установленное приложение» в качестве типа, « Android» в качестве типа установленного приложения и введите имя пакета.
Затем вам необходимо сгенерировать отпечаток сертификата подписи для авторизации. Для этого вам необходимо запустить утилиту keytool на вашем компьютере. Откройте терминал или командную строку и используйте следующую команду, но при необходимости обязательно измените ее в соответствии с расположением. Вы можете использовать отладочный сертификат во время тестирования.
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v  
Keytool должен выписать отпечаток сертификата. Выберите и скопируйте то, что появляется после SHA1, и вставьте его в консоль разработчика в разделе « Отпечаток пальца сертификата» . Нажмите « Создать клиент» и скопируйте идентификатор приложения, который вы видите в списке для вашей игры в консоли разработчика, который должен отображаться рядом с названием игры в верхней части страницы. Сохраните идентификатор приложения для последующего использования в вашем приложении.
3. Создайте достижение
Шаг 1
Находясь в консоли разработчика, нажмите кнопку « Достижения» слева от списка игр и нажмите « Добавить достижение» .

Прежде чем продолжить, вы можете проверить страницу достижений в Руководстве разработчика, чтобы убедиться, что вы понимаете концепцию достижения в играх Google Play. Введите имя, описание и значок для своего достижения, а также выберите состояние, очки и порядок в списке. В нашем примере игры мы использовали Guessed Correctly в качестве имени, выбрали правильное число в качестве описания и простое изображение звезды в качестве значка. Нажмите Сохранить, чтобы сохранить достижение.

Скопируйте идентификатор достижения, который вы можете увидеть рядом с достижением в консоли разработчика.
Шаг 2
Если вы перейдете в раздел « Тестирование » для своей игры, вы можете установить адреса электронной почты для людей, которые будут иметь тестовый доступ к игре. По умолчанию консоль разработчика будет вставлять адрес электронной почты вашей учетной записи Google, поэтому вы сможете использовать его сразу. Добавьте любые другие тестовые электронные письма, которые вам нужны, и вы сможете выйти из своей учетной записи Google.
4. Подготовьте свою игру для доступа к игровым сервисам.
Шаг 1
В Eclipse мы можем подготовить приложение для доступа к Сервисам игр. Мы собираемся использовать метод, описанный в разделе « Выполнение входа в Android», для того, чтобы пользователи могли входить и выходить из своих учетных записей Google. Это будет включать использование кнопок для входа и выхода, поэтому добавьте их в макет вашего приложения следующим образом:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 | <!— sign-in button —> <com.google.android.gms.common.SignInButton  android:id=»@+id/sign_in_button»  android:layout_width=»wrap_content»  android:layout_height=»wrap_content» /> <!— sign-out button —> <Button  android:id=»@+id/sign_out_button»  android:layout_width=»wrap_content»  android:layout_height=»wrap_content»  android:text=»Sign Out»  android:visibility=»gone» /> | 
  Шаг 2 
  Измените основную активность, чтобы расширить BaseGameActivity .  Это позволит нам автоматизировать определенные этапы процесса входа для ваших пользователей.  Также Activity класс Activity обрабатывать клики: 
| 1 | public class MainActivity extends BaseGameActivity implements View.OnClickListener | 
Вам понадобится следующий импорт:
| 1 2 | import com.google.android.gms.games.Games; import com.google.example.games.basegameutils.BaseGameActivity; | 
  Теперь onCreate ссылки на кнопки в onCreate : 
| 1 2 | findViewById(R.id.sign_in_button).setOnClickListener(this); findViewById(R.id.sign_out_button).setOnClickListener(this); | 
  Мы ответим на нажатия кнопок в onClick как вы можете видеть ниже: 
| 01 02 03 04 05 06 07 08 09 10 11 | @Override public void onClick(View view) {     if (view.getId() == R.id.sign_in_button) {         beginUserInitiatedSignIn();     }     else if (view.getId() == R.id.sign_out_button) {         signOut();         findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);         findViewById(R.id.sign_out_button).setVisibility(View.GONE);     } } | 
  Мы используем методы из класса BaseGameActivity , который расширяем для обработки входа ( beginUserInitiatedSignIn и signOut ), соответственно обновляя пользовательский интерфейс.  Когда приложение запускается, оно будет пытаться автоматически войти в систему пользователя, но они также смогут использовать кнопки для входа и выхода. 
  Теперь нам нужно добавить два обратных вызова в наш класс Activity : 
| 01 02 03 04 05 06 07 08 09 10 | public void onSignInSucceeded() {     findViewById(R.id.sign_in_button).setVisibility(View.GONE);     findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE); } @Override public void onSignInFailed() {     findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);     findViewById(R.id.sign_out_button).setVisibility(View.GONE); } | 
Вы можете добавить больше кода к ним, если это необходимо. Вы также можете сохранить прогресс игрока, даже если он не вошел в систему, но это зависит от вашей игры. В примере приложения мы применяем простой подход, чтобы проверить, что у нас есть соединение со Службами Google, прежде чем мы попытаемся работать с достижением.
  Шаг 3 
Прежде чем вы начнете кодировать детали использования достижений в вашем приложении, вам нужно добавить в него некоторые данные. Начните с открытия или создания файла res / values / ids.xml и добавьте строковые ресурсы для приложения и идентификаторы достижений, которые вы скопировали из консоли разработчика:
| 1 2 | <string name=»app_id»>abcdefghij</string> <string name=»correct_guess_achievement»>abcdefghijkl</string> | 
Обновите содержимое, чтобы отразить значения вашего идентификатора. Теперь откройте Manifest проекта и добавьте в элемент приложения следующее:
| 1 2 3 4 5 6 | <meta-data  android:name=»com.google.android.gms.games.APP_ID»  android:value=»@string/app_id» /> <meta-data  android:name=»com.google.android.gms.version»  android:value=»@integer/google_play_services_version» /> | 
Мы ссылаемся на идентификатор приложения, который мы добавили в файл идентификаторов, и версию Play Services. Это все, что вам нужно, чтобы начать программировать ваши достижения.
5. Реализуйте свое достижение
  Шаг 1 
Теперь остается только разблокировать достижение, когда игрок в игре соответствует требованиям достижения. Естественно, это будет зависеть от цели вашей собственной игры, но если вы хотите выполнить процесс, используя пример приложения из этого руководства, то вы можете использовать следующий код. Мы начнем с основного макета, который включает кнопки входа и выхода, которые мы добавили ранее:
| 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | <RelativeLayout xmlns:android=»https://schemas.android.com/apk/res/android»  xmlns:tools=»http://schemas.android.com/tools»  android:layout_width=»match_parent»  android:layout_height=»match_parent»  android:paddingBottom=»@dimen/activity_vertical_margin»  android:paddingLeft=»@dimen/activity_horizontal_margin»  android:paddingRight=»@dimen/activity_horizontal_margin»  android:paddingTop=»@dimen/activity_vertical_margin»  tools:context=»com.example.fungame.MainActivity» >  <LinearLayout   android:id=»@+id/sign_in_buttons»   android:layout_width=»fill_parent»   android:layout_height=»wrap_content»   android:layout_alignParentTop=»true»   android:orientation=»horizontal» >   <!— sign-in button —>   <com.google.android.gms.common.SignInButton    android:id=»@+id/sign_in_button»    android:layout_width=»wrap_content»    android:layout_height=»wrap_content» />   <!— sign-out button —>  <Button   android:id=»@+id/sign_out_button»   android:layout_width=»wrap_content»   android:layout_height=»wrap_content»   android:text=»Sign Out»   android:visibility=»gone» />  <!— show achievements —>  <Button   android:id=»@+id/show_achievements»   android:layout_width=»wrap_content»   android:layout_height=»wrap_content»   android:text=»Achievements» />    </LinearLayout>  <RelativeLayout   android:layout_width=»fill_parent»   android:layout_height=»wrap_content»   android:layout_below=»@id/sign_in_buttons» >   <TextView    android:id=»@+id/guess_text»    android:layout_width=»fill_parent»    android:layout_height=»wrap_content»    android:layout_centerHorizontal=»true»    android:text=»Guess the number!»    android:textSize=»30sp»    android:textStyle=»bold» />   <LinearLayout    android:layout_width=»fill_parent»    android:layout_height=»wrap_content»    android:layout_below=»@id/guess_text»    android:orientation=»vertical» >    <LinearLayout     android:layout_width=»fill_parent»     android:layout_height=»wrap_content»     android:orientation=»horizontal» >     <Button      android:id=»@+id/btn7″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»7″      android:text=»7″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />     <Button      android:id=»@+id/btn8″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»8″      android:text=»8″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />     <Button      android:id=»@+id/btn9″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»9″      android:text=»9″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />    </LinearLayout>    <LinearLayout     android:layout_width=»fill_parent»     android:layout_height=»wrap_content»     android:layout_weight=»1″     android:orientation=»horizontal» >     <Button      android:id=»@+id/btn4″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»4″      android:text=»4″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />     <Button      android:id=»@+id/btn5″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»5″      android:text=»5″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />     <Button      android:id=»@+id/btn6″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»6″      android:text=»6″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />         </LinearLayout>    <LinearLayout     android:layout_width=»fill_parent»     android:layout_height=»wrap_content»     android:layout_weight=»1″     android:orientation=»horizontal» >     <Button      android:id=»@+id/btn1″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»1″      android:text=»1″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />     <Button      android:id=»@+id/btn2″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»2″      android:text=»2″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />     <Button      android:id=»@+id/btn3″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»3″      android:text=»3″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />         </LinearLayout>    <LinearLayout     android:layout_width=»fill_parent»     android:layout_height=»wrap_content»     android:layout_weight=»1″     android:orientation=»horizontal» >     <Button      android:id=»@+id/btn0″      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ff000033″      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»0″      android:text=»0″      android:textColor=»#ffffffff»      android:textSize=»30sp»      android:textStyle=»bold» />     <Button      android:id=»@+id/btnAgain»      android:layout_width=»0dp»      android:layout_height=»match_parent»      android:layout_margin=»1dp»      android:layout_weight=»1″      android:background=»#ffffff00″      android:enabled=»false»      android:gravity=»center»      android:onClick=»btnPressed»      android:padding=»5dp»      android:tag=»-1″      android:text=»Again»      android:textColor=»#ffffff00″      android:textSize=»30sp»      android:textStyle=»bold» />         </LinearLayout>   </LinearLayout>  </RelativeLayout> </RelativeLayout> | 
Обратите внимание, что мы также добавили кнопку « Достижения» рядом с кнопками для входа и выхода. Мы реализуем эту кнопку позже. Мы не будем вдаваться в подробности примера игры, если вы уже создали простые приложения, это не должно быть слишком сложно.
Игра выбирает случайное число от 0 до 9, и игрок может выбрать цифровую кнопку, чтобы сделать предположение. Игра обновляет текстовое поле, чтобы отразить, угадал ли пользователь правильно. Если сделать правильное предположение, достижение разблокируется.
Шаг 2
  Вернитесь к своему классу Activity и добавьте следующие переменные экземпляра: 
| 1 2 3 4 5 | private Button button0, button1, button2, button3, button4, button5,     button6, button7, button8, button9, buttonAgain; private int number; private Random rand; private TextView info; | 
  Они представляют кнопки, число, генератор случайных чисел и текстовое поле.  Добавьте следующее в ваш метод onCreate : 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | findViewById(R.id.show_achievements).setOnClickListener(this); button0=(Button)findViewById(R.id.btn0); button1=(Button)findViewById(R.id.btn1); button2=(Button)findViewById(R.id.btn2); button3=(Button)findViewById(R.id.btn3); button4=(Button)findViewById(R.id.btn4); button5=(Button)findViewById(R.id.btn5); button6=(Button)findViewById(R.id.btn6); button7=(Button)findViewById(R.id.btn7); button8=(Button)findViewById(R.id.btn8); button9=(Button)findViewById(R.id.btn9); buttonAgain=(Button)findViewById(R.id.btnAgain); info=(TextView)findViewById(R.id.guess_text); rand=new Random(); number=rand.nextInt(10); | 
  Теперь добавьте метод с именем disableNumbers , который мы будем вызывать, когда пользователь делает выбор номера: 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 | private void disableNumbers(){     button0.setEnabled(false);     button1.setEnabled(false);     button2.setEnabled(false);     button3.setEnabled(false);     button4.setEnabled(false);     button5.setEnabled(false);     button6.setEnabled(false);     button7.setEnabled(false);     button8.setEnabled(false);     button9.setEnabled(false);     buttonAgain.setEnabled(true); } | 
  enableNumbers другой метод, enableNumbers , который вызывается, когда пользователь решил снова играть: 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 | private void enableNumbers(){     button0.setEnabled(true);     button1.setEnabled(true);     button2.setEnabled(true);     button3.setEnabled(true);     button4.setEnabled(true);     button5.setEnabled(true);     button6.setEnabled(true);     button7.setEnabled(true);     button8.setEnabled(true);     button9.setEnabled(true);     buttonAgain.setEnabled(false); } | 
  Теперь добавьте метод, который мы установили в качестве атрибута onClick для кнопок: 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | public void btnPressed(View v){     int btn = Integer.parseInt(v.getTag().toString());     if(btn<0){         //again btn         number=rand.nextInt(10);         enableNumbers();         info.setText(«Guess the number!»);     }     else{         //number button         if(btn==number){             info.setText(«Yes! It was «+number);             if(getApiClient().isConnected())                 Games.Achievements.unlock(getApiClient(),                         getString(R.string.correct_guess_achievement));         }         else{             info.setText(«No! It was «+number);         }         disableNumbers();     } } | 
Мы вызываем утилиту Games Achievements, чтобы разблокировать достижение, если предположение пользователя было правильным, сначала проверив, что у нас есть соединение. Мы ссылаемся на достижение, используя созданный нами строковый ресурс.
  И последнее, но не менее важное: давайте позволим пользователю просматривать свои достижения в игре.  Это произойдет, когда они нажмут кнопку « Достижения» , которую мы добавили.  Расширьте код в методе onClick , добавив дополнительный else if : 
| 1 2 3 4 | else if (view.getId() == R.id.show_achievements){     startActivityForResult(Games.Achievements.getAchievementsIntent(         getApiClient()), 1); } | 
  Мы используем метод getAchievementsIntent с произвольным целым числом для отображения пользовательских достижений в игре.  Если нажать кнопку «Назад», игрок вернется в игру.  Подробнее о методах достижений см. На странице « Достижения в Android» в Руководстве разработчика. 
Шаг 3
Вы должны быть в состоянии запустить ваше приложение на этом этапе. Когда приложение запускается, оно запускает процесс авторизации пользователя и входа в систему, предлагая пользователю предоставить необходимые разрешения.

После входа пользователь увидит подтверждение.

Пользователь может выбрать, чтобы выйти и вернуться в любое время. Когда пользователь выбирает правильный номер, достижение разблокируется и отображается в верхней части игрового экрана.

Затем игрок может продолжить как обычно. Нажатие на кнопку Достижения покажет их достижения. Нажатие на кнопку «Назад» вернет игрока в игру.

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