安卓实现聊天

一.简介

今天的技术交流的主要内容是简单介绍极光推送的IM(instant message)功能。

二.准备工作

  • JPsh上注册我们的应用
  • 下载JMessage SDK压缩包
  • 集成我们的SDK
    集成SDK时又分为两种方法,一种是手动集成,一种是利用Jcenter自动集成。
    这里我们为了简单起见,就选择了自动集成。
    1.首先我们需要确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持。(新建project默认配置就支持)


    已成功配置

    2.然后再module的gradle 中添加一些代码

    3.配置 AndroidManifest.xml
    根据 SDK 压缩包里demo中的 AndroidManifest.xml 样例文件,来配置应用程序项目的 AndroidManifest.xml 。
    主要步骤为:
    复制备注为 "Required" 的部分
    将标注为“您应用的包名”的部分,替换为当前应用程序的包名

    将标注为“您应用的Appkey”的部分,替换为在Portal上注册该应用的的Key

三.代码环节

  • 首先需要初始化SDK


    初始化SDK
  • 聊天需要用户,用户的注册
//注册
JMessageClient.register(String username, String password, BasicCallback callback) ;
//详细代码如下
JMessageClient.register("userName", "password", new BasicCallback() {
            @Override
            public void gotResult(int code, String s) {
                if(code==0){
                    //注册成功,可进行相应的逻辑操作
                }
            }
        });
  • 用户的登录
JMessageClient.login(String username, String password, BasicCallback callback);
JMessageClient.login("userName","password", new BasicCallback() {
          @Override
          public void gotResult(int responseCode, String responseMessage) {
                        
                if(responseCode==0){
                  //登录成功,可进行相应逻辑操作
                }
            }
        });
  • 退出登录
JMessageClient.logout();
  • 获取用户信息
        JMessageClient.getUserInfo(String username, GetUserInfoCallback callback);

        JMessageClient.getUserInfo("userName", new GetUserInfoCallback() {
            @Override
            public void gotResult(int responseCode, String responseMessage, UserInfo userInfo) {
                if(responseCode==0){
                    //获取用户信息成功,
                }
            }
        });
  • 更新用户信息
                    JMessageClient.updateMyInfo(UserInfo.Field updateField, UserInfo info, BasicCallback callback);
                    JMessageClient.updateMyInfo(UserInfo.Field.nickname, userInfo, new BasicCallback() {
                        @Override
                        public void gotResult(int responseCode, String responseMessage) {
                            if(responseCode==0){
                                //更新信息成功
                            }
                        }
                    });
  • 更新用户密码
JMessageClient.updateUserPassword(String oldPassword, String newPassword, BasicCallback callback);

下面开始即时通信环节

  • 先来看一下如何发送文字信息
//生成一条文字信息
JMessageClient.createSingleTextMessage(String username, String appKey, String text);
Message message = JMessageClient.createSingleTextMessage("userName","消息来啦");
//设置回调
      message.setOnSendCompleteCallback(new BasicCallback() {
               @Override
               public void gotResult(int responseCode, String s) {
                    
                  }
            });
//发送消息
      JMessageClient.sendMessage(message);

除此之外还有许多类型的消息可以发送,这里就不详细介绍了,详情见官网。

  • 那么如何接受消息呢
    这里极光推送将消息分为了两类,一类是在线消息,一类是离线消息
    public void onEvent(OfflineMessageEvent event) {
        //获取事件发生的会话对象
        Conversation conversation = event.getConversation();
        List<Message> newMessageList = event.getOfflineMessageList();//获取此次离线期间会话收到的新消息列表
        Log.e("TAG","收到消息了");
        Log.e("TAG",String.format(Locale.SIMPLIFIED_CHINESE, "收到%d条来自%s的离线消息。\n", newMessageList.size(), conversation.getTargetId()));
    }
    public void onEvent(MessageEvent event){
        Message message = event.getMessage();
        Log.e("TAG","收到来自"+message.getFromName()+"的消息"+((TextContent)message.getContent()).getText());
    }

注意:想要接收消息主要在相应的类中注册接收器
即:

JMessageClient.registerEventReceiver(Object receiver);

别忘记在销毁的时候取消注册

JMessageClient.unRegisterEventReceiver(Object receiver);

那么问题来了,发送消息的时候这个userName(对方的名称)从哪里来呢?

  • 好友的添加
                    ContactManager.sendInvitationRequest("userName","APPKEY","打招呼的话", new BasicCallback() {
                        @Override
                        public void gotResult(int responseCode, String responseMessage) {
                            if (responseCode == 0) {
                                //请求好友成功
                            }
                        }
                    });
  • 同样,还有的添加也需要事件类型的支持
    public void onEvent(ContactNotifyEvent event) {
        switch (event.getType()) {
            case invite_received://收到好友邀请
            ContactManager.acceptInvitation("test_user", "test_appkey", new BasicCallback() {
                      @Override
                      public void gotResult(int responseCode, String responseMessage) {
                          if (0 == responseCode) {
                              //接收好友请求成功
                          } else {
                              //接收好友请求失败
                          }
                      }
                  });
                break;
            case invite_accepted://对方接收了你的好友邀请
                //...
                break;
            case invite_declined://对方拒绝了你的好友邀请
                //...
                break;
            case contact_deleted://对方将你从好友中删除
                //...
                break;
            default:
                break;
        }
    }

好了,添加了好友以后就可以获取好友信息了就很容易可以顺畅的进行交流了.

  • 获取好友列表
ContactManager.getFriendList(new GetUserInfoListCallback() {
            @Override
            public void gotResult(int responseCode, String responseMessage, List<UserInfo> userInfoList) {
                if (0 == responseCode) {
                    //获取好友列表成功
                } else {
                    //获取好友列表失败
                }
            }
        });

注意,我们添加好友的时候如何判断这个用户是否存在呢
所以我们在搜索的时候先进行用户信息的获取,若返回出错,则用户不存在

        JMessageClient.getUserInfo("userName", new GetUserInfoCallback() {
            @Override
            public void gotResult(int responseCode, String responseMessage, UserInfo userInfo) {
                if(responseCode==0){
                   
                }else{
                  //用户不存在
                }
            }
        });

4.结束

相信到了这里大家都知道该如何去进行一次即时通信了吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,652评论 0 15
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,724评论 6 342
  • 青城山: 西蜀第一青城山, 老君阁顶接问天, 千阶万转盘山路, 寻仙问道头一观。
    云之憾阅读 390评论 1 1