Bar*_*ide 5 java ios libgdx google-play-services robovm
我目前正致力于使用roboVM将我的LibGDX游戏移植到iOS.一切正常,除了我遇到一些问题,让我的绑定适用于admob和Google Play游戏服务.我能够解决Admob的一个问题,但同样的问题已经出现在GPGS上,我无法找到解决方法.该绑定是绑定到不同的iOS版SDK的挂钩.我用它们来展示Admob广告和Google Play服务界面.
我试着在这里关注Sample.java:
但它对我来说有一些问题.首先,样本覆盖的didFinishLaunching()方法是错误的,永远不会被调用.它应该覆盖didFinishLaunching(UIApplication应用程序,UIApplicationLaunchOptions launchOptions).
我现在面临的主要问题是由于window.makeKeyAndVisible()调用,游戏不接受用户输入.如果我采取这种方法,一切都很好,但我不能展示广告,也不能展示Google Play服务.我将看到关于窗口不在视图层次结构中的警告.我可以通过在显示广告之前调用makeKeyAndVisible()并在插页式广告委托中解除后调用setHidden()来解决这个问题.但是,我无权使用Google Play服务.似乎没有其他人遇到这个问题.可能是什么问题呢?我对iOS不是很熟悉,所以我不知道需要做什么让我的应用程序正确接收输入.
好吧,使用 Admob 和 GPGS 或其他绑定将 LibGDX 游戏发布到 iOS 是一个痛苦的过程,但我已经设法让一切正常工作,我的游戏现在处于等待审核状态。在发表此答案时,Apple 似乎正在拒绝使用 Google Play 游戏服务的应用程序,因为 GPGS SDK 将用户带到 Safari 才能登录。这对 Apple 来说是不可接受的,因为这是“糟糕的用户体验”。实际上,当用户尝试登录 GPGS SDK 时,会查找是否安装了 Google+ 才能登录,如果找不到,则会打开 Chrome 浏览器,如果未安装 Chrome,则最后会打开 Safari。在正确集成 GPGS 并尝试将二进制文件提交给 Apple 后,我遇到了另一个有关 Google SDK 未签名的问题。由于即使我要解决这个问题,我的应用程序也会被拒绝,因此我决定放弃 GPGS 并使用 Apple 的游戏中心。也就是说,我仍然能够在我的测试设备上使用 Admob 获取 GPGS,因此我可以在这里回答如何操作。
首先, 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;
}
Run Code Online (Sandbox Code Playgroud)
将 iosApplication 保留为 IOSLauncher 类的字段成员。通过它,您可以获得需要显示插页式广告和排行榜/成就的UIWindow。
要做的第二件事是确保您的 IOSLauncher 类重写 didFinishLaunching(UIApplication application, 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();
Run Code Online (Sandbox Code Playgroud)
对于游戏中心来说是这样的:
gcManager = new GameCenterManager(iosApplication.getUIWindow(), new GameCenterListener() {...(overridden methods left blank)
gcManager.login();
Run Code Online (Sandbox Code Playgroud)
然后,核心项目的代码可以通过 ActionResolver 接口(或任何您命名的本机接口)调用必要的函数。所以你会有这样的东西:
@Override
    public void getLeaderboards() {
            log.debug("Showing all leaderboards.");
            playManager.showLeaderboardsPicker();
    }
Run Code Online (Sandbox Code Playgroud)
一切都应该有效。
显然您需要做的另一件事(仅适用于 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);
    }
Run Code Online (Sandbox Code Playgroud)
据我所知,这就是大概的情况。如果您认为有什么问题或者我忘记了重要的事情,请发帖。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           550 次  |  
        
|   最近记录:  |