Android 环信的使用

1.导入包

http://docs.easemob.com/doku.php?id=start:200androidcleintintegration:10androidsdkimport

在清单文件AndroidManifest.xml里加入以下权限,以及写上你注册的appkey

1.权限配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="Your Package"
    android:versionCode="100"
    android:versionName="1.0.0">
 
	<!-- Required -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 
	应用包名及appkey替换:
 	<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:name="Your Application">
 
   		<!-- 设置环信应用的appkey -->
    	<meta-data android:name="EASEMOB_APPKEY"  android:value="Your AppKey" />
    	<!-- 声明sdk所需的service SDK核心功能-->
    	<service android:name="com.easemob.chat.EMChatService" />
 	</application>
</manifest>

2.初始化SDK

要求在application的oncreate方法中做初始化

EMChat.getInstance().init(applicationContext);
 
/**
 * debugMode == true 时为打开,sdk 会在log里输入调试信息
 * @param debugMode
 * 在做代码混淆的时候需要设置成false
 */
EMChat.getInstance().setDebugMode(true);

//在做打包混淆时,要关闭debug模式,避免消耗不必要的资源

3.注册

注册模式分两种,开放注册和授权注册。只有开放注册时,才可以客户端注册。

开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号, 授权注册的流程应该是您服务器通过环信提供的rest api注册,之后保存到您的服务器或返回给客户端。

注册用户名会自动转为小写字母,所以建议用户名均以小写注册(强烈建议开发者通过后台调用rest接口去注册环信id,客户端注册方法不提倡使用)

