Android 環信 客服整合
阿新 • • 發佈:2018-12-31
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);
問題解決!