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



















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM