2014-12-08 21 views
5

Attualmente sto lavorando al porting del mio gioco LibGDX su iOS usando roboVM. Tutto funziona, eccetto che ho riscontrato alcuni problemi con i miei binding per funzionare con AdMob e Google Play. Sono stato in grado di risolvere un problema con Admob, ma lo stesso problema è emerso per GPGS e non riesco a trovare un modo per aggirarlo. Gli bindings sono ganci che si collegano a vari SDK di iOS. Li uso per mostrare annunci Admob e interfaccia con i servizi di Google Play.Il gioco libGDX iOS non riceve input

Ho provato a seguire il Sample.java qui:

Sample.java

ma ha alcuni problemi per me. Prima di tutto il metodo didFinishLaunching() le sostituzioni del campione sono errate e non vengono mai chiamate. Dovrebbe invece sostituire didFinishLaunching (applicazione UIApplication, UIApplicationLaunchOptions launchOptions).

Il problema principale che sto avendo ora è che il gioco non accetta gli input dell'utente a causa della chiamata a window.makeKeyAndVisible(). Se tengo fuori questo metodo, tutto funziona alla grande ma non posso mostrare annunci né mostrare i servizi di Google Play. Verrà visualizzato un avviso relativo alla mancata visualizzazione della finestra nella gerarchia della vista. Sono stato in grado di aggirare questo problema per gli annunci interstitial di Admob chiamando solo makeKeyAndVisible() prima di mostrare l'annuncio e di chiamare setHidden() dopo che è stato chiuso nel delegato di interstitial. Tuttavia non ho accesso per fare lo stesso con i servizi di Google Play. Non sembra che qualcun altro stia incontrando questo problema. Quale potrebbe essere il problema? Non ho molta familiarità con iOS, quindi non capisco cosa deve accadere per far sì che la mia app riceva correttamente gli input.

risposta

3

Ok, rilasciare un gioco LibGDX su iOS con Admob e GPGS o altri binding è un processo doloroso, ma sono riuscito a far funzionare tutto e il mio gioco è ora in attesa di revisione. Al momento di questa risposta sembra che Apple stia rifiutando le app che utilizzano i servizi di gioco di Google Play perché l'SDK GPGS porta l'utente a Safari per accedere. Questo è inaccettabile per Apple perché è una "scarsa esperienza utente". In realtà quando un utente tenta di accedere all'SDK di GPGS cerca un'installazione di Google+ per accedere, se non è possibile trovarlo, quindi apre un browser Chrome e infine Safari se Chrome non è installato. Dopo aver correttamente integrato il GPGS e aver provato a inviare il mio binario ad Apple, mi trovavo di fronte a un altro problema relativo al mancato controllo dell'SDK di Google. Dal momento che sembrava che la mia app sarebbe stata respinta anche se dovessi risolvere il problema, ho deciso di abbandonare GPGS e utilizzare invece il Game Center di Apple. Detto questo, ero ancora in grado di far funzionare GPGS con Admob sul mio dispositivo di test in modo da poter rispondere come qui.

In primo luogo, i campioni in BlueRiverInteractive non sono così utili per un gioco LibGDX. Tutte le cose UIWindow, UIViewController e UIView con cui non dovresti avere a che fare. La tua classe IOSLauncher dovrebbe estendere Delegato invece di UIApplicationDelegateAdapter. Se si guarda all'interno del delegato, si occupa di impostare UIApplication, UIWindow e altri elementi iOS per la propria applicazione. Quando lo estendi, sarai costretto a implementare createApplication(). Questo è il mio ad esempio:

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

Mantieni iosApplication come membro di campo della classe IOSLauncher. Tramite questo, puoi ottenere la UIWindow di cui hai bisogno per mostrare gli interstitial e le classifiche/risultati.

La seconda cosa da fare è assicurarsi che la classe IOSLauncher stia eseguendo l'override di didFinishLaunching (applicazione UIApplication, UIApplicationLaunchOptions launchOptions) invece del metodo didFinishLaunching con un solo parametro altrimenti non verrà richiamato. Nel tuo metodo doFinishLaunching, puoi istanziare la tua classe manager GPGS (ne parleremo in un secondo) e provare ad accedere in silenzio.Il che ricorda un altro problema che ho incontrato durante il tentativo di integrare GPGS: assicurati di utilizzare l'oggetto gestore GPGS per semplificarti la vita (PlayServicesManager). Ci sono due esempi nel progetto di bind GPGS e inizialmente guardavo quello 'difficile da usare' che non usa la classe PlayServicesManager. Una volta che hai impostato il tuo gestore, puoi chiamare semplici metodi come manager.login() o manager.getLeaderboards() per fare ciò che devi fare.

Per inizializzare la classe dirigente nel metodo didFinishLaunching fare questo:

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

Per Game Center è come questo:

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

Poi il codice del modulo del progetto di base può chiamare le funzioni necessarie per la tua interfaccia ActionResolver - o qualsiasi altra cosa tu abbia chiamato la tua interfaccia nativa. Quindi avresti cose del tipo:

E tutto dovrebbe funzionare.

Una cosa che a quanto pare è necessario fare (solo per i beni pubblici mondiali) è copiare questo metodo nella tua classe 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); 
    } 

Così che su di esso, per quanto posso ricordare. Si prega di postare se si pensa che qualcosa non va o ho dimenticato qualcosa di importante.

+0

Un modo in cui sono riuscito a respingere il mio gioco Apple che utilizza GPGS, era quello di non accedere automaticamente. Ho inserito un pulsante nel menu principale che l'utente può avviare il login GPGS se lo desiderava. Il team di revisione di Apple era d'accordo. – XdebugX

Problemi correlati