Игра libGDX iOS не получает ввод

В настоящее время я работаю над портированием моей игры LibGDX на iOS с помощью roboVM. Все работает, за исключением того, что я столкнулся с некоторыми проблемами, связанными с работой моих привязок для admob и игровых сервисов Google Play. Мне удалось решить проблему с Admob, но та же проблема возникла для GPGS, и я не могу найти способ ее обойти. привязки — это крючки, которые связаны с различными SDK для iOS. Я использую их для показа рекламы Admob и взаимодействия с сервисами Google Play.

Я пытался следовать Sample.java здесь:

Пример. Java

Но у меня есть некоторые проблемы. Во-первых, метод didFinishLaunching(), который переопределяет пример, неверен и никогда не вызывается. Вместо этого он должен переопределить didFinishLaunching(приложение UIApplication, UIApplicationLaunchOptions launchOptions).

Основная проблема, с которой я столкнулся сейчас, заключается в том, что игра не принимает пользовательский ввод из-за вызова window.makeKeyAndVisible(). Если я уберу этот метод, все будет отлично работать, но я не смогу показывать рекламу и сервисы Google Play. Я увижу предупреждение о том, что окно не находится в иерархии представлений. Я смог обойти это для межстраничных объявлений admob, вызвав только makeKeyAndVisible() перед показом объявления и вызвав setHidden() после того, как оно было отклонено в межстраничном делегате. Однако у меня нет доступа, чтобы сделать то же самое с сервисами Google Play. Не похоже, чтобы кто-то еще сталкивался с этой проблемой. В чем может быть проблема? Я не очень хорошо знаком с iOS, поэтому я не понимаю, что должно произойти, чтобы мое приложение правильно получало входные данные.


person Barodapride    schedule 08.12.2014    source источник


Ответы (1)


Итак, выпуск игры 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
comment
Один из способов обойти Apple, отклонивший мою игру, использующую GPGS, заключался в том, чтобы не входить в систему автоматически. Я поместил кнопку в главное меню, чтобы пользователь мог инициировать вход в систему GPGS, если захочет. Группа проверки Apple была в порядке с этим. - person XdebugX; 13.08.2015