快速集成

下载开发包

点击下载

集成步骤

导入

下载的开发包解压缩后,里面只有一个gotyeapi.unitypackage,在您的unity3d工程选择如下菜单项(如标注所示):

选择解压缩后的开发包中的gotyeapi.unitypackage,确保里面文件全部被选中,然后导入(如下图标注):
(导入的时候注意:如果使用的是unity是32位的,则64bit目录不要勾选,如果使用的是64位的,则32bit目录不要勾选)

导入

windows平台设置

亲加API支持在windows平台直接调试。调试前,(如果unity是32位)请先将unitypackage包中Plugins/32bit目录下的4个DLL动态库(如下图所示),全部拷贝到unity3d安装目录下的Editor目录,否则unity3d会提示找不到dll错误。 如果(unity是64位)请先将unitypackage包中Plugins/64bit目录下的DLL动态库,全部拷贝到unity3d安装目录下的Editor目录,否则unity3d会提示找不到dll错误。

android平台设置

在亲加的开发包中,Plugins/Android目录下面自带AndroidManifest.xml文件,如下图所示,重点关注红色圆圈标注:

①:指定工程的主Activity为com.gotye.api.GotyeUnity3dActivity,这是因为亲加API需要在activity启动时,完成一系列初始化动作;

②:添加一个名为gotye.appkey的meta-data作为主Activity的属性,这个属性用于指定您在亲加官网注册得到的appkey;

③:亲加API只需要这里所示的3个权限;

④:亲加API内置讯飞语音识别,能实现语音转文字功能,如使用该功能,请额外添加这里指定的权限;

如果您的工程已经指定了使用其他activity作为启动项,那么您在打包安卓版本时,需要将unity3d工程导出为elipse工程,并在activity的onCreate函数中完成亲加API的初始化:

@Override protected void onCreate (Bundle savedInstanceState)
{
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);

    getWindow().takeSurface(null);
    setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
    getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy

    mUnityPlayer = new UnityPlayer(this);
    if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
        getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
                               WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(mUnityPlayer);
    mUnityPlayer.requestFocus();
    // 在这里完成亲加API的初始化
    GotyeAPI.getInstance().init(getApplicationContext(), "9c236035-2bf4-40b0-bfbf-e8b6dec54928", GotyeAPI.SCENE_UNITY3D);
}

建议修改后生成一个jar包,这样下次就不用再导出eclipse工程,可从unity3d直接导出安卓安装包。

注意:win64下的U3D的DLL找不到?(在其他4个dll都已经正确放置的情况下) 用dependency walker打开gotyeapi.dll看一下是不是缺少了什么库。查看左上角的各个项目的第一级子菜单,msvcr120和msvcp120试试网上找一下32位的版本,下载以后和gotyeapi.dll放在一起试试看。

ios平台设置

在编译到ios系统的时候,需要添加一下库文件:

初始化

用接口之前,先在场景中建一个GameObject,绑定一个脚本,在Awake方法里加上  
void Awake(){  
    InvokeRepeating("mainLoop", 0.0f, 0.050f);  
}   
然后在这个类的下面加一个方法:  
void mainLoop(){  
    GotyeAPI.GetInstance().MainLoop();  
}

