{"id":18438264,"url":"https://github.com/easemob/kefu-android-demo","last_synced_at":"2025-04-07T20:35:25.022Z","repository":{"id":27052131,"uuid":"30517475","full_name":"easemob/kefu-android-demo","owner":"easemob","description":"demo app for help desk cloud","archived":false,"fork":false,"pushed_at":"2023-04-28T03:18:46.000Z","size":221575,"stargazers_count":94,"open_issues_count":14,"forks_count":57,"subscribers_count":26,"default_branch":"master","last_synced_at":"2024-04-13T16:05:28.357Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easemob.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-02-09T03:49:08.000Z","updated_at":"2024-03-27T14:49:14.000Z","dependencies_parsed_at":"2023-02-10T01:45:15.092Z","dependency_job_id":null,"html_url":"https://github.com/easemob/kefu-android-demo","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Fkefu-android-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Fkefu-android-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Fkefu-android-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easemob%2Fkefu-android-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easemob","download_url":"https://codeload.github.com/easemob/kefu-android-demo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223292221,"owners_count":17121098,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T06:19:18.016Z","updated_at":"2024-11-06T06:19:19.126Z","avatar_url":"https://github.com/easemob.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## 环信客服SDK (Android版)\n\n\n## Introduction\n\n\n### 开发工具\n\n\u003e **Android Studio**\n\n\n----\n\n## 目录\n\n* [入门指南](#Getting_started_guide)\n    1.[build.gradle配置](#Guide_build_gradle)\n    2.[初始化](#Guide_init)\n    3.[注册](#Guide_register)\n    4.[登录](#Guide_login)\n    5.[退出](#Guide_logout)\n    6.[会话](#Guide_Chat)\n    7.[日志](#Guide_Log)\n    8.[登录状态](#Guide_Login_Status)\n* [高级选项](#Advanced_Option)\n\n\n\n#### \u003cA NAME=\"Guide_build_gradle\"\u003e\u003c/A\u003e添加依赖，在app的build.gradle 中dependencies中加入如下(添加后需同步gradle)：\n```\nandroid{\n   ......\n   defaultConfig {\n     ndk {\n        //选择要添加的对应cpu类型的.so库\n        abiFilters 'armeabi', 'arm64-v8a'\n        //还可以添加 'armeabi-v7a', 'x86'\n     }\n   }\n}\n\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    //环信客服SDK\n    compile 'com.hyphenate:kefu-easeui-android:latest.release' //或者 compile 'com.hyphenate:kefu-easeui-android:1.1.9'\n    //EaseUI中 头像获取用到了glide，请添加glide库\n    compile 'com.github.bumptech.glide:glide:4.7.0' //其他版本也可以\n    //EaseUI中，fragment用到了android-support-v4包\n    compile 'com.android.support:support-v4:27.1.1' //其他版本也可以\n\n}\n```\n**注意** 如果在添加以上abiFilter配置后AndroidStudio有如下提示：\n```\nNDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.\n```\n\n则需要在Project根目录的gradle.properties文件中添加:\n```\nandroid.useDeprecatedNdk=true\n```\n\n#### \u003cA NAME=\"Guide_build_gradle\"\u003e\u003c/A\u003e初始化\n\u003e初始化需要在Application中调用，ChatClient的其他方法也都需要在他后面调用\n\u003e例如：DebugMode、自定义通知栏、消息通知等\n\n```\nChatClient.Options options = new ChatClient.Options();\noptions.setAppkey(\"Your appkey\");(必填项;)//appkey获取地址：console.easemob.com\noptions.setTenantId(\"Your tenantId\");(必填项;)//tenantId获取地址：kefu.easemob.com\n\n// Kefu SDK 初始化\nif (!ChatClient.getInstance().init(this, options)){\n    return;\n}\n// Kefu EaseUI的初始化\nUIProvider.getInstance().init(this);\n//后面可以设置其他属性\n```\n```\n//Kefu sdk 初始化简写方式：\n  ChatClient.getInstance().init(this, new ChatClient.Options().setAppkey(\"zdxd#ksf\").setTenantId(\"35\"));\n```\n\n#### \u003cA NAME=\"Guide_Log\"\u003e\u003c/A\u003e设置调试模式\n```\n// 设置为true后，将打印日志到logcat, 发布APP时应关闭该选项\nChatClient.getInstance().setDebugMode(true|false);\n```\n\n#### \u003cA NAME=\"Guide_register\"\u003e\u003c/A\u003e注册\n\n\u003e注册建议在服务端创建，而不要放到APP中，可以在登录自己APP时从返回的结果中获取环信账号再登录环信服务器\n\n```\nChatClient.getInstance().createAccount(\"username\", \"password\", new Callback(){});\n\n//ErrorCode:\nError.NETWORK_ERROR 网络不可用\nError.USER_ALREADY_EXIST  用户已存在\nError.USER_AUTHENTICATION_FAILED 无开放注册权限（后台管理界面设置[开放|授权]）\nError.USER_ILLEGAL_ARGUMENT 用户名非法\n\n```\n\n#### \u003cA NAME=\"Guide_login\"\u003e\u003c/A\u003e登录\n\n```\nChatClient.getInstance().login(\"username\", \"password\", new Callback(){});\n\n```\n\n#### \u003cA NAME=\"Guide_Chat\"\u003e\u003c/A\u003e打开会话页面\n\n```\nIntent intent = new IntentBuilder({Activity}.this)\n\t\t\t\t\t\t.setServiceIMNumber(\"客服关联的IM服务号\")\n\t\t\t\t\t\t.build();\n\t\t\t\tstartActivity(intent);\n```\n\n\n#### \u003cA NAME=\"Guide_Login_Status\"\u003e\u003c/A\u003e判断是否已经登录\n\n```\nif(ChatClient.getInstance().isLoggedInBefore()){\n    //已经登录，可以直接进入会话界面\n}else{\n    //未登录，需要登录后，再进入会话界面\n}\n\n```\n\n\n#### \u003cA NAME=\"Guide_logout\"\u003e\u003c/A\u003e登出\n\u003e登出后则无法收到客服发来的消息\n\n```\nChatClient.getInstance().logout(new Callback(){});\n```\n\n\n### \u003cA NAME=\"Advanced_Option\"\u003e\u003c/A\u003e高级选项\n\n#### 添加小米推送\n\n* [申请推送证书并添加后台](#MiPush_Console)\n* [AndroidManifest.xml配置](#MiPush_AndroidManifest)\n* [添加Mipush.jar到项目的libs文件夹中](#MiPush_jar)\n* [Application初始化中option配置](#MiPush_Option)\n\n#### \u003cA NAME=\"MiPush_Console\"\u003e\u003c/A\u003e申请推送证书并添加后台\n\n\u003e进入[小米推送后台](http://dev.xiaomi.com/mipush/xmpush/app/applist?userId=913566583),创建一个应用，完成后得到AppId、AppKey、AppSecret。\n\u003e登录[环信管理后台](http://console.easemob.com/),选择你的应用-\u003e选择推送证书-\u003eXiaomi-\u003e新增证书。\n\u003e证书名称为从小米推送后台得到的AppID,证书密钥为：AppSecret,以及填上你当前应用的包名,点击上传即可.\n\n####  \u003cA NAME=\"MiPush_AndroidManifest\"\u003e\u003c/A\u003eAndroidManifest.xml配置\n```\n\u003cmanifest\u003e\n     ...\n     \u003c!--例如: com.easemob.helpdeskdemo.permission.MIPUSH_RECEIVE --\u003e\n    \u003cpermission\n        android:name=\"你的包名.permission.MIPUSH_RECEIVE\"\n        android:protectionLevel=\"signature\" /\u003e\n    \u003cuses-permission android:name=\"你的包名.permission.MIPUSH_RECEIVE\" /\u003e\n\n\t\u003capplication\u003e\n\t...\n\t\u003cservice\n            android:name=\"com.xiaomi.mipush.sdk.PushMessageHandler\"\n            android:enabled=\"true\"\n            android:exported=\"true\" /\u003e\n        \u003cservice\n            android:name=\"com.xiaomi.mipush.sdk.MessageHandleService\"\n            android:enabled=\"true\" /\u003e\n\n        \u003creceiver\n            android:name=\"com.hyphenate.chat.EMMipushReceiver\"\n            android:exported=\"true\" \u003e\n            \u003cintent-filter\u003e\n                \u003caction android:name=\"com.xiaomi.mipush.RECEIVE_MESSAGE\" /\u003e\n            \u003c/intent-filter\u003e\n            \u003cintent-filter\u003e\n                \u003caction android:name=\"com.xiaomi.mipush.MESSAGE_ARRIVED\" /\u003e\n            \u003c/intent-filter\u003e\n            \u003cintent-filter\u003e\n                \u003caction android:name=\"com.xiaomi.mipush.ERROR\" /\u003e\n            \u003c/intent-filter\u003e\n        \u003c/receiver\u003e\n\t...\n\t\u003c/application\u003e\n\u003c/mainfest\u003e\n\n```\n\n#### \u003cA NAME=\"MiPush_Option\"\u003e\u003c/A\u003eApplication初始化中option配置\n```\nChatClient.Options options = new ChatClient.Options();\noptions.setAppkey(\"Your appkey\");//appkey获取地址：console.easemob.com\noptions.setTenantId(\"Your tenantId\");//tenantId获取地址：kefu.easemob.com\noptions.setMIPushConfig(\"mipushAppId\", \"mipushAppkey\");\n// Huanxin Kefu SDK 初始化\nif (!ChatClient.getInstance().init(this, options)){\n    return;\n}\n//后面可以设置其他属性\n\n```\n\n#### 添加网络监听,可以显示当前是否连接服务器\n\n```\nChatClient.getInstance().addConnectionListener(new ChatClient.ConnectionListener() {\n\t\t\t@Override\n\t\t\tpublic void onConnected() {\n                   //成功连接到服务器\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic void onDisconnected(int errorcode) {\n\n\t\t\t}\n\t\t});\n\n```\n#### 添加消息监听\n\n```\nChatClient.getInstance().getChat().addMessageListener(new ChatManager.MessageListener() {\n            @Override\n            public void onMessage(List\u003cMessage\u003e list) {\n                //收到普通消息\n            }\n\n            @Override\n            public void onCmdMessage(List\u003cMessage\u003e list) {\n                 //收到命令消息，命令消息不存数据库，一般用来作为系统通知，例如留言评论更新，\n                 //会话被客服接入，被转接，被关闭提醒\n            }\n\n            @Override\n            public void onMessageStatusUpdate() {\n            //消息的状态修改，一般可以用来刷新列表，显示最新的状态\n\n            }\n\n            @Override\n            public void onMessageSent() {\n            //发送消息后，会调用，可以在此刷新列表，显示最新的消息\n\n            }\n        });\n```\n\n#  其他更多属性请进入[官网文档](http://docs.easemob.com/cs/300visitoraccess/androidsdk)查询\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasemob%2Fkefu-android-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasemob%2Fkefu-android-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasemob%2Fkefu-android-demo/lists"}