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


















  • 相关阅读:
    ReactNative 适合初学的第一个教程demo,找租房
    ReactNative 从环境和第一个demo说起,填坑教程
    WKWebView与JS交互,UIWebView+JavascriptCore和JS交互
    JS中匿名函数$(function(){ })和(function(){})()的区别
    对前端的一个H5项目的所思所想
    使用Swift打造动态库SDK和DemoAPP时所遇到的(Xcode7.3)
    Git 分支合并代码
    Flutter中fluro使用
    flutter_redux框架的使用
    解决React-native init 初始化时 info Installing required CocoaPods dependencies
  • 原文地址:https://www.cnblogs.com/huihuizhang/p/5217986.html
Copyright © 2011-2022 走看看