libGDX与Kotlin 移动游戏开发(7)
原文地址:Using Java to create iOS apps | LibGDX Google Play Games integration | #7
iOS的应用都是用苹果IDE Xcode在Swift或Objective-C下编写的。由于libGDX是使用Java(或者Kotlin、Python、Clojure、Scala)编写的,所以并不像添加Android那样简单。如果实在是需要发布iOS端游戏,可以使用RoboVM(当自己开始使用libGDX的iOS模块的时候,RoboVM宣布关闭了,但是仍有一个MobiDevelop维护的RoboVM分支),或者使用Multi-OS Engine(目前最好的替代方案)。
Multi-OS引擎是什么?如何使用?
Multi-OS Engine(以下简称MOE)为Java开发者提供了在Windows和macOS上同时编写Android和iOS的技术。相比于针对每个平台编写不同的代码,通过这项技术可以服用一些平台无关的Java代码,但仍需添加不同平台的UI。Multi-OS Engine提供了Android Studio和Eclipse下的插件,并且100%开源,也可以通过Maven调用。MOE目前由其组织者Migeran管理。
可以阅读这篇文章来开始MOE开发。简单说就是安装MOE插件(如果使用的是Android Studio的话),然后开始代码编写。以下是一些范例工程:
如果是从头创建libGDX工程的话,推荐使用Setup程序。这能帮助创建个性化的工程并自动下载需要的依赖包。
在Java中使用iOS框架和库
MOE有内建的“Java的原生绑定Nat/J库(Nat/J library for Java to native binding)”功能,可以利用转换器Wrapnatjgen绑定相关的原生头文件(Objective-C)来生成Java绑定。可以通过命令行或者右键菜单(更为简单一些)来连接第三方框架或库(Link third party frameworks or libraries)。

连接iOS第三方框架或库
添加完连接之后,确认在ios/lib路径下有转换jar文件,在Xcode工程中也有框架或库的连接,否则会报出连接错误。如果需要的话,手动添加(在Xcode中打开Build Phases -> Link Binary with Libraries)。
添加iOS版Google Play Services框架
可以按官方指导中的Get Started with Play Games for iOS(Option2: Manual installation)章节来设置。需要下载以下框架:
- Google Sign-In(Google登录):重要提示:当通过TestFlight测试程序的时候会无法启动程序。这是因为使用了废弃不用的GoogleSignIn.bundle。所以需要在Xcode工程中移除。
- Google+ SDK。
- Play Games C++ SDK。
同样要确认在Xcode工程中有以下框架(在Xcode中打开Build Phases -> Link Binary with Libraries):
-
AddressBook.framework
-
AssetsLibrary.framework
-
CoreData.framework
-
CoreLocation.framework
-
CoreMotion.framework
-
CoreTelephony.framework
-
CoreText.framework
-
Foundation.framework
-
MediaPlayer.framework
-
QuartzCore.framework
-
SafariServices
-
Security.framework
-
StoreKit
-
Security.framework
-
SystemConfiguration.framework
-
libc++.dylib
-
libz.dylib
最后,在Build Settings -> Linking -> Other Linker Flags中添加-ObjC连接标志(-ObjC linker flag)。
具体实现
首先需要实现这些接口:GPPSignInDelegate、GPGStatusDelegate、GIDSignInUIDelegate和GIDSignInDelegate。然后定义范围(只需要在游戏身份认证的时候调用一次),并设置toast和成就消息放置位置。
https://gist.github.com/Majirefy/db29583b2d623fecf484e23aebf49330
接下来要通知Google Play Games API找到代理的实现方法(在本工程中,在IOSMoeLauncher类里面实现):
https://gist.github.com/Majirefy/3e83d24b363a3db941695f46f0c44428
在设置和初始化的最后阶段,需要设置client ID并调用silent登录方法。可以在Developer Console中获取Client ID。
https://gist.github.com/Majirefy/286a7a9933fb93bbac567e17edc3d2cf
为了让程序打开连接并且支持旧的代码,需要添加以下内容:
https://gist.github.com/Majirefy/05fa7ab2c2e06adccb33a67f204803c5
向排行榜提交用户分数
也许向排行榜提交用户分数是最为重要的功能。以下代码提供了相关处理,并检测提交是否成功:
https://gist.github.com/Majirefy/218e0c40ca446509450851a9a124a7af
显示排行榜
https://gist.github.com/Majirefy/27458d150ed5fa91fd1bed69d78fdfb9
从排行榜中加载玩家最高分数
https://gist.github.com/Majirefy/7d157947b8a421062ca7ea6195395250