即时通讯SDK IMSDK使用心得

不得不说imsdk使用起来真的很方便很灵活,爱萌提供服务器,给出的sdk里的方法甚至不需要new 线程来调用,要导入的so文件和jar包都特别少,而且不需要往AndroidMenefest里面添加组件,而且注册的时候上传一个包名就可以了,都不需要上传sha1,使用次数也几乎是不限制的,找到这样一个sdk真实乐开花。于是写了一个ChatUtil封装一些常用方法

首先要在activity(官方推荐在application)里初始化一下

IMSDK.init(getApplicationContext(), "注册得到的appKey"); 

下面是常见的方法封装

import java.util.ArrayList;
import java.util.List;


import imsdk.data.IMMyself;
import imsdk.data.IMMyself.OnActionListener;
import imsdk.data.IMMyself.OnReceiveTextListener;
import imsdk.data.localchatmessagehistory.IMChatMessage;
import imsdk.data.localchatmessagehistory.IMMyselfLocalChatMessageHistory;
import imsdk.data.recentcontacts.IMMyselfRecentContacts;


public class ChatUtils {
	/**
	 * 接受一个用户名,先试着注册,然后登陆
	 * @param username
	 * @return
	 */
	public  static void InitChat(String username){
		// 注册、登录前,需要设置customUserID和password
				IMMyself.setCustomUserID(username);//这个用户名是你app使用者的用户名,同一个app的使用者相当于是在一个单独数据库表里,可以自由的添加
				IMMyself.setPassword("123456");
				System.out.println("准备注册 ");
//				 注册 设置超时时长为30秒
				IMMyself.register(30, new OnActionListener() {
				    @Override
				    public void onSuccess() {
				       System.out.println("聊天软件注册成功");
				       login();
				    }
				 
				    @Override
				    public void onFailure(String error) {//如果用户名重复也会进入这个方法,一般是注册成功进行登录,不登录是不能发信息的
				        if (error.equals("Timeout")) {
				            error = "注册超时 ";
				        }
				        //error还会包含一些其他信息
				       System.out.println("注册失败"+error);
				       login();//不管注册成功还是失败都进行登陆,因为如果重名是注册不上的
				    }
				});
				
	}
	
	
	/**
	 * 登陆用的函数
	 */
	public static void login(){
		// 登陆 设置超时时长为5秒
				IMMyself.login(false, 5, new OnActionListener() {
				    @Override
				    public void onSuccess() {
				    	System.out.println("登陆成功");
                                        long unreadMsgCount = IMMyselfRecentContacts.getUnreadChatMessageCount();
				    	System.out.println("未读消息数是"+unreadMsgCount);
				    	//设置即时消息监听器
				    	IMMyself.setOnReceiveTextListener(new OnReceiveTextListener() {
						    // 监听来自其他用户的文本讯息
						    @Override
						    public void onReceiveText(String text, String fromCustomUserID, long serverActionTime) {
						        System.out.println("收到来自"+fromCustomUserID);
						    	System.out.println("消息是"+text);
                                                     //处理消息的方法写在这,但是登录前接受的消息不会出现在这里
                                                       }
						 
						    // 监听系统消息
						    @Override
						    public void onReceiveSystemText(String text, long serverActionTime) {
						    	System.out.println("收到系统消息"+text);
						    }
						});
				    	
				    	/**
						 * 请把登陆后要做的事写在这
						 */
				    }

					@Override
					public void onFailure(String arg0) {
						// TODO Auto-generated method stub
						System.out.println("登录失败");
						 /**
				         * 请把登录失败后要做的事写在这
				         */
					}
					
				});
	}
	/**
     * 发送即时消息用的函数
     * @param receiver 接受者的用户名
     * @param content 要发的内容
     */
	public void sendMessage(String receiver,String content){
		IMMyself.sendText(content, receiver, 2000, new OnActionListener() {
		    @Override
		    public void onSuccess() {
		    	System.out.println("发送成功");
		    	/**
		    	 * 请把发送成功后要做的事写在这
		    	 */
		    }
		 
		    @Override
		    public void onFailure(String error) {
		    	System.out.println("发送失败");
		    	/**
		    	 * 请把发送失败要做的事写在这
		    	 */
		    }
		});
	}
	
	/**
	 * 获取与某人的聊天记录
	 * @param partner 对话者
	 * @return
	 */
	public static List<IMChatMessage> getHistory(String partner){
		// 获取与某用户聊天记录的单条消息
		// index=0,表示获取最后一条消息
		List<IMChatMessage> list = new ArrayList<IMChatMessage>();
		IMChatMessage chatMsg = IMMyselfLocalChatMessageHistory.getChatMessage(partner, 0);
		long count = IMMyselfLocalChatMessageHistory.getChatMessageCount(partner);
		for (int i = 0; i < count; i++) {
			list.add(IMMyselfLocalChatMessageHistory.getChatMessage(partner, i));
		}
		return list;
	}
	
}


你可能感兴趣的:(android,即时通讯)