GithubHelp home page GithubHelp logo

kefu-android-demo's Introduction

环信客服SDK (Android版)

Introduction

开发工具

Android Studio


目录

添加依赖,在app的build.gradle 中dependencies中加入如下(添加后需同步gradle):

android{
   ......
   defaultConfig {
     ndk {
        //选择要添加的对应cpu类型的.so库
        abiFilters 'armeabi', 'arm64-v8a'
        //还可以添加 'armeabi-v7a', 'x86'
     }
   }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //环信客服SDK
    compile 'com.hyphenate:kefu-easeui-android:latest.release' //或者 compile 'com.hyphenate:kefu-easeui-android:1.1.9'
    //EaseUI中 头像获取用到了glide,请添加glide库
    compile 'com.github.bumptech.glide:glide:4.7.0' //其他版本也可以
    //EaseUI中,fragment用到了android-support-v4包
    compile 'com.android.support:support-v4:27.1.1' //其他版本也可以

}

注意 如果在添加以上abiFilter配置后AndroidStudio有如下提示:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.

则需要在Project根目录的gradle.properties文件中添加:

android.useDeprecatedNdk=true

初始化

初始化需要在Application中调用,ChatClient的其他方法也都需要在他后面调用 例如:DebugMode、自定义通知栏、消息通知等

ChatClient.Options options = new ChatClient.Options();
options.setAppkey("Your appkey");(必填项;)//appkey获取地址:console.easemob.com
options.setTenantId("Your tenantId");(必填项;)//tenantId获取地址:kefu.easemob.com

// Kefu SDK 初始化
if (!ChatClient.getInstance().init(this, options)){
    return;
}
// Kefu EaseUI的初始化
UIProvider.getInstance().init(this);
//后面可以设置其他属性
//Kefu sdk 初始化简写方式:
  ChatClient.getInstance().init(this, new ChatClient.Options().setAppkey("zdxd#ksf").setTenantId("35"));

设置调试模式

// 设置为true后,将打印日志到logcat, 发布APP时应关闭该选项
ChatClient.getInstance().setDebugMode(true|false);

注册

注册建议在服务端创建,而不要放到APP中,可以在登录自己APP时从返回的结果中获取环信账号再登录环信服务器

ChatClient.getInstance().createAccount("username", "password", new Callback(){});

//ErrorCode:
Error.NETWORK_ERROR 网络不可用
Error.USER_ALREADY_EXIST  用户已存在
Error.USER_AUTHENTICATION_FAILED 无开放注册权限(后台管理界面设置[开放|授权])
Error.USER_ILLEGAL_ARGUMENT 用户名非法

登录

ChatClient.getInstance().login("username", "password", new Callback(){});

打开会话页面

Intent intent = new IntentBuilder({Activity}.this)
						.setServiceIMNumber("客服关联的IM服务号")
						.build();
				startActivity(intent);

判断是否已经登录

if(ChatClient.getInstance().isLoggedInBefore()){
    //已经登录,可以直接进入会话界面
}else{
    //未登录,需要登录后,再进入会话界面
}

登出

登出后则无法收到客服发来的消息

ChatClient.getInstance().logout(new Callback(){});

高级选项

添加小米推送

申请推送证书并添加后台

进入小米推送后台,创建一个应用,完成后得到AppId、AppKey、AppSecret。 登录环信管理后台,选择你的应用->选择推送证书->Xiaomi->新增证书。 证书名称为从小米推送后台得到的AppID,证书密钥为:AppSecret,以及填上你当前应用的包名,点击上传即可.

AndroidManifest.xml配置

<manifest>
     ...
     <!--例如: com.easemob.helpdeskdemo.permission.MIPUSH_RECEIVE -->
    <permission
        android:name="你的包名.permission.MIPUSH_RECEIVE"
        android:protectionLevel="signature" />
    <uses-permission android:name="你的包名.permission.MIPUSH_RECEIVE" />

	<application>
	...
	<service
            android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
            android:enabled="true"
            android:exported="true" />
        <service
            android:name="com.xiaomi.mipush.sdk.MessageHandleService"
            android:enabled="true" />

        <receiver
            android:name="com.hyphenate.chat.EMMipushReceiver"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.xiaomi.mipush.ERROR" />
            </intent-filter>
        </receiver>
	...
	</application>
</mainfest>

Application初始化中option配置

ChatClient.Options options = new ChatClient.Options();
options.setAppkey("Your appkey");//appkey获取地址:console.easemob.com
options.setTenantId("Your tenantId");//tenantId获取地址:kefu.easemob.com
options.setMIPushConfig("mipushAppId", "mipushAppkey");
// Huanxin Kefu SDK 初始化
if (!ChatClient.getInstance().init(this, options)){
    return;
}
//后面可以设置其他属性

