2014-12-08 11 views
5

Obecnie pracuję nad przeniesieniem mojej gry LibGDX na iOS przy użyciu roboVM. Wszystko działa, z wyjątkiem problemów związanych z działaniami związanymi z AdBob i usługami gier Google Play. Udało mi się obejść problem z AdMobem, ale ten sam problem pojawił się w przypadku GPGS i nie potrafię go obejść. bindings to haki, które wiążą się z różnymi pakietami SDK dla systemu iOS. Używam ich do wyświetlania reklam AdMob i interfejsu z usługami Google Play.libGDX iOS gra nie otrzymuje wejścia

Próbowałem śledzić Sample.java tutaj:

Sample.java

Ale ma pewne problemy dla mnie. Przede wszystkim metoda didFinishLaunching() przesłaniająca próbki jest niepoprawna i nigdy nie zostanie wywołana. Powinien zastąpić aplikację didFinishLaunching (aplikacja UIApplication, UIApplicationLaunchOptions launchOptions).

Głównym problemem, który mam teraz jest to, że gra nie akceptuje danych wejściowych użytkownika z powodu wywołania window.makeKeyAndVisible(). Jeśli zastosuję tę metodę, wszystko działa świetnie, ale nie mogę wyświetlać reklam ani wyświetlać usług Google Play. Zobaczę ostrzeżenie, że okno nie jest w hierarchii widoku. Mogłem obejść ten problem w przypadku reklam pełnoekranowych admob przez wywołanie metody makeKeyAndVisible() przed wyświetleniem reklamy i wywołaniem setHidden() po jej odrzuceniu w delegacie pełnoekranowym. Jednak nie mam do tego dostępu w usługach Google Play. Wygląda na to, że nikt inny nie napotyka tego problemu. Jaki może być problem? Nie jestem bardzo zaznajomiony z systemem iOS, więc nie dostaję tego, co musi się stać, aby moja aplikacja poprawnie odbierała dane wejściowe.

Odpowiedz

3

Okej, więc wydanie gry LibGDX na iOS z AdMob i GPGS lub innymi powiązaniami jest bolesnym procesem, ale udało mi się sprawić, że wszystko działa, a moja gra jest już w stanie oczekiwania na sprawdzenie. W chwili udzielenia odpowiedzi wygląda na to, że Apple odrzuca aplikacje korzystające z Usług gier Google Play, ponieważ pakiet GPGS SDK przenosi użytkownika do Safari w celu zalogowania. Jest to niedopuszczalne dla Apple, ponieważ jest "kiepskim doświadczeniem użytkownika". W rzeczywistości, gdy użytkownik próbuje się zalogować, GPGS SDK szuka instalacji Google+ w celu zalogowania, jeśli nie można go znaleźć, to następnie otwiera przeglądarkę Chrome, a na końcu Safari, jeśli Chrome nie jest zainstalowany. Po prawidłowym zintegrowaniu GPGS i próbie przesłania mojego pliku binarnego do Apple napotkałem kolejny problem związany z brakiem podpisu Google SDK. Ponieważ wyglądało na to, że moja aplikacja zostałaby odrzucona, nawet jeśli miałbym rozwiązać ten problem, postanowiłem zrezygnować z GPGS i zamiast tego użyć Apple Game Center. Mimo to wciąż byłem w stanie uzyskać GPGS z AdMobem pracującym na moim urządzeniu testowym, więc mogę odpowiedzieć jak tu.

Po pierwsze, próbki w BlueRiverInteractive nie są zbyt użyteczne w grze LibGDX. Wszystkie funkcje UIWindow, UIViewController i UIView, z którymi nie powinieneś się bawić. Twoja klasa IOSLauncher powinna przedłużyć Delegata zamiast UIApplicationDelegateAdapter. Jeśli zajrzysz do wnętrza Delegata, dba o ustawienie UIApplication, UIWindow i innych rzeczy iOS dla twojej aplikacji. Po jej rozszerzeniu będziesz zmuszony do implementacji createApplication(). Jest to kopalnia na przykład:

@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; 
} 

Przechowywać iosApplication jako członek pola klasy IOSLauncher. Dzięki niemu możesz uzyskać UIWindow, w którym musisz wyświetlać reklamy pełnoekranowe i Tabele wyników/osiągnięcia.

Po drugie, upewnij się, że klasa IOSLauncher jest nadrzędna. W swojej metodzie didFinishLaunching możesz utworzyć instancję klasy menedżera GPGS (więcej o tym za chwilę) i spróbować zalogować się w trybie cichym.Co przypomina o innym problemie, na który natknąłem się podczas próby integracji GPGS - upewnij się, że używasz obiektu menedżera GPGS, aby ułatwić sobie życie (PlayServicesManager). Są dwie próbki w projekcie wiązania GPGS i początkowo patrzyłem na "trudny w użyciu", który nie używa klasy PlayServicesManager. Po skonfigurowaniu obiektu menedżera można wywołać proste metody, takie jak manager.login() lub manager.getLeaderboards(), aby wykonać to, co trzeba.

Aby zainicjować swoją klasę menedżera w metodzie didFinishLaunching to zrobić:

playManager = new PlayServicesManager(); 
    playManager.setClientId(CLIENT_ID); 
    playManager.setUserDataToRetrieve(true, false); 
    playManager.setViewController(iosApplication.getUIViewController()); 
    playManager.didFinishLaunching(); 

Dla Game Center to tak:

gcManager = new GameCenterManager(iosApplication.getUIWindow(), new GameCenterListener() {...(overridden methods left blank) 
gcManager.login(); 

Następnie kod tworzą swój podstawowy projekt może wywołać niezbędne funkcje poprzez Twój interfejs ActionResolver - lub jakkolwiek nazwałeś swój macierzysty interfejs. Tak więc masz coś takiego:

@Override 
    public void getLeaderboards() { 
      log.debug("Showing all leaderboards."); 
      playManager.showLeaderboardsPicker(); 
    } 

I wszystko powinno działać.

Jeszcze jedna rzecz, która widocznie trzeba zrobić (tylko dla GPGS) jest skopiować tę metodę w swojej klasie 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); 
    } 

Więc to o tym o ile pamiętam. Proszę pisać, jeśli uważasz, że coś jest nie tak lub zapomniałem coś ważnego.

+0

Jednym ze sposobów, w jaki pokonałem Apple, odrzucając moją grę, która używa GPGS, było automatyczne logowanie. W menu głównym wcisnąłem przycisk, aby użytkownik mógł zainicjować logowanie GPGS, gdyby chciał. Zespół oceny Apple był z tym w porządku. – XdebugX

Powiązane problemy