Для доступа к функционалу сервисов Google Play Games вашей игре необходимо предоставить учетную запись авторизованного игрока. В этом документе описано, как реализовать удобную аутентификацию в вашей игре.
SDK Play Games Services v2 вносит ряд улучшений, которые увеличивают количество пользователей, авторизованных в вашей игре, и упрощают разработку:
- Улучшения для пользователей:
- После выбора учетной записи по умолчанию пользователи проходят аутентификацию без необходимости взаимодействия с каким-либо запросом.
- Пользователям больше не нужно скачивать приложение Play Games для аутентификации в сервисах Play Games или создания новой учетной записи.
- Теперь пользователи могут управлять своими учетными записями Play Games Services для нескольких игр с одной страницы.
- Улучшения для разработчиков:
- Клиентскому коду больше не нужно обрабатывать процесс аутентификации или выхода из системы, поскольку вход в систему запускается автоматически при старте игры, а управление учетной записью осуществляется в настройках операционной системы.
Интеграция с новым клиентом
В этом разделе показано, как выполнить интеграцию нового клиента с сервисом Play Games Services Sign In v2.
Добавьте зависимость
Добавьте зависимость Play Game Services SDK в корневой файл build.gradle вашего приложения. Если вы используете Gradle, вы можете добавить или обновить зависимость следующим образом:
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
Укажите идентификатор проекта.
Чтобы добавить идентификатор проекта Play Games Services SDK в ваше приложение, выполните следующие шаги:
В файл
AndroidManifest.xmlвашего приложения добавьте следующий элемент<meta-data>и атрибуты к элементу<application>:<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>Укажите ссылку на строковый ресурс
@string/game_services_project_id, используя в качестве значения идентификатор проекта игровых сервисов вашей игры. Идентификатор проекта игровых сервисов можно найти под названием вашей игры на странице «Конфигурация» в консоли Google Play.В файле
res/values/strings.xmlдобавьте ссылку на строковый ресурс и укажите в качестве значения идентификатор вашего проекта. В Google Play Console идентификатор вашего проекта можно найти под названием вашей игры на странице «Конфигурация» . Например:<!-- res/values/strings.xml --> <resources> <!-- Replace 0000000000 with your game's project id. Example value shown above. --> <string translatable="false" name="game_services_project_id"> 0000000000 </string> </resources>
Инициализируйте SDK.
Инициализируйте Play Games SDK в функции обратного вызова onCreate(..) вашего класса Application .
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
Получите результат аутентификации.
При запуске игры она всегда будет пытаться аутентифицировать пользователя. Для аутентификации пользователя необходимо убедиться в успешной аутентификации и получить его идентификатор игрока (Player ID).
Для проверки попытки аутентификации вызовите метод GamesSignInClient.isAuthenticated() и используйте addOnCompleteListener для получения результатов. Например:
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
boolean isAuthenticated =
(isAuthenticatedTask.isSuccessful() &&
isAuthenticatedTask.getResult().isAuthenticated());
if (isAuthenticated) {
// Continue with Play Games Services
} else {
// Show a sign-in button to ask players to authenticate. Clicking it should
// call GamesSignInClient.signIn().
}
});
Предотвратить автоматическое создание профилей.
Вы можете отключить автоматические запросы на создание профиля через файл манифеста. Это позволит пользователям без профиля Play Games Services продолжить загрузку игры без запроса на создание профиля Play Games Services. Для получения дополнительной информации см. раздел «Параметры создания профиля» .
Для использования этой функции необходимо выполнить следующие условия:
- На устройстве ни в одной из учетных записей Google не создан профиль Play Games Services.
- Ваша игра интегрирована с Play Games Services SDK
com.google.android.gms:play-services-games-v2:21.0.0или более поздней версии.
Чтобы предотвратить автоматическое появление запросов на создание профиля, выполните следующие действия:
В файле
AndroidManifest.xmlдобавьте тегcom.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATIONв элемент<meta-data>и атрибуты к элементу<application>:<application> ... <meta-data android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION" android:value="true" /> ... </application>Установка этого флага в значение true сообщает Play Games Services, что процесс создания профиля будет обрабатываться вашей игрой. Следовательно, Play Games Services не будет автоматически отображать интерфейс создания профиля для пользователей устройства, у которых нет существующего профиля Play Games Services.
При вызове любого API сервисов Play Games код состояния
GamesClientStatusCodes.SIGN_IN_REQUIREDуказывает на то, что вызов завершился неудачей, поскольку пользователь не смог пройти автоматическую аутентификацию из-за отсутствия профиля в сервисах Play Games.Это позволяет пользователям без профиля Play Games Services продолжить использование реализованных вами методов аутентификации без немедленного запроса на создание профиля Play Games Services. Создание профиля можно инициировать вызовом метода
GamesSignInService.signin().import com.google.android.gms.games.PlayGames; ... // Get the achievements client using Play Games services. AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity()); achievementsClient.getAchievementsIntent() .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { int statusCode = ((ApiException) exception).getStatusCode(); if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) { // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services. // Call GamesSignInService.signin() to prompt for // authentication at a suitable time which will trigger the // profile creation UI. // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status. } } });
После добавления тега подавления используйте окно
logcatдля проверки добавления. В выводеlogcatсодержится сообщение, похожее на следующее: "Игра отказалась от автоматического запроса на создание профиля (с использованием манифеста)".