//亲加API以GotyeAPI为入口,下文中提到的api为GotyeAPI实例,以后不再解释
GotyeAPI api=GotyeAPI.GetInstance();
api.Init(appKey,packageName);
//参数说明:
         appKey:官网[http://www.gotye.com.cn/]上申请

注册/移除 监听

亲加api提供一下Listener,对应关系如下:

(1) 登陆相关:LoginListener (2) 用户操作相关:UserListener (3) 聊天室相关:RoomListener (4) 群操作相关:GroupListener (5) 聊天相关:ChatListener (6) 播放相关:PlayListener (7) 通知相关:NotifyListener (8) 下载:DownloadListener

提醒:在做对应操作前请先添加Listener以免无法响应对应操作回调。

//api同意提供注册Listener方法
api.AddListener(Listener);
//移除Listener
api.RemoveListener(Listener);

提醒:当监听以后不再使用可以主动删除以免造成多个地方响应。

登录退出

//登录
GotyeStatusCode code=api.Login(name,password);
//username:用户名称,password:登录密码,code:返回状态码,状态码具体参见GotyeStatusCode类

接口调用后根据返回状态码可知调用是否有效,登陆回调对应在LoginListener中的onLogin(code,user)方法

//退出
GotyeStatusCode code = api.Logout(); 
//退出返回状态码请参见GotyeStatusCode类

对应的回调在LoginListener中的onLogout(code)方法

在线状态

int state=api.getOnLineState();
//state==-1 表示当前离线,一旦网络正常时会自动重连(会回调onReconnecting)
//state==0时表示当前已经退出或者没有登陆过
//state==1表示当前登陆正常
//当网络异常导致的掉线,当网络状态正常是api会重新连接登陆,同时会回调LoginListener中的如下方法
void onReconnecting(int code,GotyeUser currentLoginUser){
//code表示状态
// currentLoginUser表示当前用户
}

提示:该方法为同步方法,不存在回调,可直接使用返回值。

获取账户信息

//获取当前登陆账号信息
GotyeUser loginUser =api.GetCurrentLoginUser();
// currentLoginUser表示当前登陆用户对象

提示:该方法为同步方法,不存在回调,可直接使用返回值。

修改账户信息

提醒:该操作前请先注册UserListener,否则无法得知修改结果

 //修改用户信息
GotyeStatusCode code = api.RequestModifyUserInfo(user,headIconPath);
//返回值code表示该操作状态码,可参见GotyeStatusCode类
//user为要修改的GotyeUser对象
// headIconPath表示用户头像路径

修改完成后的回到为UserListener中的onModifyUserInfo(code, user)

好友系统

用户搜索

提醒:该操作前请先注册UserListener,否则无法得到搜索结果。

//搜索好友
GotyeStatusCode code=api.RequestSearchUserList(pageIndex,userName,nickName,gender);
//code表示该操作返回状态,参见GotyeStatusCode类
//pageIndex表示当前页码,username表示要搜索的用户名nickName表示要搜索的昵称
//gender表示性别

搜索结果回调在onSearchUserList(code,list,pageIndex)方法

获取 好友列表/黑名单

提醒:该操作前请先注册UserListener,否则无法得到最新的数据反馈。

(1)获取好友列表

//获取本地好友列表
List<GotyeUser> friends=api.GetLocalFriendList();
//friends为本地好友列表
//或者您也可以直接请求获取最新的好友列表
GotyeStatusCode code=api. RequestFriendList ();

从服务器返回好友列表数据回调在onGetFriendList(code,list);

(2)获取黑名单列表

//获取本地黑名单列表
List<GotyeUser> blockList =api.GetLocalBlockedList();
//若本地黑名单不存在则会去服务器请求
//或者您也可以直接从服务器获取最新的黑名单列表
GotyeStatusCode code = api.RequestBlockedList();

从服务器返回黑名单列表回调在onGetBlockedList (code,list);

提醒:从服务器获取最新的数据后我们会做好相应的缓存处理。

添加/删除 好友

提醒:该操作前需要注册UserListener监听,否则无法知道操作是否成功。

(3) 添加好友

//添加好友
GotyeStatusCode code=api.RequestAddFriend(friend);
从服务器返回添加结果回调在onAddFriend (code,friend);

(4) 删除好友

//删除好友
GotyeStatusCode code=api.RemoveFriend(friend);

删除好友回调onRemoveFriend(code,friend);

添加/删除 黑名单

提醒:该操作前需要注册UserListener监听,否则无法知道操作是否成功。

(1)添加黑名单

//添加黑名单
GotyeStatusCode code = api.RequestAddBlocked(friend);

添加黑名单回调onAddBlocked(code,friend)

(2)移除黑名单

//移除黑名单
GotyeStatusCode code =api.RemoveBolcked(user);

移除黑名单回调onRemoveBlocked(code,user)

获取用户详情

提醒:该操作前需要注册UserListener监听,否则无法获取最新的数据。

//获取用户信息
GotyeUser user=api.RequestUserInfo(name, true|false);
//参数说明name为要获取信息的用户账户,第二个参数为当为true时表示无论当前是否存在缓存都会去服务器重新获取一遍并返回当前缓存数据,当为false时若本地没有缓存数据也同样会去服务器获取一遍,但是当本地有缓存时不会再从服务器获取而是直接返回本地缓存数据

服务器回调onRequestUserInfo(code,user)

获取用户头像

用户头像信息保存在GotyeUser中的Icon对象中,其中该对象的path属性为用户头像的本地图片路径,url为头像服务器URL

提醒:如果path路径文件存在可以直接使用,如果要下载头像请先注册DownloadListener,不可用普通http直接下载。

//下载用户头像
GotyeStatusCode code = api.DownloadMedia(url);
//url为GotyeUser对象中的Icon对象的url属性

下载完成后服务器回调onDownloadMedia(code,path,url)

聊天室

获取聊天室列表

提醒:操作前请先注册RoomListener,否则无法获取最新的数据。

//获取本地聊天室列表
List<GotyeRoom> roomList=api.GetLocalRoomList();
//从服务器获取最新聊天室列表
GotyeStatusCode code=api.RequestRoomList(pageIndex);
//code为操作状态码,pageIndex为请求的页码

从服务器获取聊天室回调onGetRoomList(code,roomList)

获取聊天室详情

//获取聊天室信息
GotyeRoom room=api.RequestRoomInfo(roomId, forceRequest);
// room为本地缓存数据,可能为空
//若forceRequest为true则会去强制从服务器获取最新的聊天室信息
//若forceRequest为false,当本地缓存存在时只会返回本地缓存数据,若不存在则才去服务器获取数据

从服务器返回聊天室信息回调onRequestRoomInfo(code,room)

获取聊天室图标

聊天室图标需要从服务器下载,url为GotyeRoom中的Icon属性中的url属性,下载过程同用户头像下载,具体可参见【获取用户头像】

进入聊天室

提醒:进入聊天室前请注册RoomListener。

int  code= api.EnterRoom(room);
//code为状态码,room为要进入的聊天室对象,若已经在聊天室了则服务器不会回调

进入聊天室回调onEnterRoom(code,lastMsgId,room)

退出聊天室

提醒:退出前请注册RoomListener。

int  code= api.LeaveRoom (room);

退出聊天室服务器回调onLeaveRoom(code,room)

获取聊天室成员列表

提醒:退出前请注册RoomListener。

//获取聊天室列表
GotyeStatusCode code =api.RequestRoomMemberList(room,pageIndex);
//code为状态码,room为当前聊天室对象,pageIndex为页码

服务器返回聊天室成员回调onGetRoomMemberList(code,members)

判断是否在指定聊天室

//判断是否在某个房间
boolean isInRoom= api.IsInRoom(room);
//isInRoom为true时表示已经进入该聊天室,反之则不在该聊天室

提示:该方法为同步方法,可直接使用返回值。

公共群搜索

提示:请先注册GroupListener。

//目前android平台需要设置jvm指针
GotyeStatusCode code= api.RequestSearchGroup(keyword, pageIndex);
//code为状态码,keyword参数顾名思义为要搜索的关键字,pageIndex为当前搜索页码

服务器返回搜索结果回调onSearchGroupList(code,list,curPageList,pageIndex) 回调参数说明: list为每次搜索结果集,curPageList为当前页结果集

获取群列表

提示:请先注册GroupListener。

//获取本地缓存群列表
List<GotyeGroup> groups=api. GetLocalGroupList();

//从服务器获取最新的群列表
GotyeStatusCode code = api. RequestGroupList();
//code 为操作状态码

从服务器获取群列表回调onGetGroupList(code,list)

获取群详情

提示:请先注册GroupListener,否则可能无法回去最新的数据。

//目前android平台需要设置jvm指针
GotyeGroup group=api.RequestGroupInfo(groupId, true|false)
//groupId为要获取详情的群Id,第二个参参数当为true时会返回缓存数据的同时向服务器请求最新的数据,当为false时若本地存在缓存数据则只返回本地缓存数据,若没有则也会去向服务器请求最新的数据

服务器返回请求结果onRequestGroupInfo(code,group)

获取群图标

参见聊天室图标和用户头像下载

获取群成员列表

提示:请先注册GroupListener。

//code为返回状态码,group为当前群,pageIndex为页码
GotyeStatusCode code = api.RequestGroupMemberList (group,pageIndex);

服务器返回群成员列表回调 onGetGroupMemberList(code,allList,curList,group,pagerIndex) 参数说明:allList为已请求页面数据集合 curList当前页面数据集合 group当前群 pagerIndex为当前页码

创建/解散 群

提醒:请先注册GroupListener。

(1)创建群

//创建群
GotyeStatusCode code = CreateGroup(groupName, groupIconPath);
//code为操作状态码
//参数说明:groupName为创建的群名称
          groupIconPath为群组的头像路径

请求服务器创建群结果回调onCreateGroup(code,group)

(2)解散群

//创建群
GotyeStatusCode code=api. DismissGroup (group);
//code为操作状态码,group为要解散的群

请求服务器解散群结果回调onDismissGroup (code,group)

修改群详情

提醒:请先注册GroupListener。

//code为操作状态码,group为要修改的群对象,groupIconPath为群头像文件路径
GotyeStatusCode code = api.ReqModifyGroupInfo(group, imagePath);

请求服务器 修改群回调onModifyGroupInfo(code,group)

邀请入群

提醒:请先注册GroupListener。

//code为操作状态码,user为被邀请人,group为当前群,inviteMessage为邀请信息
GotyeStatusCode code=api.InviteUserToGroup(user,group,inviteMessage)

发送后被邀请人会收到邀请信息回调在: onReceiveNotify(code, notify); 参数说明:code为状态码 notify为被邀请人收到邀请通知的回调

加入/离开 群

提醒:请先注册GroupListener。

(1) 加入群

当收到群邀请信息或者该群不需要加入时验证时,可以按如下操作加入群

//加入群
GotyeStatusCode code= api.JoinGroup(group);

加入群结果服务器回调onJoinGroup(code, group)

(2)离开群

//离开群
GotyeStatusCode code = api.LeaveGroup(group);

离开群服务器回调onLeaveGroup(code,group )

踢出群成员

提醒:请先注册GroupListener。

//code为操作码, GotyeStatusCode code = api.KickoutGroupMember(group, user);

服务器回调:onKickoutGroupMember(code, group,kickedMember);

转让群

提醒:请先注册GroupListener。

//code为操作状态码,group为当前群,user为指定的新群主
GotyeStatusCode code=api.ChangeGroupOwner(group,user);

服务器回调onChangeGroupOwner(code, group, newOwner)

申请入群

提醒:请先注册GroupListener。

//code为操作状态码,group为当前群,user为指定的新群主
GotyeStatusCode code=api. RequestJoinGroup (group,requestMessage);

服务器回调返回发送申请在onSendNotify(code,notify) 此时需要等待群主处理申请,你也可以多次发送请求。

处理入群申请

当群主收到入群申请,即服务器会回调onReceiveNotify(code, notify);通过上面回调收到申请后群主可以同意或拒绝。

 // 同意入群:GotyeStatusCode code = api.ReplyJoinGroup(notify, agreeMsg, true)
//拒绝入群:GotyeStatusCode code = api.ReplyJoinGroup(notify, agreeMsg, false)

此时服务器会通过回调

onReceiveNotify(code, notify)

告知对方的处理结果

消息

目前消息分为文本消息、图片消息、语音消息、自定义消息。其中消息自定义消息可以以字节数组或文件路径的方式指定消息数据。以上消息类型都可以携带额外数据,额外数据以字节数组的方式由用户自己决定数据内容和编码格式。

创建消息

GotyeMessage对象为消息对象,其提供了一批静态方法用来创建消息,具体请参见GotyeMessage

//创建一个指定接收者的空消息
GotyeMessage.CreateMessage(receiver)

//创建一个指定发送者和接收者的空消息
GotyeMessage.CreateMessage(sender,receiver)

文本消息

//创建一个指定接收者的文本消息内容为text内容的消息
GotyeMessage.CreateTextMessage(receiver,text)

//创建一个指定发送者和接收者和文本内容的文本消息
GotyeMessage.CreateTextMessage(sender,receiver,text)

图片消息

//创建一个指定接收者的图片消息
GotyeMessage.CreateImageMessage(receiver,imagePath)

//创建一个指定发送者和接收者的图片消息
GotyeMessage.CreateImageMessage(sender,receiver,imagePath)

语音消息

提醒:请先注册ChatListener。

语音消息有api产生,过程如下:

//开始语音消息
// target指定的接收对象,mode为变声类型,可参见WhineMode类,realtime是否实时语音,maxDuration消息最长时间(单位毫秒)
api.StartTalk (target,mode,realtime,maxDuration)
//开始语音消息后会收到开始反馈在ChatListener中的
public void onStartTalk(code,isRealTime,targetType,target) {
//code为回馈状态, isRealTime为是否实时, targetType为接收者类型,target为接收者
}
//调用下列方法,通过回馈产生语音消息
GotyeStatusCode code= api.StopTalk();
//回馈,产生语音消息
public void onStopTalk(code, message, isVoiceReal){
// code为回馈状态码,message为产生的语音消息对象,当为实时语音时message是为null的
}

自定义数据消息

//创建指定文件路径和接收者的自定义消息
GotyeMessage.CreateUserDataMessage(receiver,dataPath)
//创建指定文件路径和发送者、接收者的自定义消息
GotyeMessage.CreateUserDataMessage(sender,receiver,dataPath)
//创建指定接收者和数据的自定义消息
GotyeMessage.CreateUserDataMessage(receiver,data,len)
//创建指定发送者、接收者和消息数据的自定义消息
GotyeMessage.CreateUserDataMessage(sender,receiver,data,len)

消息携带额外数据

//任何消息类型都可以携带额外数据
message.PutExtraData(byte[] extraData);

发送消息

提醒:请先注册ChatListener。

//code为发送操作状态码, message为本地缓存消息对象
GotyeMessage message = api.SendMessage(message);

发送消息后服务器回调onSendMessage(code,message)

接收消息

服务器通过onReceiveMessage(code,message)回调接收消息

下载消息

提醒:请先注册ChatListener。

//code为操作状态码,GotyeMessage为要下载的消息对象
GotyeStatusCode code= api.DownloadMediaInMessage(message);

下载结果后通过回调onDownloadMediaInMessage(code,message)通知

提示:这里可以下载语音消息和图片消息,其中图片消息的小图不需要下载,当要显示大图时需要下载(GotyeMessage中的Media);

设定获取消息条目

api.SetMsgReadIncrement(count)
//count为每次读取个数

提示:该方法为同步方法,调用即可生效。

接收离线消息

api.BeginRcvOfflineMessge()

获取消息列表

List<GotyeMessage> list=api.GetLocalMessages(target, boolean)
// messages为获取的本地消息列表,GotyeChatTarget为GotyeUser、GotyeGroup或GotyeRoom,第二个Boolean类型参数只针对聊天室有效,表示去强制获取聊天室历史消息

删除消息

api.DeleteMessage(message)

获取/更新 消息状态

//消息状态, status保存着消息是否已读状态和发送状态
//0表示创建
//1表示未读
//2表示已读
//3表示正在下载
//4表示下载完成
//5表示下载失败
//更新指定消息为已读
api.MarkSingleMessageAsRead(message);

播放音频消息

提醒:请先注册PalyListener,否则无法获知播放信息等信息,同时音频消息需要先下载才能播放。

//播放消息
api.PlayMessage(GotyeMessage message);
//开始播放回馈
void onPlayStart(GotyeStatusCode code, GotyeMessage message){
}
//播放进度回馈
void onPlaying(GotyeStatusCode code, int position){
}
//播放结束回馈
void onPlayStop(GotyeStatusCode code){
}
//手动停止播放
api.StopPlay();

举报消息

提醒:请先注册ChatListener。

// type为举报类型,content为举报附带文本,message为要举报的消息
GotyeStatusCode code=api.Report(type,content,message)

举报后服务器回调onReport(code,message)

敏感词过滤

//通过会话获取该会话的最后信息
api. enableTextFilter(GotyeChatTargetType type, boolean enabled);
// type为GotyeChatTargetTypeUser、GotyeChatTargetTypeRoom、GotyeChatTargetTypeGroup
//enabled为是否过滤

会话

获取会话列表

List<GotyeChatTarget> sessions = api.GetSessionList();

获取会话详情

//通过会话获取该会话的最后信息
GotyeMessage lastMsg =api.GetLastMessage(session);

激活/隐藏 会话

应用场景为:系统默认收到的消息都为未读状态,而假如此时我们正在和某个人聊天,那么收到此人的消息就需要手动设置为已读,这里我们在跟某个人聊天时统一设置该聊天对象的所有消息为已读省去了维护消息状态的和未读消息的频繁操作的麻烦

//标记某个聊天对象的以后接收到的所有消息标记为已读,target可以为GotyeUser、GotyeGroup或者GotyeRoom
api.ActiveSession(target);

当我们离开聊天界面不在和某个聊天对象聊天时,此时就不需要再去关心相关的消息状态了可以还原回来上面的操作

//取消标记,target可以为GotyeUser、GotyeGroup或者GotyeRoom
api.DeactiveSession (target);

删除会话

api.DeleteSession(session);

会话置顶

// target可以为GotyeUser、GotyeGroup、GotyeRoom,markTop为true时为聊天置顶,为false时取消置顶
api.MarkSessionTop (target,markTop)

PC平台

说明: 此版本主要针对android,之所以出win32是为了方便unity3d前期在pc上开发和测试用,这里的win32版本有个别的bug请忽略

win32版本运行说明: 由于win32 版用到了一起其他的库,所以请将/Assets/Plugins/Win32目录下的dll都拷贝到unity安装目录下的Editor目录下即可,

pthreadVC2.dll这个dll该目录下已经存在,可以不覆盖此dll。其他跟android接口调用一样

关于界面适配问题: 由于请在开发的时候新建一个分辨率720x1280的分辨率运行该demo效果可能会更好些,ui界面时基于android分辨率简单开发的, 本demo重在展

示gotyeIM接口的使用,效果方面不尽如人意,请请海涵!

以上有任何问题请联系我们的客服。

返回顶部