zoukankan      html  css  js  c++  java
  • 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


















  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/huihuizhang/p/5217986.html
Copyright © 2011-2022 走看看