手游中都有聊天功能,比如公会,私聊,世界聊天,那么找一个好用,功能强大的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,

这样,选择导出的包的地址,就可以打包apk了,再通过DDMS可以调试apk,查看log。
 
 
API使用

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(),没有这个则服务器不会相应回调任何客户端的回调。

编辑器模式下需要api.Init(appkey, "com.gotyeapi") ,第二个参数不能改变,第一个参数改成自己的appkey。
下面是登陆的回调脚本:

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)
{
}
}
同样,你应该为每个监听写一个脚本,类似Login监听,这样才能收到服务器的响应。
这样用:
api.Logout();
//注意Login函数的第二个参数,必须为null,否则服务器回调给Login.cs的onLogin回调的code是验证失败的。
api.Login(userName, null);
就可以登陆了,之所以之前调用Logout,是为了没有退出话,先直接退出,再登陆。

给好友发私聊

监听好友事件:

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语音聊天功能。

unity手游之聊天SDK集成与使用一的更多相关文章

  1. unity手游之聊天SDK集成与使用二

    集成思路 如果是自己的小游戏的话,可以把好友等信息直接保存在亲加服务器上,通过调用api来操作. 我们游戏只使用sdk的通信功能,好友等信息保存在自己的服务器上. 用户在登陆游戏的时候,通过算法用用户 ...

  2. 知物由学|游戏开发者如何从容应对Unity手游风险?

    本文由  网易云发布. "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不 ...

  3. Unity手游之路<七>角色控制器

    Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...

  4. Unity手游引擎安全解析及实践

    近日,由Unity主办的"Unity技术开放日"在广州成功举办,网易移动安全技术专家卓辉作为特邀嘉宾同现场400名游戏开发者分享了网易在手游安全所积累的经验.当下,很多手游背后都存 ...

  5. Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发

    http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...

  6. Unity手游之路<八>自动寻路Navmesh之入门

    http://blog.csdn.net/janeky/article/details/17457533 在的大部分mmo游戏都有了自动寻路功能.点击场景上的一个位置,角色就会自动寻路过去.中间可能会 ...

  7. Unity手游之路<十三>手游代码更新策略探讨

    http://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中 ...

  8. Unity手游之路<六>游戏摇杆之Easy Touch 3教程

    之前已经介绍过Unity自带的摇杆Joystick,它用起来很简单.但是它也存在很多局限,不能全部满足普通mmo手游的一些需求,例如:要能方便地更好素材:能指定在某个区域显示,或者只有在该区域触摸时才 ...

  9. Unity手游之路手游代码更新策略探讨

    版权声明: https://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙.加上家里事情也多,所以blog更新一直搁置了. 近期在项 ...

随机推荐

  1. 一次配置jdk环境变量的感悟

    开发java也一年多了,昨日一次偶然的机会,想在dos命令下执行一个程序,发现在 命令行输入 javac Test.java的时候,竟然提示javac不是内部命令, 之后输入 java ,也提示不是内 ...

  2. ASP、JSP、PHP 三种技术比较

    目前,最常用的三种动态网页语言有ASP(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor). 简 介 : A ...

  3. Https要点

    http和https的区别 1.https协议需要到ca申请证书 2.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议 3.http和https使用的是完全不同 ...

  4. linux c/c++ IP字符串转换成可比较大小的数字

    由www.169it.com搜集整理 IP字符串转换成可比较大小的数字,具体代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include "stdio. ...

  5. 关于iOS9中配置App Transport Security(应用程序传输安全协议)

    在 在info.plist中,进行上面的配置就行了,注意的是,那个网址,你需要访问什么网址,就填写什么网址就行了. NSTemporaryExceptionAllowsInsecureHTTPLoad ...

  6. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记3

    技术很多,例子很多,只好慢慢学,慢慢实践!!现在学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] JavaScript.jQuer ...

  7. HP平台由于变量声明冲突导致程序退出时的core

    最近遇到一个莫名的问题,在HP-UX B.11.31 U ia64平台下,程序PetriService在接收到产品化退出或Ctrl-C时,程序在main函数返回后析构全局的CTQueue<SMs ...

  8. HTML5+J2EE实现文件异步上传

    P.S. HTML5经过了W3C的8年努力,终于正式推广了.这次升级最大的就是升级了XMLHTTPRequest,让它变成了XMLHTTPRequest Level II(这有啥奇怪的?).这个对象现 ...

  9. SSH连接时出现Host key verification failed的原因及解决方法

    SSH连接的时候Host key verification failed. [root@cache001 swftools-0.9.0]# ssh 192.168.1.90@@@@@@@@@@@@@@ ...

  10. java线程安全和线程同步

    第一部分 线程安全(1)——变量安全 http://blog.csdn.net/cuiran/article/details/6150357 第二部分 线程安全(2)——ThreadLocal变量 h ...