Итак, выпуск игры LibGDX для iOS с Admob и GPGS или другими привязками — болезненный процесс, но мне удалось заставить все работать, и теперь моя игра находится в состоянии ожидания проверки. Во время этого ответа похоже, что Apple отклоняет приложения, использующие игровые сервисы Google Play, потому что GPGS SDK переводит пользователя в Safari для входа в систему. Это неприемлемо для Apple, потому что это «плохой пользовательский интерфейс». На самом деле, когда пользователь пытается войти в систему, GPGS SDK ищет установленный Google+, чтобы войти в систему, и если его не удается найти, затем он открывает браузер Chrome и, наконец, Safari, если Chrome не установлен. После правильной интеграции GPGS и попытки отправить свой двоичный файл в Apple я столкнулся с другой проблемой, связанной с тем, что Google SDK не был подписан. Поскольку казалось, что мое приложение будет отклонено, даже если я решу эту проблему, я решил отказаться от GPGS и вместо этого использовать Apple Game Center. Тем не менее, мне все же удалось заставить GPGS с Admob работать на моем тестовом устройстве, поэтому я могу ответить, как здесь.
Во-первых, примеры в BlueRiverInteractive не так уж полезны для LibGDX. игра. Все UIWindow, UIViewController и UIView, с которыми вам не нужно связываться. Ваш класс IOSLauncher должен расширять Delegate вместо UIApplicationDelegateAdapter. Если вы заглянете внутрь Delegate, он позаботится о настройке UIApplication, UIWindow и других вещей iOS для вашего приложения. Когда вы расширите его, вам придется реализовать createApplication(). Это мой например:
@Override
protected IOSApplication createApplication() {
final IOSApplicationConfiguration config = new IOSApplicationConfiguration();
config.orientationLandscape = false;
config.orientationPortrait = true;
config.useAccelerometer = false;
config.useCompass = false;
iosApplication = new IOSApplication(new SplishGame(this), config);
return iosApplication;
}
Оставьте iosApplication в качестве члена поля вашего класса IOSLauncher. Через него вы можете получить UIWindow, который вам нужен для показа межстраничных объявлений и списков лидеров/достижений.
Во-вторых, убедитесь, что ваш класс IOSLauncher переопределяет didFinishLaunching(приложение UIApplication, UIApplicationLaunchOptions launchOptions) вместо метода didFinishLaunching только с одним параметром, иначе он не будет вызван. В вашем методе didFinishLaunching вы можете создать экземпляр своего класса менеджера GPGS (подробнее об этом чуть позже) и попытаться войти в систему в автоматическом режиме. Это напоминает о другой проблеме, с которой я столкнулся при попытке интегрировать GPGS — убедитесь, что вы используете объект менеджера GPGS, чтобы упростить жизнь (PlayServicesManager). В проекте привязок GPGS есть два примера, и я изначально рассматривал «сложный в использовании» пример, в котором не используется класс PlayServicesManager. После того, как вы настроили свой объект менеджера, вы можете вызывать простые методы, такие как manager.login() или manager.getLeaderboards(), чтобы делать то, что вам нужно.
Чтобы инициализировать класс менеджера в методе didFinishLaunching, сделайте следующее:
playManager = new PlayServicesManager();
playManager.setClientId(CLIENT_ID);
playManager.setUserDataToRetrieve(true, false);
playManager.setViewController(iosApplication.getUIViewController());
playManager.didFinishLaunching();
Для Game Center это так:
gcManager = new GameCenterManager(iosApplication.getUIWindow(), new GameCenterListener() {...(overridden methods left blank)
gcManager.login();
Затем код из вашего основного проекта может вызывать необходимые функции через ваш интерфейс ActionResolver — или как вы назвали свой родной интерфейс. Таким образом, у вас будут такие вещи, как:
@Override
public void getLeaderboards() {
log.debug("Showing all leaderboards.");
playManager.showLeaderboardsPicker();
}
И все должно работать.
Еще одна вещь, которую, по-видимому, вам нужно сделать (только для GPGS), — это скопировать этот метод в ваш класс IOSLauncher:
// copy-paste this to your app delegate.
@Override
public boolean openURL(UIApplication application, NSURL url, String sourceApplication, NSPropertyList annotation) {
return GPPURLHandler.handleURL(url, sourceApplication, annotation);
}
Так вот об этом, насколько я помню. Пожалуйста, напишите, если вы думаете, что что-то не так или я забыл что-то важное.
person
Barodapride
schedule
13.12.2014