环信支付宝php服务端集成成需要appkey吗

? 集成环信IM(单聊) - 简书
下载简书移动应用
写了8423字,被11人关注,获得了26个喜欢
? 集成环信IM(单聊)
简单总结一下,仅对日后再次集成更加快速便捷,多数是对文档的简单概括.
一.快速集成环信SDK
1 注册环信账号,创建新应用,获取应用的AppKey.2 参照官方文档,导入SDK:(1).下载官网SDK (:), 从官网上下载下来的包中分为如下五部分:o
环信 iOS HyphenateSDK 开发使用(不包含实时通话功能)o
环信 iOS HyphenateFullSDK 开发使用(包含实时通话功能)o
环信 iOS doc SDK 相关API文档o
环信 iOS ChatUIDemo3.0 工程源码o
环信 iOS EaseUI 工程源码o
iOS chatdemo-ui-3.x.x.ipa 打包的 ipa(2).将SDK文件夹(HyphenateSDK)拖入项目中, 并勾选上 Destination。(其中,SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。)添加以下库:
ios_import3.0sdk.jpg
3 增加预编译头文件pch,保证头文件的全局引用.( 【Build Settings】中搜索框输入prefix header 将【Precompile Prefix Header】设置为【YES】,将PCH文件地址填写进【Prefix Header】中
方法一:也可以通过将PCH文件直接拖入【Prefix Header】框中.方法二: "$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹").
特别注意(否则会报一堆错):导入&UIKit/UIKit.h&等OC框架时需要添加:
以上步骤经过command + b 编译没错,即代表导入环信SDK成功.
二.搭建界面实现单聊功能
初始化SDK:在AppDelegate.m加入如下代码:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//AppKey:注册的AppKey,详细见下面注释。
//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
EMOptions *options = [EMOptions
optionsWithAppkey:@"douser#istore"];
options.apnsCertName = @"istore_dev";
[[EMClient sharedClient] initializeSDKWithOptions:options];
return YES;
// APP进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
[[EMClient sharedClient] applicationDidEnterBackground:application];
// APP将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application
[[EMClient sharedClient] applicationWillEnterForeground:application];
简单的搭了一个界面:
12.45.03.png
按照文档加入以下代码:注册事件:
- (IBAction)hdRegister:(id)sender {
//其中@"hd222"是自己设置的用户名
EMError *error = [[EMClient sharedClient] registerWithUsername:@"hd222" password:@"111111"];
if (error==nil) {
NSLog(@"注册成功");
- (IBAction)login:(id)sender {
//其中@"hd222"是自己设置的用户名
EMError *error = [[EMClient sharedClient] loginWithUsername:@"hd222" password:@"111111"];
if (!error) {
NSLog(@"登录成功");
- (IBAction)goOut:(id)sender {
EMError *error = [[EMClient sharedClient] logout:YES];
if (!error) {
NSLog(@"退出成功");
- (IBAction)sendMessage:(id)sender {
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要发送的消息"];
NSString *from = [[EMClient sharedClient] currentUsername];
//生成Message, 其中@"hd111"是自己设置的消息的接收方
EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"hd111" body:body ext:nil];
message.chatType = EMChatTypeC// 设置为单聊消息
//message.chatType = EMChatTypeGroupC// 设置为群聊消息
//message.chatType = EMChatTypeChatR// 设置为聊天室消息
//发送Message
[[EMClient sharedClient].chatManager asyncSendMessage:message progress:nil completion:^(EMMessage *aMessage, EMError *aError) {}];
发送消息过程中,需要在viewDidLoad方法中添加EMChatManagerDelegate协议的代理.
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil];
一定不要忘了遵守协议:
13.06.17.png
调用接收消息的代理方法(直接复制粘贴即可):
#pragma mark -接收消息的代理方法
- (void)didReceiveMessages:(NSArray *)aMessages{
for (EMMessage *message in aMessages) {
EMMessageBody *msgBody = message.
switch (msgBody.type) {
case EMMessageBodyTypeText:
// 收到的文字消息
EMTextMessageBody *textBody = (EMTextMessageBody *)msgB
NSString *txt = textBody.
NSLog(@"收到的文字是 txt -- %@",txt);
case EMMessageBodyTypeImage:
// 得到一个图片消息body
EMImageMessageBody *body = ((EMImageMessageBody *)msgBody);
NSLog(@"大图remote路径 -- %@"
,body.remotePath);
NSLog(@"大图local路径 -- %@"
,body.localPath); // // 需要使用sdk提供的下载方法后才会存在
NSLog(@"大图的secret -- %@"
,body.secretKey);
NSLog(@"大图的W -- %f ,大图的H -- %f",body.size.width,body.size.height);
NSLog(@"大图的下载状态 -- %lu",body.downloadStatus);
// 缩略图sdk会自动下载
NSLog(@"小图remote路径 -- %@"
,body.thumbnailRemotePath);
NSLog(@"小图local路径 -- %@"
,body.thumbnailLocalPath);
NSLog(@"小图的secret -- %@"
,body.thumbnailSecretKey);
NSLog(@"小图的W -- %f ,大图的H -- %f",body.thumbnailSize.width,body.thumbnailSize.height);
NSLog(@"小图的下载状态 -- %lu",body.thumbnailDownloadStatus);
case EMMessageBodyTypeLocation:
EMLocationMessageBody *body = (EMLocationMessageBody *)msgB
NSLog(@"纬度-- %f",body.latitude);
NSLog(@"经度-- %f",body.longitude);
NSLog(@"地址-- %@",body.address);
case EMMessageBodyTypeVoice:
// 音频sdk会自动下载
EMVoiceMessageBody *body = (EMVoiceMessageBody *)msgB
NSLog(@"音频remote路径 -- %@"
,body.remotePath);
NSLog(@"音频local路径 -- %@"
,body.localPath); // 需要使用sdk提供的下载方法后才会存在(音频会自动调用)
NSLog(@"音频的secret -- %@"
,body.secretKey);
NSLog(@"音频文件大小 -- %lld"
,body.fileLength);
NSLog(@"音频文件的下载状态 -- %lu"
,body.downloadStatus);
NSLog(@"音频的时间长度 -- %lu"
,body.duration);
case EMMessageBodyTypeVideo:
EMVideoMessageBody *body = (EMVideoMessageBody *)msgB
NSLog(@"视频remote路径 -- %@"
,body.remotePath);
NSLog(@"视频local路径 -- %@"
,body.localPath); // 需要使用sdk提供的下载方法后才会存在
NSLog(@"视频的secret -- %@"
,body.secretKey);
NSLog(@"视频文件大小 -- %lld"
,body.fileLength);
NSLog(@"视频文件的下载状态 -- %lu"
,body.downloadStatus);
NSLog(@"视频的时间长度 -- %lu"
,body.duration);
NSLog(@"视频的W -- %f ,视频的H -- %f", body.thumbnailSize.width, body.thumbnailSize.height);
// 缩略图sdk会自动下载
NSLog(@"缩略图的remote路径 -- %@"
,body.thumbnailRemotePath);
NSLog(@"缩略图的local路径 -- %@"
,body.thumbnailLocalPath);
NSLog(@"缩略图的secret -- %@"
,body.thumbnailSecretKey);
NSLog(@"缩略图的下载状态 -- %lu"
,body.thumbnailDownloadStatus);
case EMMessageBodyTypeFile:
EMFileMessageBody *body = (EMFileMessageBody *)msgB
NSLog(@"文件remote路径 -- %@"
,body.remotePath);
NSLog(@"文件local路径 -- %@"
,body.localPath); // 需要使用sdk提供的下载方法后才会存在
NSLog(@"文件的secret -- %@"
,body.secretKey);
NSLog(@"文件文件大小 -- %lld"
,body.fileLength);
NSLog(@"文件文件的下载状态 -- %lu"
,body.downloadStatus);
可以利用真机和模拟器之间发送消息测试,以上是简单的发送消息
打开单聊界面按钮集成了基于EaseUI的单聊界面(建议当对界面要求不高的时候直接使用环信UI):
集成方式:直接将EaseUI拖入已经集成SDK的项目中,然后进行初始化:第 1 步:引入相关头文件 #import “EaseUI.h”。第 2 步:在工程的 AppDelegate 中的以下方法中,调用 EaseUI 对应方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[[EaseSDKHelper shareHelper] easemobApplication:application
didFinishLaunchingWithOptions:launchOptions
appkey:@"douser#istore"
apnsCertName:@"istore_dev"
otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];
return YES;
直接创建聊天会话://打开单聊界面
- (IBAction)openChat:(id)sender {
//hd111是注册在真机上的账号
用于真机和模拟器实现聊天
EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"hd111" conversationType:EMConversationTypeChat];
chatController.title = @"环信单聊";
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:chatController];
[self.navigationController pushViewController:chatController animated:YES];
13.09.56.png
点击单聊界面按钮利用真机和模拟器即测试实现单聊功能.
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常囧事等等,欢迎投稿《程序员》专题。
专题主编:小...
· 153335人关注
分享 iOS 开发的知识,解决大家遇到的问题,讨论iOS开发的前沿,欢迎大家投稿~
· 24827人关注
坚持写字即可收录!
【投稿注意事项:切勿多次投稿,少于500字的勿投!谢谢大家的配合!】
· 163人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:Android SDK导入&
集成前准备&
注册环信开发者账号&
在环信上点击注册,跳转到环信管理后台注册页面,如下图:&
在注册页面中填写详细资料,如下图:企业ID,只限于数字,字母,横线,且不能以横线开头和结尾。企业ID会存在于生成的APPKEY中,如:测试demo中 APPKEY为easemob-demo#chatdemo,则easemob-demo为填写的企业ID)注:如果是个人应用开发的话,企业ID直接写成自己定义的ID就可以&
点击注册,注册成功后,我们会向您填写的邮箱中发送验证信息,请前往邮箱进行账号激活。&
账号激活成功后,回到控制台登录页面登录到开发者后台,在我的应用中,点击创建应用按钮,如下图:&
填写创建应用的名称(内容只限于数字,大小写字母),如下图:(应用名称会存在于你生成的APPKEY中,如:测试demo中 APPKEY为easemob-demo#chatdemo,则chatdemo为填写的应用名称。注册授权根据需要自行选择)&
填写好应用名称后,点确定,创建成功,系统会为你生成APPKEY以及相关配置信息,如下图&
将此appkey配置到android,ios,webim上即可&
& & & 名词
& & & 解释
& & & org_name
& & & 企业的唯一标识,开发者在环信开发者管理后台注册账号时填写的企业ID
& & & app_name
& & & 同一”企业”下”app”唯一标识,开发者在环信开发者管理后台创建应用时填写的”应用名称”
& & & org_admin
& & & 开发者在环信开发者管理后台注册时填写的”用户名”.企业管理员拥有对该企业账号下所有资源的操作权限
& & & appkey
& & & 一个app的唯一标识,规则是 ${org_name}#${app_name}
快速上手常用解决方案&
到下载环信SDK.&
注:考虑到开发者需求不一样,在下载的SDK中,提供了两个不同的jar包:
到此您已经下载好了SDK,下面开始学习SDK的集成使用吧!&
SDK目录讲解&
从官网上下载下来的包,解压后内容如下:&
在这里主要介绍后面四个文件夹内容:
doc文件夹:SDK相关API文档&
examples文件夹:ChatDemoUI(为开发者能够更深入理解SDK而提供的一个demo)&
libs文件夹:拥有实时语音,实时视频功能的SDK(大小在1.34M左右)包和.so文件&
libs.without.audio文件夹:无实时语音,实时视频功能的SDK包(大小在900多K)
在自行开发的应用中,集成环信聊天需要把libs文件夹下的easemobchat_2.1.6.jar和armeabi目录导入到你的项目的libs文件夹底下,如果不需要语音和视频通话功能,导入libs.without.audio下的jar文件即可。jar名字的后面的2.1.6可能会跟你下载的不一致,这是版本号,以实际为准。如果集成过2.1.6之前sdk的开发者,建议更新新版本,新版本有很多的优化,具体请看更新日志。&
注:SDK版本是向下兼容的&
以上为2.1.5之前的jar包和.so文件&
以上为2.1.5之后的jar包和.so文件(里面包含了语音和视频通话功能)
在清单文件AndroidManifest.xml里加入以下权限,以及写上你注册的appkey 权限配置:&
&?xml version=&1.0& encoding=&utf-8&?&
&manifest xmlns:android=&/apk/res/android&
package=&Your Package&
android:versionCode=&100&
android:versionName=&1.0.0&&
&!-- 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& /&
应用包名及appkey替换:
&application
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:name=&Your Application&&
&!-- 设置环信应用的appkey --&
&meta-data android:name=&EASEMOB_APPKEY&
android:value=&Your AppKey& /&
&!-- 声明sdk所需的service SDK核心功能--&
&service android:name=&com.easemob.chat.EMChatService& /&
&/application&
&/manifest&
关于EASEMOB_APPKEY对应的value获取,在创建应用后,申请APPKEY并进行相关配置。(环信demo中 APPKEY为easemob-demo#chatdemoui)&
Android SDK基础功能&
SDK中相关异步/同步处理方法介绍&
同步方法:在调用SDK里面的方法时,如果方法对应的参数里面有callback回调,直接调用&
异步方法:调用SDK的方法里面没有对应callback参数,则需要开发者来异步操作&
具体是否异步还是同步,也可以参考相关文档介绍的方法,每一个方法后边都有注释信息提示开发者,未注释的则认为同步执行&
注:对于没有回调的异步方法执行过程,是通过try catch来判断异步方法执行成功或者失败&
初始化SDK&
要求在application的oncreate方法中做初始化&
EMChat.getInstance().init(applicationContext);
* debugMode == true 时为打开,sdk 会在log里输入调试信息
* @param debugMode
* 在做代码混淆的时候需要设置成false
EMChat.getInstance().setDebugMode(true);//在做打包混淆时,要关闭debug模式,如果未被关闭,则会出现程序无法运行问题
注:如果你的app中有第三方的服务启动,请在初始化SDK (EMChat.getInstance().init(applicationContext))方法的前面添加以下相关代码(相应代码也可参考demo的application)&
appContext =
int pid = android.os.Process.myPid();
String processAppName = getAppName(pid);
// 如果app启用了远程的service,此application:onCreate会被调用2次
// 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
// 默认的app会在以包名为默认的process name下运行,如果查到的process name不是app的process name就立即返回
if (processAppName == null ||!processAppName.equalsIgnoreCase(&com.easemob.chatuidemo&)) {
Log.e(TAG, &enter the service process!&);
//&com.easemob.chatuidemo&为demo的包名,换到自己项目中要改成自己包名
// 则此application::onCreate 是被service 调用的,直接返回
如何获取processAppName请参考以下方法&
private String getAppName(int pID) {
String processName =
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List l = am.getRunningAppProcesses();
Iterator i = l.iterator();
PackageManager pm = this.getPackageManager();
while (i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
if (info.pid == pID) {
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
// Log.d(&Process&, &Id: &+ info.pid +& ProcessName: &+
// info.processName +&
Label: &+c.toString());
// processName = c.toString();
processName = info.processN
return processN
} catch (Exception e) {
// Log.d(&Process&, &Error&& :&+ e.toString());
return processN
注册模式分两种,开放注册和授权注册。只有开放注册时,才可以客户端注册。开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号, 授权注册的流程应该是您服务器通过环信提供的rest api注册,之后保存到您的服务器或返回给客户端。注册用户名会自动转为小写字母,所以建议用户名均以小写注册(强烈建议开发者通过后台调用rest接口去注册环信id,客户端注册方法不提倡使用)&
new Thread(new Runnable() {
public void run() {
// 调用sdk注册方法
EMChatManager.getInstance().createAccountOnServer(username, pwd);
} catch (final EaseMobException e) {
//注册失败
int errorCode=e.getErrorCode();
if(errorCode==EMError.NONETWORK_ERROR){
Toast.makeText(getApplicationContext(), &网络异常,请检查网络!&, Toast.LENGTH_SHORT).show();
}else if(errorCode==EMError.USER_ALREADY_EXISTS){
Toast.makeText(getApplicationContext(), &用户已存在!&, Toast.LENGTH_SHORT).show();
}else if(errorCode==EMError.UNAUTHORIZED){
Toast.makeText(getApplicationContext(), &注册失败,无权限!&, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), &注册失败: & + e.getMessage(), Toast.LENGTH_SHORT).show();
登陆聊天服务器需要注意: 登陆成功后需要调用&
EMGroupManager.getInstance().loadAllGroups();
从本地数据库加载群组到内存的操作,如果你的应用中有群组,请加上这句话(要求在每次进入应用的时候调用)&
EMChatManager.getInstance().loadAllConversations();
从本地数据库加载聊天记录到内存的操作(强烈建议在每次进入应用的时候调用) 以上两个方法是为了保证进入主页面后本地会话和群组都load完毕。另外如果登陆过,app长期在后台再进的时候也可能会导致加载到内存的群组和会话为空,可以在主页面的oncreate里也加上这两句代码,当然,更好的办法应该是放在程序的开屏页,可参考demo的SplashActivity。&
EMChatManager.getInstance().login(userName,password,new EMCallBack() {//回调
public void onSuccess() {
runOnUiThread(new Runnable() {
public void run() {
EMGroupManager.getInstance().loadAllGroups();
EMChatManager.getInstance().loadAllConversations();
Log.d(&main&, &登陆聊天服务器成功!&);
public void onProgress(int progress, String status) {
public void onError(int code, String message) {
Log.d(&main&, &登陆聊天服务器失败!&);
即首次登录成功后,不需要再次调用登录方法,在下次app启动时,SDK会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息(以上情况是在未调用登出的情况下实现的)。 配置是否进行自动登录。SDK中自动登录属性默认是true打开的,如果不需要自动登录,在初始化SDK之前,调用&
EMChat.getInstance().setAutoLogin(false);
设置为false关闭&
自动登录在以下几种情况下会被取消&
用户调用了SDK的登出动作;&
用户在别的设备上更改了密码, 导致此设备上自动登陆失败;&
用户的账号被从服务器端删除;&
用户从另一个设备登录,把当前设备上登陆的用户踢出.&
EMChat.getInstance().setAutoLogin(false);
当掉线时,Android SDK会自动重连,无需进行任何操作。&
//注册一个监听连接状态的listener
EMChatManager.getInstance().addConnectionListener(new MyConnectionListener());
//实现ConnectionListener接口
private class MyConnectionListener implements EMConnectionListener {
public void onConnected() {
//已连接到服务器
public void onDisconnected(final int error) {
runOnUiThread(new Runnable() {
public void run() {
if(error == EMError.USER_REMOVED){
// 显示帐号已经被移除
}else if (error == EMError.CONNECTION_CONFLICT) {
// 显示帐号在其他设备登陆
if (NetUtils.hasNetwork(MainActivity.this))
//连接不到聊天服务器
//当前网络不可用,请检查网络设置
退出聊天登陆&
EMChatManager.getInstance().logout();//此方法为同步方法
//此方法为异步方法 EMChatManager.getInstance().logout(new EMCallBack() {
@Override public void onSuccess() { // TODO Auto-generated method stub
@Override public void onProgress(int progress, String status) { // TODO Auto-generated method stub
@Override public void onError(int code, String message) { // TODO Auto-generated method stub
IM 开发关键功能点&
app打包混淆
在proguard文件中加入以下keep&
-keep class com.easemob.** {*;}
-keep class org.jivesoftware.** {*;}
-keep class org.apache.** {*;}
com.easemob.**
#2.0.9后的不需要加下面这个keep
#-keep class org.xbill.DNS.** {*;}
#另外,demo中发送表情的时候使用到反射,需要keep SmileUtils
-keep class com.easemob.chatuidemo.utils.SmileUtils {*;}
#注意前面的包名,如果把这个类复制到自己的项目底下,比如放在com.example.utils底下,应该这么写(实际要去掉#)
#-keep class com.example.utils.SmileUtils {*;}
#如果使用easeui库,需要这么写
-keep class com.easemob.easeui.utils.EaseSmileUtils {*;}
#2.0.9后加入语音通话功能,如需使用此功能的api,加入以下keep
-dontwarn ch.imvs.**
-dontwarn org.slf4j.**
-keep class org.ice4j.** {*;}
-keep class net.java.sip.** {*;}
-keep class org.webrtc.voiceengine.** {*;}
-keep class org.bitlet.** {*;}
-keep class org.slf4j.** {*;}
-keep class ch.imvs.** {*;}
完整工程源代码可供参考:&
2)环信官方企信源码,见附件&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13562次
积分:1094
积分:1094
排名:千里之外
原创:71篇
转载:110篇
(51)(62)(23)(2)(3)(2)(8)(10)(6)(2)(13)集成笔记:环信移动客服如何实现全媒体接入 日11:49|&&&&作为一名常年混迹imGeek开发者社区的程序猿,本着响应社区号召的“我为人人,人人为我”口号,赠人玫瑰,手留余香。本篇集成笔记主要参考环信官网移动客服集成文档(地址:)。写这篇笔记主要是为了让大家更直观的了解和解决大家的常见问题,比如:“环信移动客服是什么?我能不能使用环信移动客服?怎么集成环信移动客服?”以及在集成过程中碰到的常见问题,欢迎大家一起交流研究。
&&&&环信移动客服是全球首创的全媒体智能云客服平台。支持全媒体接入,包括网页在线客服、社交媒体客服(微博、微信)和移动端客服等多种渠道。基于环信业界领先的IM长连接技术保证消息必达,并通过独创的智能机器人技术极大降低人工客服工作量。
&&&&环信移动客服不仅支持PC端客服后台,同时支持移动端客服后台操作,真正帮助商家做到随时随地7*24小时服务客户。
&&&&全媒体接入集成文档如下:
&&&&集成环信移动客服前需注册环信客服账号,并登录。(环信客服注册地址:/mo/register)
&&&&一,网页在线客服集成:
&&&&网页插件集成移动客服是比较简单,原理是在自己网站的标签之前加入一段由环信提供的js,即可完成环信在线客服的植入,实现访客在网页端与在线客服的沟通。
&&&&这段js获取步骤如下:管理员模式下==》渠道设置==》网页插件
&&&&下面来讲下网页插件的功能介绍和自定义开发(V4.1版本):功能介绍可参考imgeek社区新产品发布:/article/
&&&&一些常见的自定义开发:
&&&&Q:网页插件怎么集成自定义按钮?A:首先,将插件JS串中的hide=false修改为hide=true;其次,在你网页的目标元素上添加如下超链接,例如:你的目标元素,即可完成自定义客服按钮。
&&&&Q:网页插件怎么区分技能组?A:JS串参考:/webim/im.html?tenantId=xxxx&emgroup=技能组名称(注意:技能组名称外面没有单引号)
&&&&二,移动端客服集成:
&&&&移动端客服(手机App)集成可分为以下两步:
&&&&1:先在客服后台创建一个关联:管理员模式下==》渠道设置==》手机APP右上角添加环信关联。关联名称由自己定义,AppKey,ClientId,ClientSecret可以再环信开发者后台拿到(注册环信开发者账号/index_register.html注册完成创建应用--查看应用概况即可得到)。
&&&&这里详细介绍下im服务号,im服务号为自己应用下的一个im账号(不用为每个用户创建,根据自己业务逻辑指定一个或者多个)。
&&&&2:客户端写个联系客服按钮,点击联系客服,调用发消息方法,接收对象为客服后台创建的关联的im服务号,消息就会到客服后台,根据分配策略分配给对应的客服(V4.1版本客服坐席分配策略为:max(客服坐席可接待人数-客服坐席已接待人数),也就是说,新来会话会分配给理论最闲的那个客服坐席)。
&&&&一些常见的自定义开发:
&&&&指定客服、技能组、满意度调查、显示用户信息可参考(原理为联系客服时通过传入扩展属性“键值对”,由客服后台解析辨别。“键”是环信实现约定好的,“值”是自定义。)文档地址:/doku.php?id=start:475mobilecs:30msgextension
&&&&这里列举几个常见的用户信息实现遇到的问题:
&&&&Q:已经按照文档传入用户信息,为什么客服后台还是没有看到用户信息?A:客服关闭会话,再次联系客服就行,已经建立的会话目前没有刷新访客昵称。
&&&&Q:之前传入用户信息在客服后台显示了,后来传入新的用户信息为什么客服后台没有更新?A:已经在客服后台显示的用户信息不会随着扩展属性的更新而更新,目前的设计是访客第一次进入时展示信息给客服辨别,后续由客服手动备注。
&&&&PS:如果自己APP是基于H5开发的,或者不想集成环信im怎么使用环信的移动客服,可以参考之前的网页插件集成,将那段js中的tenantID填入以下网址中xxxx的位置:/webim/im.html?tenantId=xxxx在自己APP中点击联系客服跳转到这个H5会话窗口即可。
&&&&三,微信公众号集成:
&&&&微信公众号集成需要注意的是个人的订阅号、测试公众号等,微信均没有开通客服接口的权限,所以粉丝收不到客服消息。
&&&&微信公众号集成分以下几类:
&&&&1:直接授权(通过在客服后台管理员模式==》渠道设置==》微信公众号添加微信公众号即可)。需要注意的是授权以后自己之前对微信公众号所做的开发都不能使用,微信用户通过微信的输入框直接联系客服后台坐席。
&&&&2:通过自定义菜单栏点击联系客服
&&&&可以在微信公众号自定义菜单栏,点击跳转到环信指定的网址(这个地址可参考之前的网页插件集成,将那段js中的tenantID填入以下网址中xxxx的位置:/webim/im.html?tenantId=xxxx)
&&&&3:回调集成(需要开发者,涉及到服务端程序的集成)
&&&&实现原理为环信发消息给微信,是通过环信的实时消息旁路接口。微信发消息给环信,是通过环信提供的RESTAPI发消息接口。
&&&&按照以下步骤:
&&&&1/在微信公众号开发者设置第三方接收微信公众号的消息进行业务逻辑处理。
&&&&2/调用环信rest接口将消息发给客服后台绑定的IM服务号(文档地址/doku.php?id=start:100serverintegration:50messages)。
&&&&3/客服的回复消息是到环信,通过回调接口把这消息转发到用户指定的服务器(需要符合环信格式,配置消息回调可联系环信在线技术支持)。
&&&&4/服务器拿到消息之后再推给微信粉丝就行。
&&&&PS:需要注意的是消息格式的变化(V4.1视频和位置暂不支持,会在后续版本提供支持)
&&&&四,微博集成:
&&&&微博集成目前支持私信、@,评论暂不支持(V4.1版本)。
&&&&集成方式:管理员模式下==》渠道设置==》微博公众号。
&&&&以上均为本人在集成环信移动客服时所做的笔记以及碰到的问题,同时,环信移动客服也在不断快速迭代更新,如有遗漏或者错误,请直接联系本人:。责任编辑:王慧霞
【征稿电话:010-
? ? ? ? ? ? ?
标王热词推荐
? ? ? ? ? ? ? ?

我要回帖

更多关于 环信服务端集成 java 的文章

 

随机推荐