1. 程式人生 > >Android 環信 客服整合

Android 環信 客服整合

1,引入依賴

compile 'com.hyphenate:kefu-easeui-android:latest.release'

在專案對應的build.gradle   android中defaultConfig之下新增

defaultConfig {ndk {
        abiFilters 'armeabi-v7a', 'arm64-v8a', 'armeabi', 'x86'
}
}

2,清單

<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.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" />

3,初始化環信

在MyApplication 的onCreate()中

ChatClient.Options options = new ChatClient.Options();
options.setAppkey(ShareKey.HX_Appkey);
options.setTenantId(ShareKey.HX_ID);
if (!ChatClient.getInstance().init(this, options)) {
    return;
}
UIProvider.getInstance().init(this);

4,登入環信(環信賬號註冊放後臺)

private void hxLogin(String phoneStr, String passStr) {
    ChatClient.getInstance().login(phoneStr, passStr, new HXCallback());
}

登入監聽

public class HXCallback implements Callback {

    @Override
public void onSuccess() {

    }

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

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

    }
}

5,進入聊天介面

/*跳轉到客服頁面*/
public static void startChat(Context context) {
   //判斷環信是否登入
    if (ChatClient.getInstance().isLoggedInBefore()) {
        Intent intent2 = new IntentBuilder(context)
                .setTargetClass(ChatAc.class)
                .setTitleName("客服")//這是傳到聊天介面的客服暱稱,
                .setServiceIMNumber(ShareKey.HX_IM) //獲取地址:“管理員模式 > 渠道管理 > 手機APP”頁面的關聯的“IM服務號”
.build();
context.startActivity(intent2);
} else {
        Intent intent = new Intent();
intent.setClass(context, LoginAc.class);
context.startActivity(intent);
}
}

public class ChatAc extends AppCompatActivity {
    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.ac_chat);
ChatFragment chatFragment = new ChatFragment();
chatFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
}
}

佈局:ac_chat.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
    <FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>


整合過程中遇到一個問題,點選聊天內容的圖片和視屏會包空指標

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.hyphenate.helpdesk.easeui.Notifier.reset()' on a null object reference

解決方法:

          環信官網初始化程式碼是:

        //環信客服系統初始化
        // 設定為true後,將列印日誌到logcat, 釋出APP時應關閉該選項
//        ChatClient.getInstance().init(this, new ChatClient.Options().setAppkey(ShareKey.HX_Appkey).setTenantId(ShareKey.HX_ID));
//        ChatClient.getInstance().init(this, new ChatClient.Options().setConsoleLog(false));

修改為

ChatClient.Options options = new ChatClient.Options();
options.setAppkey(ShareKey.HX_Appkey);
options.setTenantId(ShareKey.HX_ID);
if (!ChatClient.getInstance().init(this, options)) {
    return;
}
UIProvider.getInstance().init(this);

問題解決!