- JDK7+
// -------------------- 以下三个库是必须依赖的 ----------------------------
compile 'com.meiqia:meiqiasdk:3.2.7@aar'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
// -------------------- 以上三个库是必须依赖的 ----------------------------
// 目前支持常见的 4 种图片加载库,必须在下面四个图片加载库中选择一个添加依赖
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
// compile 'com.github.bumptech.glide:glide:3.7.0'
// compile 'com.squareup.picasso:picasso:2.5.2'
// compile 'org.xutils:xutils:3.3.36'
MQConfig.init(this, "Your Appkey", new OnInitCallback() {
@Override
public void onSuccess(String clientId) {
Toast.makeText(MainActivity.this, "init success", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int code, String message) {
Toast.makeText(MainActivity.this, "int failure", Toast.LENGTH_SHORT).show();
}
});
如果您不知道 Appkey ,请使用美洽管理员帐号登录 美洽,在「设置」 -> 「SDK」 菜单中查看。如下图:
初始化成功后,就可以直接启动对话界面
使用当前 id 分配上线
Intent intent = new MQIntentBuilder(this).build();
startActivity(intent);
目前是两种模式: (1) 完全对话模式 无机器人时:如果当前客服不在线,直接聊天界面输入就是留言,客服上线后能够直接回复,如果客服在线,则进入正常客服对话模式。 有机器人时:如果当前客服不在线时,直接聊天界面输入的话,还是由机器人回答,顾客点击留言就会跳转到表单。 (2) 单一表单模式 不管客服是否在线都会进入表单,顾客提交后,不会有聊天的界面。这种主要用于一些 App 只需要用户反馈,不需要直接回复的形式。
startActivity(new Intent(this, MQMessageFormActivity.class));
如果你的 App 需要兼容 Android M,需要处理权限问题。 参考 Demo
绑定开发者用户 id 上线
Intent intent = new MQIntentBuilder(this)
.setCustomizedId("开发者的 id") // 相同的 id 会被识别为同一个顾客
.build();
startActivity(intent);
设置顾客信息
HashMap<String, String> clientInfo = new HashMap<>();
clientInfo.put("name", "富坚义博");
clientInfo.put("avatar", "https://s3.cn-north-1.amazonaws.com.cn/pics.meiqia.bucket/1dee88eabfbd7bd4");
clientInfo.put("gender", "男");
clientInfo.put("tel", "1300000000");
clientInfo.put("技能1", "休刊");
Intent intent = new MQIntentBuilder(this)
.setClientInfo(clientInfo)
.build();
startActivity(intent);
PS: 这个接口只会生效一次,如果需要更新顾客信息,需要调用更新接口
更新顾客信息
HashMap<String, String> updateInfo = new HashMap<>();
updateInfo.put("name", "update name");
MQManager.getInstance(this).updateClientInfo(updateInfo, callback);
指定客服分配
Intent intent = new MQIntentBuilder(this)
.setScheduledAgent(agentId) // agentId 可以从工作台查询
.build();
startActivity(intent);
指定客服分组分配
Intent intent = new MQIntentBuilder(this)
.setScheduledGroup(groupId) // groupId 可以从工作台查询
.build();
startActivity(intent);
设置预发送消息
Intent intent = new MQIntentBuilder(this)
.setPreSendTextMessage("我是预发送文字消息")
.setPreSendImageMessage(new File("预发送图片的路径"))
.build();
startActivity(intent);
设置监听 MQConversationActivity 生命周期的回调接口
MQConfig.setActivityLifecycleCallback(new MQSimpleActivityLifecycleCallback() {
});
自定义留言表单引导文案
配置了该引导文案后将不会读取工作台配置的引导文案。 最佳实践:劲量不要在 SDK 中配置引导文案,而是通过工作台配置引导文案,方便在节假日的时候统一配置各终端的引导文案,避免重新打包发布 App。
MQConfig.leaveMessageIntro = "自定义留言表单引导文案";
自定义留言表单输入项
如果不配置该选项则留言表单界面默认有「留言」「邮箱」「手机」这三个输入项
MQConfig.messageFormInputModels = new ArrayList<>();
MessageFormInputModel phoneMfim = new MessageFormInputModel();
phoneMfim.tip = "手机";
phoneMfim.key = "tel";
phoneMfim.required = true;
phoneMfim.hint = "请输入你的手机号";
phoneMfim.inputType = InputType.TYPE_CLASS_PHONE;
MessageFormInputModel emailMfim = new MessageFormInputModel();
emailMfim.tip = "邮箱";
emailMfim.key = "email";
emailMfim.required = true;
emailMfim.hint = "请输入你的邮箱";
emailMfim.inputType = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
MessageFormInputModel nameMfim = new MessageFormInputModel();
nameMfim.tip = "姓名";
nameMfim.key = "name";
nameMfim.hint = "请输入你的姓名";
nameMfim.inputType = InputType.TYPE_CLASS_TEXT;
MQConfig.messageFormInputModels.add(phoneMfim);
MQConfig.messageFormInputModels.add(emailMfim);
MQConfig.messageFormInputModels.add(nameMfim);
## ----------------------------------
## OkHttp相关
## ----------------------------------
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp3.** { *; }
-keep interface com.squareup.okhttp3.** { *; }
-dontwarn com.squareup.okhttp3.**
## ----------------------------------
## Okio相关
## ----------------------------------
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
## ----------------------------------
## UIL相关
## ----------------------------------
-keep class com.nostra13.universalimageloader.** { *; }
-keepclassmembers class com.nostra13.universalimageloader.** {*;}
-dontwarn com.nostra13.universalimageloader.**
## ----------------------------------
## Glide相关
## ----------------------------------
-keep class com.bumptech.glide.Glide { *; }
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-dontwarn com.bumptech.glide.**
## ----------------------------------
## Picasso相关
## ----------------------------------
-keep class com.squareup.picasso.Picasso { *; }
-dontwarn com.squareup.okhttp.**
-dontwarn com.squareup.picasso.**
## ----------------------------------
## xUtils3相关
## ----------------------------------
-keepattributes Signature,*Annotation*
-keep public class org.xutils.** {
public protected *;
}
-keep public interface org.xutils.** {
public protected *;
}
-keepclassmembers class * extends org.xutils.** {
public protected *;
}
-keepclassmembers @org.xutils.db.annotation.* class * {*;}
-keepclassmembers @org.xutils.http.annotation.* class * {*;}
-keepclassmembers class * {
@org.xutils.view.annotation.Event <methods>;
}
-dontwarn org.xutils.**