Если в точности следовать указаниям Google по интеграции с GPGS (Google Play Games Services), то гарантированы дикие глюки при попытке откомпилировать получившегося монстра. И дело тут не в том, что вы не найдёте в Android Studio пункта File > Import Module
, проблема в том, что модуль BaseGameUtils
рассчитан на старые версии GPGS и SDK.
Итак имеем:
Клонируем android basic samples и копируем оттуда содержимое android-basic-samples/BasicSamples/libraries/BaseGameUtils/src/main/java/
к себе в main/java
для того чтобы сохранить иерархию com/google/example/games/basegameutils/
.
Также забираем android-basic-samples/BasicSamples/libraries/BaseGameUtils/src/main/res/values/gamehelper_strings.xml
, потом добавляем содержимое strings.xml
ко своим строковым ресурсам.
Пробуем make project
и исправляем мелочи, вроде не найденного модуля R
, это легко.
Несколько импортов:
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.games.Games;
import com.google.example.games.basegameutils.BaseGameUtils;
import com.google.example.games.basegameutils.GameHelper;
Кроме упомянутых в инструкции переменных нам понадобится ещё одна:
private GameHelper gameHelper;
Она нужна чтобы задать количество запросов об авторизации. В onCreate
:
// init game services
gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
gameHelper.enableDebugLog(true);
gameHelper.setMaxAutoSignInAttempts(1);
gameHelper.setup(this);
Неизбежной частью добавления GPGS являются проблемы с ключами. Этому немало способствует несоответствующая реальности документация от Google. На самом деле всё просто, если действовать аккуратно. Итак у нас должно быть следующее состояние:
Пункт 2 предусматривает перечисление адресов тестеров в “Тестировании” и разрешении тестирования альфа версии, тех же, что и в описании альфа-версии (пункт 3).
Далее нужно проверить, что все ключи нашего приложения (конечный и отладочный) отражены в пункте “Связанные приложения”. Для этого запускаем Консоль разработчика и просматриваем все ключи с типом “Андроид”, для каждого ключа должно быть связанное приложение.
Как просто!
Кстати, если ключ не отражен, то нужно просто добавить наше приложение ещё раз, оно подхватит первый свободный ключ.
Как требует Google не нужно предлагать авторизироваться в GPGS если пользователь когда-то отказался.
Хранить этот флажок в настройках не составляет труда, осталось только поймать сам факт отказа. Для этого нужен обработчик:
public void onActivityResult(int requestCode, int responseCode,
Intent intent) {
gameHelper.onActivityResult(requestCode, responseCode, intent);
Settings.autoLoginGPGSOn = (responseCode != Activity.RESULT_CANCELED);
}
Класс настроек, просто так:
public class Settings {
public static boolean soundOn = true;
public static boolean musicOn = true;
public static boolean introOn = true;
public static boolean autoLoginGPGSOn = true;
public final static String file = ".my_cool_settings";
private static SharedPreferences prefs ;
public static void load(GLGame game) {
prefs = game.getSharedPreferences(file, 0);
soundOn = prefs.getBoolean("soundOn", true);
musicOn = prefs.getBoolean("musicOn", true);
introOn = prefs.getBoolean("introOn", true);
autoLoginGPGSOn = prefs.getBoolean("autoLoginGPGSOn", true);
}
public static void save(GLGame game) {
prefs = game.getSharedPreferences(file, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("soundOn", soundOn);
editor.putBoolean("musicOn", musicOn);
editor.putBoolean("introOn", introOn);
editor.putBoolean("autoLoginGPGSOn", autoLoginGPGSOn);
editor.apply();
}
}