1. 程式人生 > >Android如何快速整合環信EaseUI

Android如何快速整合環信EaseUI

最近專案中要求實現即時通訊的功能,於是就找到了環信的即時通訊。下面我就來分享一下如何簡單快速的整合環信EaseUI以及我在整合中遇到的問題。

ps:想要快速方便的整合最好不要按照官方文件的要求來做,因為你會發現全是坑啊!!!無力吐槽......

首先:我們需要到官網去註冊並建立應用。會生成我們自己的AppId,這個需要記下來,我們會在Manifest檔案中寫入我們自己的AppId

然後下載SDK

登入到環信的官網首頁-->下載-->即時通訊雲,然後選擇下載Android的SDK+Demo。

下載完成後的資料夾

然後我們需要開啟examples資料夾將easeui資料夾匯入AS中(AS中:File-->New-->ImportModule,然後選擇easeui對應的路徑即可)。

之後我們需要將easeui同步到我們的專案中

點選後然後ok就可以了。ps:這裡需要值得一提的是在匯入和同步的過程中,我們要儘量把easeui的grale版本修改為和我們自己工程的版本一致,不然會很容易出錯。

一丶程式碼部分(按照官方文件在Manifest檔案中新增對應的許可權以及新增我們自己的AppID):

<!-- 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" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<-------------------------------------------------華麗的分割線------------------------------------->
<!-- 設定環信應用的AppKey -->
    	<meta-data android:name="EASEMOB_APPKEY"  android:value="Your AppKey" />
    	<!-- 宣告SDK所需的service SDK核心功能-->
    	<service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
        <service android:name="com.hyphenate.chat.EMJobService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="true"
            />
        <!-- 宣告SDK所需的receiver -->
        <receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED"/>
                <data android:scheme="package"/>
            </intent-filter>
            <!-- 可選filter -->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
二丶初始化EaseUI:

我們需要在專案最開始執行的時候對其進行初始化,所以要寫在app裡

public class MyApp extends Application{
    @Override
public void onCreate() {
        super.onCreate();
EaseUI.getInstance().init(this, null);
EMClient.getInstance().setDebugMode(true);
 }
}
三丶登入註冊介面(佈局自己隨意畫就可以),下面是我寫的Demo

//註冊的方法,這裡需要注意的是這步是非同步操作,所以我們需要把它寫在子執行緒中
private void register() {
new Thread(new Runnable() { @Overridepublic void run() { try { EMClient.getInstance().createAccount(nameEt.getText().toString().trim(), passwordEt.getText().toString().trim());Log.d("TalkFragment", "註冊成功");} catch (HyphenateException e) { e.printStackTrace();Log.e("TalkFragment", "註冊失敗"+e.getMessage());} } }).start();}
//登入的方法
private void login() {
    EMClient.getInstance().login(nameEt.getText().toString().trim(), passwordEt.getText().toString().trim(), new EMCallBack() {
        @Override
public void onSuccess() {
            startActivity(new Intent(getContext(),TalkActivity.class));
//Toast.makeText(getContext(), "登入成功", Toast.LENGTH_SHORT).show();
}

        @Override
public void onError(int i, String s) {
            Log.d("TalkFragment", i + " " + s.toString());
}

        @Override
public void onProgress(int i, String s) {

        }
    });
}

這個是退出的方法,哪裡需要寫哪裡~~~
private void logout() {
    EMClient.getInstance().logout(false, new EMCallBack() {
        @Override
public void onSuccess() {
            startActivity(new Intent(getContext(),MainActivity.class));
getActivity().finish();
}

        @Override
public void onError(int i, String s) {

        }

        @Override
public void onProgress(int i, String s) {

        }
    });
}

四丶登入成功後我們想要跳轉到會話介面:
//啟動會話列表
EaseConversationListFragment conversationListFragment = new EaseConversationListFragment();
conversationListFragment.setConversationListItemClickListener(new EaseConversationListFragment.EaseConversationListItemClickListener() {
    @Override
public void onListItemClicked(EMConversation conversation) {
        startActivity(new Intent(TalkActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, conversation.conversationId()));
}
});
這裡需要注意的是傳入的第二個引數
conversation.conversationId()
官方文件給出的是conversation.getUserName(),但是不知道我的為什麼沒有這個方法,後來研究發現返回的就是這個conversationId,所以直接填入就可以了

五丶跳轉到聯絡人介面(坑來了~~~~)

//直接啟動聯絡人列表
contactListFragment = new EaseContactListFragment();
//需要設定聯絡人列表才能啟動fragment
new Thread(new Runnable() {
    @Override
public void run() {
        contactListFragment.setContactsMap(getContacts());
}
}).start();
//設定item點選事件
contactListFragment.setContactListItemClickListener(new EaseContactListFragment.EaseContactListItemClickListener() {

    @Override
public void onListItemClicked(EaseUser user) {
        startActivity(new Intent(TalkActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, user.getUsername()));
}
});
你會發現這樣寫完並沒有顯示聯絡人,這是因為我們需要再新增好友申請後的回撥中再設定一遍聯絡人並且重新整理一下 ps:這是個巨坑~~~當時整合的時候已然崩潰!!!

所以需要在其下方新增如下程式碼:

EMClient.getInstance().contactManager().setContactListener(new EMContactListener() {


    @Override
public void onContactInvited(String username, String reason) {
        //收到好友邀請
Log.e(TAG, "onContactInvited: " + username);
}

    @Override
public void onFriendRequestAccepted(String s) {
        Log.e(TAG, "onFriendRequestAccepted: " + s);
}

    @Override
public void onFriendRequestDeclined(String s) {
        Log.e(TAG, "onFriendRequestDeclined: " + s);
}

    @Override
public void onContactDeleted(String username) {
        //被刪除時回撥此方法
Log.e(TAG, "onContactDeleted: " + username);
}


    @Override
public void onContactAdded(String username) {
        //增加了聯絡人時回撥此方法
Log.e(TAG, "onContactAdded: " + username);
new Thread(new Runnable() {
            @Override
public void run() {
                contactListFragment.setContactsMap(getContacts());
contactListFragment.refresh();
}
        }).start();
}
});
到這裡我們就可以實現簡單的即時通訊功能了~~~如果還有什麼需求只需要自己新增就可以了

執行一下:

                 

注意:1,百度地圖會和easeui衝突 2,傳送定位或者開啟大圖的時候程式會崩掉,這是因為我們沒有在Manifest檔案中註冊easeui中的兩個Activity