文章目录
一、前言二、流程 1、申请开发者账号2、创建应用3、下载SDK4、导入到Unity中5、编写Objective-C代码 5.1、CustomAppController.mm5.2、WXApiManager.h5.3、WXApiManager.mm5.4、注册回调对象5.5、封装初始化接口5.6、封装登录接口5.7、其他接口封装6、XCodeAPI7、关于Universal Link8、关于iOS刘海屏适配三、完毕
一、前言
嗨,大家好,我是新发。
有小伙伴私信问我Unity怎么接入微信登录,
答案就是接入微信SDK,不过,微信开放平台的文档写的不是很友好,这里我讲讲流程,希望可以帮助到有疑问的同学。(注:我手头上没有mac电脑,不方便测试,本文主要是讲解流程)
注:本文以iOS平台为例。
二、流程 1、申请开发者账号
首先在微信开放平台得先有一个企业开发者账号,微信开放平台地址:https://open./,
注册流程很简单,不赘述,
2、创建应用
上面申请好开发者账号后就可以登录了,登录开发者账号后,进入管理中心,选择移动应用,然后点击创建移动应用,
填写相关信息,提交后等审核,
审核通过后,即可得到应用的AppID和AppSecret,后面调用SDK接口的时候需要用到这两个值。
3、下载SDK
首先可以看一下微信开放平台的文档,这个是 iOS接入指南文档:https://developers./doc/oplatform/Mobile_App/Access_Guide/iOS.html
里面讲了两种方式来引入SDK:
1、通过CocoaPods集成;(有点类似于Android Gradle配置依赖,自动下载依赖文件)
2、手动集成。(手动下载SDK库文件,导入工程中)
一般我们是在内网开发,所以这里我讲一下手动集成的方式。
iOS平台SDK库文件下载页:https://developers./doc/oplatform/Downloads/iOS_Resource.html
点击iOS开发工具包即可下载SDK库文件,如果想看下Demo范例,可以点击范例代码,如下
4、导入到Unity中
iOS开发工具包下载下来后解压,里面的文件如下,一个.a库文件和三个.h头文件,
我们将它们拷贝到Unity工程的Assets/Plugins/iOS/WeChatSDK目录中,如下,
5、编写Objective-C代码
想要在C#中调用SDK接口,我们需要写一层中间层(使用Objective-C写),
5.1、CustomAppController.mm
在iOS平台接SDK的时候,需要实现自己的AppController来维护SDK的生命周期,默认是UnityAppController,我们可以继承它并重写逻辑。
在Assets/Plugins/iOS/目录中创建一个CustomAppController.mm文件,如下,
(注:文件名必须是 xxxxAppController.mm,xxxx前缀可自定义,但不能省略,比如我这里叫CustomAppController.mm)
内容如下:
注:上面的代码中有一个宏IMPL_APP_CONTROLLER_SUBCLASS,Unity就是通过 IMPL_APP_CONTROLLER_SUBCLASS知道要使用我们定制的 CustomAppController而不是使用默认的UnityAppController。
好了,继续往下走流程。
5.2、WXApiManager.h
在Assets/Plugins/iOS/目录中创建WeChatUnity文件夹,并创建WXApiManager.h头文件,如下,
内容如下,很简单,引入WXApi.h头文件,继承WXApiDelegate,然后定义一个单例对象sharedManager,
5.3、WXApiManager.mm
在WXApiManager.h同级目录中创建WXApiManager.mm文件,去实现具体的逻辑。
内容如下,
TODO的内容我们先留着,继续往下走流程。
5.4、注册回调对象
我们要让微信回调到WXApiManager对象的onResp方法,就需要先告诉微信,不然它是不知道回调到哪里的。
我们回到CustomAppController.mm文件,先引入头文件:
添加如下的调用,
5.5、封装初始化接口
微信SDK的初始化调用是
你可以把它放在CustomAppController.mm的didFinishLaunchingWithOptions方法中,如下:
它是程序启动时最先执行的地方,如果你不想在这么前的位置执行,想推迟到在C#层去执行,则可以封装一个接口出来,然后由C#层来调用。
我们在Assets/Plugns/iOS/WeChatUnity文件夹中创建WeChatUnity.mm文件,如下,
内容如下,
接着,我们就可以在C#层声明这个接口并调用了,我们新建一个C#脚本,名叫WeChatSDK.cs,如下
内容如下,
然后你就可以在你的C#入口脚本那里调用WeChatSDK.Init()了。
5.6、封装登录接口
同理,我们继续在WeChatUnity.mm中封装登录接口,
回到WeChatSDK.cs脚本,添加Login接口,如下,
当你在游戏中点击微信登录按钮时,即可调用WeChatSDK.Login啦。
接着,我们去WXApiManager.mm的onResp添加回调的响应逻辑,如下,
上面的结果我们是通过UnitySendMessage接口给Unity发送消息的,会查找名字为SDKCallBack的物体上的脚本,调用脚本中的WeChatLoginCallback方法。
我们在场景中创建一个空物体,重命名为SDKCallBack,
然后创建一个SDKCallBack.cs脚本,并将其挂到SDKCallBack物体上,
我们在SDKCallBack脚本中实现WechatLoginCallback方法,如下,
5.7、其他接口封装
其他接口流程同理,在WeChatUnity.mm中封装C接口,调用微信SDK的API,
在WeChatSDK.cs中声明[DllImport("__Internal")],封装C#层接口,在WXApiManager.mm的onResp中处理响应,通过UnitySendMessage发消息给Unity,在SDKCallBack.cs中处理回调。
画个图方便大家理解,
流程懂了之后,大家应该就知道怎么封装接口和调用了,我这里就不往下写了~
6、XCodeAPI
我们知道,Unity打包iOS平台是导出XCode工程,我们还需要在XCode工程中做一些设置,最后再导出ipa,事实上,这个过程也可以写成自动化处理,我之前写过一篇文章讲过XCodeAPI,推荐大家看下,《Unity打iOS包之xcodeapi的使用》
7、关于Universal Link
关于Universal Link我之前写过一篇文章,也推荐大家看下,《微信分享显示“未验证应用”问题(辅助标签:Universal Link)》
8、关于iOS刘海屏适配
关于iOS刘海屏适配的问题,我之前写过一篇文章,也推荐大家看下,《Unity适配iphone刘海屏》
三、完毕
文章转自 林新发的博客_CSDN博客-Unity3D,android,C#领域博主