安卓实现聊天

一.简介

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

二.准备工作

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


    安卓实现聊天_第1张图片
    已成功配置

    2.然后再module的gradle 中添加一些代码
    安卓实现聊天_第2张图片

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

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

三.代码环节

  • 首先需要初始化SDK


    安卓实现聊天_第3张图片
    初始化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 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 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.结束

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

你可能感兴趣的:(安卓实现聊天)