【游戏开发教程】Unity iOS平台接入微信SDK,实现微信登录等功能(教程 | 流程讲解)
文章目錄
- 一、前言
- 二、流程
- 1、申請(qǐng)開(kāi)發(fā)者賬號(hào)
- 2、創(chuàng)建應(yīng)用
- 3、下載SDK
- 4、導(dǎo)入到Unity中
- 5、編寫(xiě)Objective-C代碼
- 5.1、CustomAppController.mm
- 5.2、WXApiManager.h
- 5.3、WXApiManager.mm
- 5.4、注冊(cè)回調(diào)對(duì)象
- 5.5、封裝初始化接口
- 5.6、封裝登錄接口
- 5.7、其他接口封裝
- 6、XCodeAPI
- 7、關(guān)于Universal Link
- 8、關(guān)于iOS劉海屏適配
- 三、完畢
一、前言
嗨,大家好,我是新發(fā)。
有小伙伴私信問(wèn)我Unity怎么接入微信登錄,
答案就是接入微信SDK,不過(guò),微信開(kāi)放平臺(tái)的文檔寫(xiě)的不是很友好,這里我講講流程,希望可以幫助到有疑問(wèn)的同學(xué)。(注:我手頭上沒(méi)有mac電腦,不方便測(cè)試,本文主要是講解流程)
注:本文以iOS平臺(tái)為例。
二、流程
1、申請(qǐng)開(kāi)發(fā)者賬號(hào)
首先在微信開(kāi)放平臺(tái)得先有一個(gè)企業(yè)開(kāi)發(fā)者賬號(hào),微信開(kāi)放平臺(tái)地址:https://open.weixin.qq.com/,
注冊(cè)流程很簡(jiǎn)單,不贅述,
2、創(chuàng)建應(yīng)用
上面申請(qǐng)好開(kāi)發(fā)者賬號(hào)后就可以登錄了,登錄開(kāi)發(fā)者賬號(hào)后,進(jìn)入管理中心,選擇移動(dòng)應(yīng)用,然后點(diǎn)擊創(chuàng)建移動(dòng)應(yīng)用,
填寫(xiě)相關(guān)信息,提交后等審核,
審核通過(guò)后,即可得到應(yīng)用的AppID和AppSecret,后面調(diào)用SDK接口的時(shí)候需要用到這兩個(gè)值。
3、下載SDK
首先可以看一下微信開(kāi)放平臺(tái)的文檔,這個(gè)是 iOS接入指南文檔:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html
里面講了兩種方式來(lái)引入SDK:
1、通過(guò)CocoaPods集成;(有點(diǎn)類(lèi)似于Android Gradle配置依賴,自動(dòng)下載依賴文件)
2、手動(dòng)集成。(手動(dòng)下載SDK庫(kù)文件,導(dǎo)入工程中)
一般我們是在內(nèi)網(wǎng)開(kāi)發(fā),所以這里我講一下手動(dòng)集成的方式。
iOS平臺(tái)SDK庫(kù)文件下載頁(yè):https://developers.weixin.qq.com/doc/oplatform/Downloads/iOS_Resource.html
點(diǎn)擊iOS開(kāi)發(fā)工具包即可下載SDK庫(kù)文件,如果想看下Demo范例,可以點(diǎn)擊范例代碼,如下
4、導(dǎo)入到Unity中
iOS開(kāi)發(fā)工具包下載下來(lái)后解壓,里面的文件如下,一個(gè).a庫(kù)文件和三個(gè).h頭文件,
我們將它們拷貝到Unity工程的Assets/Plugins/iOS/WeChatSDK目錄中,如下,
5、編寫(xiě)Objective-C代碼
想要在C#中調(diào)用SDK接口,我們需要寫(xiě)一層中間層(使用Objective-C寫(xiě)),
5.1、CustomAppController.mm
在iOS平臺(tái)接SDK的時(shí)候,需要實(shí)現(xiàn)自己的AppController來(lái)維護(hù)SDK的生命周期,默認(rèn)是UnityAppController,我們可以繼承它并重寫(xiě)邏輯。
在Assets/Plugins/iOS/目錄中創(chuàng)建一個(gè)CustomAppController.mm文件,如下,
(注:文件名必須是 xxxxAppController.mm,xxxx前綴可自定義,但不能省略,比如我這里叫CustomAppController.mm?)
內(nèi)容如下:
注:上面的代碼中有一個(gè)宏IMPL_APP_CONTROLLER_SUBCLASS,Unity就是通過(guò) IMPL_APP_CONTROLLER_SUBCLASS知道要使用我們定制的 CustomAppController而不是使用默認(rèn)的UnityAppController。
好了,繼續(xù)往下走流程。
5.2、WXApiManager.h
在Assets/Plugins/iOS/目錄中創(chuàng)建WeChatUnity文件夾,并創(chuàng)建WXApiManager.h頭文件,如下,
內(nèi)容如下,很簡(jiǎn)單,引入WXApi.h頭文件,繼承WXApiDelegate,然后定義一個(gè)單例對(duì)象sharedManager,
5.3、WXApiManager.mm
在WXApiManager.h同級(jí)目錄中創(chuàng)建WXApiManager.mm文件,去實(shí)現(xiàn)具體的邏輯。
內(nèi)容如下,
TODO的內(nèi)容我們先留著,繼續(xù)往下走流程。
5.4、注冊(cè)回調(diào)對(duì)象
我們要讓微信回調(diào)到WXApiManager對(duì)象的onResp方法,就需要先告訴微信,不然它是不知道回調(diào)到哪里的。
我們回到CustomAppController.mm文件,先引入頭文件:
添加如下的調(diào)用,
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]]; }- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]]; }- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {return [WXApi handleOpenUniversalLink:userActivity delegate:[WXApiManager sharedManager]]; }5.5、封裝初始化接口
微信SDK的初始化調(diào)用是
[WXApi registerApp:@"你的APPID" universalLink:@"你的UniversalLink"];你可以把它放在CustomAppController.mm的didFinishLaunchingWithOptions方法中,如下:
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {[super application:application didFinishLaunchingWithOptions:launchOptions];[WXApi registerApp:@"你的APPID" universalLink:@"你的UniversalLink"];return YES; }它是程序啟動(dòng)時(shí)最先執(zhí)行的地方,如果你不想在這么前的位置執(zhí)行,想推遲到在C#層去執(zhí)行,則可以封裝一個(gè)接口出來(lái),然后由C#層來(lái)調(diào)用。
我們?cè)贏ssets/Plugns/iOS/WeChatUnity文件夾中創(chuàng)建WeChatUnity.mm文件,如下,
內(nèi)容如下,
接著,我們就可以在C#層聲明這個(gè)接口并調(diào)用了,我們新建一個(gè)C#腳本,名叫WeChatSDK.cs,如下
內(nèi)容如下,
然后你就可以在你的C#入口腳本那里調(diào)用WeChatSDK.Init()了。
5.6、封裝登錄接口
同理,我們繼續(xù)在WeChatUnity.mm中封裝登錄接口,
// WeChatUnity.mmUNITY_CS_API void UnityWeChatLogin(const char* state) {NSLog(@"UnityWeChatLogin");SendAuthReq* req = [[SendAuthReq alloc] init];req.scope = @"snsapi_userinfo";;req.state = str_c2ns(state);[WXApi sendReq:req completion:nil];// 此時(shí)會(huì)拉起微信,授權(quán)后會(huì)回調(diào)WXApiManager的onResp方法 }回到WeChatSDK.cs腳本,添加Login接口,如下,
// WeChatSDK.cspublic static void Login() { #if UNITY_IOS// "app_wechat"后期改為隨機(jī)數(shù)加session來(lái)校驗(yàn)UnityWeChatLogin("app_wechat"); #elif UNITY_ANDROID// TODO Android的調(diào)用 #endif }#if UNITY_IOS[DllImport("__Internal")]static extern void UnityWeChatLogin(string state); #endif當(dāng)你在游戲中點(diǎn)擊微信登錄按鈕時(shí),即可調(diào)用WeChatSDK.Login啦。
接著,我們?nèi)XApiManager.mm的onResp添加回調(diào)的響應(yīng)邏輯,如下,
上面的結(jié)果我們是通過(guò)UnitySendMessage接口給Unity發(fā)送消息的,會(huì)查找名字為SDKCallBack的物體上的腳本,調(diào)用腳本中的WeChatLoginCallback方法。
我們?cè)趫?chǎng)景中創(chuàng)建一個(gè)空物體,重命名為SDKCallBack,
然后創(chuàng)建一個(gè)SDKCallBack.cs腳本,并將其掛到SDKCallBack物體上,
我們?cè)赟DKCallBack腳本中實(shí)現(xiàn)WechatLoginCallback方法,如下,
5.7、其他接口封裝
其他接口流程同理,在WeChatUnity.mm中封裝C接口,調(diào)用微信SDK的API,
在WeChatSDK.cs中聲明[DllImport("__Internal")],封裝C#層接口,在WXApiManager.mm的onResp中處理響應(yīng),通過(guò)UnitySendMessage發(fā)消息給Unity,在SDKCallBack.cs中處理回調(diào)。
畫(huà)個(gè)圖方便大家理解,
流程懂了之后,大家應(yīng)該就知道怎么封裝接口和調(diào)用了,我這里就不往下寫(xiě)了~
6、XCodeAPI
我們知道,Unity打包iOS平臺(tái)是導(dǎo)出XCode工程,我們還需要在XCode工程中做一些設(shè)置,最后再導(dǎo)出ipa,事實(shí)上,這個(gè)過(guò)程也可以寫(xiě)成自動(dòng)化處理,我之前寫(xiě)過(guò)一篇文章講過(guò)XCodeAPI,推薦大家看下,《Unity打iOS包之xcodeapi的使用》
7、關(guān)于Universal Link
關(guān)于Universal Link我之前寫(xiě)過(guò)一篇文章,也推薦大家看下,《微信分享顯示“未驗(yàn)證應(yīng)用”問(wèn)題(輔助標(biāo)簽:Universal Link)》
8、關(guān)于iOS劉海屏適配
關(guān)于iOS劉海屏適配的問(wèn)題,我之前寫(xiě)過(guò)一篇文章,也推薦大家看下,《Unity適配iphone劉海屏》
三、完畢
好啦,就到這里吧~
我是林新發(fā):https://blog.csdn.net/linxinfa
原創(chuàng)不易,若轉(zhuǎn)載請(qǐng)注明出處,感謝大家~
喜歡我的可以點(diǎn)贊、關(guān)注、收藏,如果有什么技術(shù)上的疑問(wèn),歡迎留言或私信~
總結(jié)
以上是生活随笔為你收集整理的【游戏开发教程】Unity iOS平台接入微信SDK,实现微信登录等功能(教程 | 流程讲解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机翻译辅助工具安卓版,计算机辅助翻译
- 下一篇: 动态换ip如何实现_三种方法解决动态换I