添加网络监听,可以显示当前是否连接服务器

ChatClient.getInstance().addConnectionListener(new ChatClient.ConnectionListener() {
			@Override
			public void onConnected() {
                   //成功连接到服务器
			}

			@Override
			public void onDisconnected(int errorcode) {

			}
		});

添加消息监听

ChatClient.getInstance().getChat().addMessageListener(new ChatManager.MessageListener() {
            @Override
            public void onMessage(List<Message> list) {
                //收到普通消息
            }

            @Override
            public void onCmdMessage(List<Message> list) {
                 //收到命令消息,命令消息不存数据库,一般用来作为系统通知,例如留言评论更新,
                 //会话被客服接入,被转接,被关闭提醒
            }

            @Override
            public void onMessageStatusUpdate() {
            //消息的状态修改,一般可以用来刷新列表,显示最新的状态

            }

            @Override
            public void onMessageSent() {
            //发送消息后,会调用,可以在此刷新列表,显示最新的消息

            }
        });

其他更多属性请进入官网文档查询

kefu-android-demo's People

Contributors

eastrain avatar githubzhaoliang avatar jma01 avatar liyuzhao avatar tiancruyff avatar zhanw avatar zhaopengpeng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kefu-android-demo's Issues

客服评价在dialog样式下不能正常发送

之前用im的sdk做的客服功能,新改到客服专用的sdk后,在dialog中评价客服不能正常回调,用Activity可以正常发送,但如果Activity的主题改成Dialog后,又发送不出去,走不到回调中。调用客服评价的方法为: public static void sendEvalMessage(String msgId, String summary, String detail, final Callback callback);之前用im的sdk做同样的功能正常。

广播未注册,退出时报错

java.lang.IllegalArgumentException: Receiver not registered: com.hyphenate.chat.CountDownBroadCast
at com.hyphenate.chat.ChatManager.unregisterCountDown(ChatManager.java:273)

void unregisterCountDown() {

    if(this.broadCastReceiver != null) {
        EMClient.getInstance().getContext().unregisterReceiver(this.broadCastReceiver);
    }

}

客服云集成出错

Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio.

新下载的运行不起来

Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'BINTRAY_USER' for project ':kefu-easeui' of type org.gradle.api.Project.

OPPO手机报错。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/heytap/mcssdk/PushManager;
at com.hyphenate.push.platform.oppo.a.b(Unknown Source:0)
at com.hyphenate.push.platform.a.a(Unknown Source:6)
at com.hyphenate.push.EMPushHelper.a(Unknown Source:149)
at com.hyphenate.push.EMPushHelper.register(Unknown Source:37)
at com.hyphenate.chat.EMClient$7.run(Unknown Source:210)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.heytap.mcssdk.PushManager" on path: DexPathList[[zip file "/data/app/~~FfG8iQC4jTtH93nBFx8-lg==/com.laizezhijia-W-BXi6R3xXnHM6p6adKsVQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~FfG8iQC4jTtH93nBFx8-lg==/com.laizezhijia-W-BXi6R3xXnHM6p6adKsVQ==/lib/arm64, /data/app/~~FfG8iQC4jTtH93nBFx8-lg==/com.laizezhijia-W-BXi6R3xXnHM6p6adKsVQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64, /vendor/lib64, /odm/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.hyphenate.push.platform.oppo.a.b(Unknown Source:0) 
at com.hyphenate.push.platform.a.a(Unknown Source:6) 
at com.hyphenate.push.EMPushHelper.a(Unknown Source:149) 
at com.hyphenate.push.EMPushHelper.register(Unknown Source:37) 
at com.hyphenate.chat.EMClient$7.run(Unknown Source:210) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:923) 

import 项目报错

Could not get unknown property 'BINTRAY_USER' for project ':kefu-easeui' of type org.gradle.api.Project.

gradle 版本 3.5.2

OPPO手机闪退

集成OPPO推送后,初始化闪退
java.lang.NullPointerException
com.heytap.mcssdk.d.a(Unknown Source)

2 com.heytap.mcssdk.d.l(Unknown Source)
3 com.heytap.mcssdk.d.n(Unknown Source)
4 com.heytap.msp.push.HeytapPushManager.isSupportPush(Unknown Source)
5 com.hyphenate.push.platform.oppo.a.b(Unknown Source)
6 com.hyphenate.push.platform.a.a(Unknown Source)
7 com.hyphenate.push.EMPushHelper.a(Unknown Source)
8 com.hyphenate.push.EMPushHelper.register(Unknown Source)
9 com.hyphenate.chat.EMClient$7.run(Unknown Source)
10 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12 java.lang.Thread.run(Thread.java:848)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.