手游中都有聊天功能,比如公會,私聊,世界聊天,那么找一個好用,功能強大的SDK的可以節省很多精力,幫助我們提高開發速度與游戲質量。
寫本篇博文是為了方便使用這個SDK做聊天模塊的程序,避免許多坑,我在研究過程中,咨詢了SDK開發者許多問題,所以我會詳細的把使用過程及坑記錄下來。
集成插件
我使用的是親加通訊雲提供的即時通訊SDK,附上地址,如下。
這里是文檔說明,請查看即時通訊雲-增強版,里面有unity的文檔:
http://www.gotye.com.cn/docs.html?product=im&apiType=start
這里有UNITY版本的SDK插件:
http://www.gotye.com.cn/download.html
大概使用流程就是新建一個unity項目,在編輯器模式下切換成android平台進行編輯器調試。
導入unity sdk插件包gotyeapi.unitypackage。
如果提示Plugins/Windows/32bit/gotyeapi.dll等 插件等沖突,可以刪掉Plugins/Windows/32bit文件夾下的插件,因為我是64位操作系統,所以Plugins/Windows/64bit文件夾下的插件有就行了。
導出android項目
發android包必須先導出android項目:
然后把unity項目插件里的Plugins/Android/libs/armeabi 文件夾和 Plugins/Android/libs/armeabi-v7a文件夾 拷貝到導出的android項目里libs文件夾里進行替換,因為Export的android項目缺少libs。
用Ellipse打開android項目:
File->Import->Anroid->Existing Android Code Into Workspace: Next
選擇Android文件夾路徑,導入后保證libs不缺少,正常應該如下圖:
然后打開src->com.gotye.unityTest->UnityPlayerNativeActivity.java文件,在里面初始化sdk GotypeAPI:
在@Override protected void onCreate (Bundle savedInstanceState)函數內最后一行加上:
GotyeAPI.getInstance().init(getApplicationContext(), "19ff98c3-f93d-477f-81ba-be68859433a8", GotyeAPI.SCENE_UNITY3D);
別忘了加命名空間:import com.gotye.api.*;
app key改成你在官網上申請的appkey。
然后打開android項目根目錄的AndroidManifest.xml文件,修改appkey成你在官網申請的appkey,並保存。
android:value="19ff98c3-f93d-477f-81ba-be68859433a8"
ellipse發apk包
File->Export->Anroid->Export Android Application -> Next,
選擇要導出的項目,繼續Next,
這里沒有keystore的可以,先創建一個,testkey.keystore隨便寫,保存在根目錄,填寫paasword,重復填寫密碼后,Next,



using UnityEngine; using System.Collections; using gotye; public class InitAPI : GotyeMonoBehaviour { public GotyeAPI api; void Awake() { InvokeRepeating ("mainLoop", 0.0f, 0.050f); } // Use this for initialization void Start() { api = GotyeAPI.GetInstance (); if (Application.platform != RuntimePlatform.Android) { api.Init("19ff98c3-f93d-477f-81ba-be68859433a8", "com.gotyeapi"); } //語音識別有關,可選 api.InitIflySpeechRecognition(); } void mainLoop() { api.MainLoop(); } }
值得注意的是必須有mainLoop(),沒有這個則服務器不會相應回調任何客戶端的回調。
using UnityEngine; using System.Collections; using gotye; public class Login : GotyeMonoBehaviour, LoginListener { public GotyeAPI api; void Start() { api = GotyeAPI.GetInstance (); api.AddListener (this); } public void onLogin(GotyeStatusCode code,GotyeUser user) { Debug.Log ("onLogin--" + code + "," + user.Name); api.ReqFriendList (); api.BeginReceiveOfflineMessage (); } public void onLogout(GotyeStatusCode code) { } public void onReconnecting(GotyeStatusCode code, GotyeUser currentUser) { } }
這樣用:
api.Logout(); //注意Login函數的第二個參數,必須為null,否則服務器回調給Login.cs的onLogin回調的code是驗證失敗的。 api.Login(userName, null);
給好友發私聊
監聽好友事件:
using UnityEngine; using System.Collections; using gotye; using System.Collections.Generic; public class Friend : GotyeMonoBehaviour, UserListener { public GotyeAPI api; public List<GotyeUser> friendList = new List<GotyeUser>(); void Start() { api = GotyeAPI.GetInstance (); api.AddListener (this); } public void onAddFriend (GotyeStatusCode code,GotyeUser friend) { //添加好友成功后,刷新好友列表 api.ReqFriendList (); } public void onGetFriendList(GotyeStatusCode code,List<GotyeUser> list) { friendList = list; } }
下面的代碼可以在登陸成功的回調onLogin里調用:
添加好友:
//賬號"zhangsan"必須存在,才能加好友成功,回調給實現UserListener接口的類。 api.ReqAddFriend(new GotyeUser("zhangsan"));
獲取好友列表:
api.ReqFriendList ();
給好友發私聊:
//receiver 可以自己用好友賬號名new一個
GotyeUser receiver = new GotyeUser("zhangsan"); GotyeMessage msg = GotyeMessage.CreateTextMessage(receiver, content); api.SendMessage(msg);
發送后,zhangsan就會 收到消息:onReceiveMessage。
文本消息發送完畢。
下一篇,我會研究該SDK語音聊天功能。