new Thread(new Runnable() {
    public void run() {
      try {
         // 调用sdk注册方法
         EMChatManager.getInstance().createAccountOnServer(username, pwd);
      } catch (final EaseMobException e) {
      //注册失败
		int errorCode=e.getErrorCode();
		if(errorCode==EMError.NONETWORK_ERROR){
		    Toast.makeText(getApplicationContext(), "网络异常,请检查网络!", Toast.LENGTH_SHORT).show();
		}else if(errorCode==EMError.USER_ALREADY_EXISTS){
		    Toast.makeText(getApplicationContext(), "用户已存在!", Toast.LENGTH_SHORT).show();
		}else if(errorCode==EMError.UNAUTHORIZED){
			Toast.makeText(getApplicationContext(), "注册失败,无权限!", Toast.LENGTH_SHORT).show();
		}else{
			Toast.makeText(getApplicationContext(), "注册失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
      }
   }
}).start();

4.登录

登陆聊天服务器

需要注意: 登陆成功后需要调用

EMGroupManager.getInstance().loadAllGroups();

从本地数据库加载群组到内存的操作,如果你的应用中有群组,请加上这句话(要求在每次进入应用的时候调用)

EMChatManager.getInstance().loadAllConversations();

从本地数据库加载聊天记录到内存的操作(强烈建议在每次进入应用的时候调用) 以上两个方法是为了保证进入主页面后本地会话和群组都load完毕。另外如果登陆过,app长期在后台再进的时候也可能会导致加载到内存的群组和会话为 空,可以在主页面的oncreate里也加上这两句代码,当然,更好的办法应该是放在程序的开屏页,可参考demo的SplashActivity。

EMChatManager.getInstance().login(userName,password,new EMCallBack() {//回调
	@Override
	public void onSuccess() {
		runOnUiThread(new Runnable() {
			public void run() {
				EMGroupManager.getInstance().loadAllGroups();
				EMChatManager.getInstance().loadAllConversations();
				Log.d("main", "登陆聊天服务器成功!");
			}
		});
	}
 
	@Override
	public void onProgress(int progress, String status) {
 
	}
 
	@Override
	public void onError(int code, String message) {
		Log.d("main", "登陆聊天服务器失败!");
	}
});

自动登录

即首次登录成功后,不需要再次调用登录方法,在下次app启动时,SDK会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息(以上情况是在未调用登出的情况下实现的)。 配置是否进行自动登录

SDK中自动登录属性默认是true打开的,如果不需要自动登录,在初始化SDK之前,调用

EMChat.getInstance().setAutoLogin(false);

设置为false关闭

自动登录

自动登录在以下几种情况下会被取消

用户调用了SDK的登出动作;

用户在别的设备上更改了密码, 导致此设备上自动登陆失败;

用户的账号被从服务器端删除;

用户从另一个设备登录,把当前设备上登陆的用户踢出.

重连

当掉线时,Android SDK会自动重连,无需进行任何操作。

//注册一个监听连接状态的listener
EMChatManager.getInstance().addConnectionListener(new MyConnectionListener());
 
//实现ConnectionListener接口
private class MyConnectionListener implements EMConnectionListener {
    @Override
	public void onConnected() {
	//已连接到服务器
	}
	@Override
	public void onDisconnected(final int error) {
		runOnUiThread(new Runnable() {
 
			@Override
			public void run() {
				if(error == EMError.USER_REMOVED){
					// 显示帐号已经被移除
				}else if (error == EMError.CONNECTION_CONFLICT) {
					// 显示帐号在其他设备登陆
				} else {
				if (NetUtils.hasNetwork(MainActivity.this))
					//连接不到聊天服务器
				else
					//当前网络不可用,请检查网络设置
				}
			}
		});
	}
}

退出聊天登陆

EMChatManager.getInstance().logout();//此方法为同步方法
//此方法为异步方法
EMChatManager.getInstance().logout(new EMCallBack() {
 
	@Override
	public void onSuccess() {
	    // TODO Auto-generated method stub
 
	}
 
	@Override
	public void onProgress(int progress, String status) {
	    // TODO Auto-generated method stub
 
	}
 
	@Override
	public void onError(int code, String message) {
	    // TODO Auto-generated method stub
 
	}
});

好友管理


获取好友列表

如果使用环信的好友体系需要先设置 EMChatManager.getInstance().getChatOptions().setUseRoster(true)

获取好友的username list,开发者需要根据username去自己服务器获取好友的详情

List<String> usernames = EMContactManager.getInstance().getContactUserNames();//需异步执行

查找好友

SDK不提供好友查找的服务, 如需要查找好友, 需要调用开发者自己服务器的用户查询接口

为了保证查找到的好友可以添加, 需要将用户自己服务器的用户数据库, 通过SDK的后台接口导入到SDK服务器中

添加好友

//参数为要添加的好友的username和添加理由
EMContactManager.getInstance().addContact(toAddUsername, reason);//需异步处理

删除好友

EMContactManager.getInstance().deleteContact(username);//需异步处理

同意好友请求

//同意username的好友请求
EMChatManager.getInstance().acceptInvitation(username);//需异步处理

拒绝好友请求

EMChatManager.getInstance().refuseInvitation(username);//需异步处理

监听好友状态事件

EMChat.getInstance().setAppInited();

EMContactManager.getInstance().setContactListener(new EMContactListener() {
   
   @Override
   public void onContactAgreed(String username) {
       //好友请求被同意
   }
   
   @Override
   public void onContactRefused(String username) {
       //好友请求被拒绝
   }
   
   @Override
   public void onContactInvited(String username, String reason) {
       //收到好友邀请
   }
   
   @Override
   public void onContactDeleted(List<String> usernameList) {
       //被删除时回调此方法
   }
   
   
   @Override
   public void onContactAdded(List<String> usernameList) {
       //增加了联系人时回调此方法
   }
});

黑名单

获取黑名单列表

/**
* 从本地获取黑名单中的用户的usernames
*
* @return
* @throws EaseMobException
*/
EMContactManager.getInstance().getBlackListUsernames();

把用户加入到黑名单

//第二个参数如果为true,则把用户加入到黑名单后双方发消息时对方都收不到;false,则
//我能给黑名单的中用户发消息,但是对方发给我时我是收不到的
EMContactManager.getInstance().addUserToBlackList(username,true);//需异步处理

把用户从黑名单中移除

EMContactManager.getInstance().deleteUserFromBlackList(username);//需异步处理

Demo及SDK下载

www.easemob.com/downloads

				
时间: 2024-11-07 04:37:28

Android 环信的使用的相关文章

关于 android 环信无法正确获取昵称的问题

本案例中 username 记录成 userId了, nick 始终为空...,这是 getNick() 取得的就是 username..... 如果想自己取得自己系统的nickname则 做以下调整即可,即:重写了 getNick 和 setNick, 这是 会将nick保存至本地sqlite数据库 /** * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. * * Licensed under the Ap

Android 即时音视频解决方案1——环信

需求 即时音视频通话 解决方案 环信,官方地址http://www.easemob.com/ SDK下载 http://downloads.easemob.com/downloads/easemob-sdk-2.2.2.zip SDK集成 解压下载的文件,将libs下的easemobchat_2.2.2.jar拷到Android Studio项目中的libs中,并在main目录下新建jniLibs目录,将so文件拷到其中.如图 代码抽取 我们只需要即时音视频的功能,因此环信提供的Demo中有多余

环信Android客户端集成文档

一.Android SDK简介 环信SDK为用户开发IM相关的应用提供的一套完善的开发框架. 包括以下几个部分: SDK_Core为核心的消息同步协议实现,完成与服务器之间的信息交换. SDK是基于核心协议实现的完整的IM功能,实现了不同类型消息的收发.会话管理.群组.好友.聊天室等功能. EaseUI是一组IM相关的UI控件,旨在帮助开发者快速集成环信SDK. SDK采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块: EMClient: SDK的入口,主要

Android 基于环信即时云的IM开发

假如我们想要快速实现一个即时通讯功能,最快捷的方法就是借助网络上的即时云服务.下面我们讲述一下如何利用环信实现一个IM功能. 首先下载环信的SDK,也就是几个库,把demo里面的HXSDKHelper.java,HXSDKModel.java,DefaultHXSDKModel.java,HXPreferenceUtils.java四个文件复制到新建的工程下.稍作修改. 首先在Application中实现初始化SDK public static DemoHXSDKHelper hxSDKHelp

环信集成,获取注册开发者用户获取Appkey(二)

首先登陆此网站:https://console.easemob.com 点击注册:具体注册信息,按照自己的信息,记着填写正确的邮箱,因为账号需要邮箱激活. 登陆后,点击我的应用, 创建应用, 成功后就会看到多个一个应用,在创建前有个sandbox的应用,不清楚是干嘛的,直接无视即可. 创建成功自己的应用后,可以创建用户之类.打开这个应用比如叫test1 里面就可以看到.appkey啦,这就是手机端需要在配置文件配置的, 他的下面就有快速集成,和Android,ios怎么配置之类. IOS需要上传

李洪强iOS开发之-环信02.2_环信官网下载环信 SDK

李洪强iOS开发之-环信02.2_环信官网下载环信 SDK 移动客服即时通讯云 iOS SDK 当前版本:V3.1.4 2016-07-08 [ 版本历史 ] | 开发指南 | 知识库 | Demo源码 | 最新SDK下载Demo扫码安装 切换至v2.x版本 iOS SDK v2.x 当前版本:V2.2.6 2016-06-28 [ 版本历史 ] | 开发指南 | 知识库 | Demo源码 | 最新SDK下载Demo扫码安装 返回v3.x版本 Android SDK 当前版本:V3.1.4 20

环信即时聊天步骤

1:注册账号 2:下载sdk 3:导入modle EaseUI 4:讲model加入到主项目 5:登陆功能:代码如下: EMClient.getInstance().login(userName,password,new EMCallBack() {//回调 @Override public void onSuccess() { EMClient.getInstance().groupManager().loadAllGroups(); EMClient.getInstance().chatMa

54.用环信实现聊天功能

1.配置EM <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.administrator.chatdemo"> <!--环信需要权限--><uses-permission android:name="android.permission.VIBRATE" /> <uses-pe

《环信支持千万并发即使通讯的技术要点》阅读摘要

一天早上起来,偶然机会看到<环信支持千万并发即使通讯的技术要点>演示文档,简单翻阅之后,感觉干货很多,于是快速记下以下笔记. 一.IM协议和IM Server XMPP确实很传统,WhatsApp选用了,同时经过压缩.精简(比如说user字符串使用u字符替代)处理,让XMPP轻量不少. MQTT,如何实现群组.好友呢,这个是业务层面上事情,大家都订阅某一个主题Topic好了,属于业务拓展. SIP,接触少. 微信私有协议ActivitySync,以前在博客上分享过. 正确拼写是WhatsApp