幻蓝博客 – 孤月蓝风

追寻互联网科技、Unity开发、AR/VR开发、游戏开发、Web前后端开发等技术。

幻蓝博客 – 孤月蓝风幻蓝博客 – 孤月蓝风

Unity与iOS交互(三):扩展UnityAppController来接入SDK

开发环境:XCode 9.2 , Unity 2017.1.3

在接入很多SDK时,都会被要求在 UnityAppController 中加入代码,而如果每次都在构建 XCode 工程后再修改的话,会是一件很麻烦的事情。Unity给我们提供了扩展UnityAppController的方法,我们可以通过继承UnityAppController来实现自己的AppController,并放入Unity工程的 Assets / Plugins / iOS 文件夹中,这样每次构建时,都会被自动加入XCode工程中。

首先我们来写一个AppController,我推荐在XCode中编写代码,完成后放入Unity工程中。因为在XCode中有代码提示、代码检查,可以避免问题无法被发现。

在构建后的XCode工程中新建一个 MyAppController.m 文件,这里可以不需要新建 .h 头文件,直接在 .m 中定义:

@interface MyAppController : UnityAppController<WXApiDelegate>
@end

我们只需要继承 UnityAppController 即可, <WXApiDelegate> 是我们接入微信支付SDK时添加的,如果某些SDK要求加入协议,都可以在这里加入,例如 <UIApplicationDelegate,WXApiDelegate> 使用逗号分割。

之后我们就可以加入SDK要求的代码,一般的SDK都会要求在 didFinishLaunchingWithOptions 中(这只是OC中方法签名的一部分,这并不是一个方法,我们只是通过这个字符串来查找方法位置,如果不理解建议学习OC基础教程)初始化SDK,我们可以直接重写 UnityAppController 中定义过的这个方法,加入SDK的代码,例如:

扩展并重写UnityAppController的方法

扩展并重写UnityAppController的方法

OC中的成员方法是需要放在 @implementation MyAppController 中的,很多SDK要求的代码,例如回调函数等,都可以放在这里。

将代码全部编写完成后,我们需要在构建的XCode工程中,默认使用此文件为程序入口,Unity也给我们提供了相应的方法:

IMPL_APP_CONTROLLER_SUBCLASS(MyAppController)

我们可以直接使用这个宏来完成构建时自动修改入口,参数为你编写的类,注意这里并不是字符串。

一切完成之后,你就可以将文件放入Unity工程的 Assets / Plugins / iOS 文件夹中了,构建后会自动生成到XCode工程中并设置为入口,这样就避免了我们在每次构建后手动修改UnityAppController中的代码,接多个SDK时更加方便。

同样,如果你对这篇文章中的部分内容不懂的话,建议阅读基本的OC开发教程。

本文是全系列中第3 / 4篇:Unity与iOS交互

文章导航