• unity手游之聊天SDK集成与使用一


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

  • 相关阅读:
    三道趣味题目
    iOS开发中使用静态库 .a 文件
    java Graphics2D 画图
    堆和栈的区别
    iOS开发中KVC、KVO简介
    GPUImage的简单使用
    OC中 self.view.frame.size.height = 100; 不能通过编译的原因
    Xcode7 低版本iOS系统上下有黑边的问题
    c语言数组赋值
    ELF interpreter /libexec/ld-elf32.so.1 not found
  • 原文地址:https://www.cnblogs.com/rentianlong/p/4940553.html
Copyright © 2020-2023  润新知