/
CustomerHelper.java
293 lines (259 loc) · 9.21 KB
/
CustomerHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
package com.easemob.easeui.customer.application;
import android.content.Context;
import android.content.Intent;
import com.easemob.EMCallBack;
import com.easemob.EMEventListener;
import com.easemob.EMNotifierEvent;
import com.easemob.chat.EMChat;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMMessage;
import com.easemob.easeui.EaseConstant;
import com.easemob.easeui.controller.EaseUI;
import com.easemob.easeui.customer.R;
import com.easemob.easeui.customer.activity.ChatActivity;
import com.easemob.easeui.customer.util.MLSPUtil;
import com.easemob.easeui.model.EaseNotifier;
import com.easemob.easeui.utils.EaseCommonUtils;
import com.easemob.exceptions.EaseMobException;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
/**
* Created by lzan13 on 2015/11/6 21:03.
* 单例类,用来初始化EaseUI 对EaseUI进行配置
*/
public class CustomerHelper {
private Context mContext;
// CustomerHelper 单例对象
private static CustomerHelper instance;
// EaseUI的实例
private EaseUI mEaseUI;
private CustomerHelper() {
}
/**
* 获取单例对象
*
* @return
*/
public static CustomerHelper getInstance() {
if (instance == null) {
instance = new CustomerHelper();
}
return instance;
}
/**
* 初始化方法,调用EaseUI的初始化,
*
* @param context
*/
public void init(Context context) {
mContext = context;
EMChat.getInstance().setAppkey((String) MLSPUtil.get(context, CustomerConstants.C_APPKEY, ""));
// 初始化EaseUI,EaseUI内部初始化了环信的SDK
EaseUI.getInstance().init(context);
// 获取EaseUI单例对象,为后边设置做准备
mEaseUI = EaseUI.getInstance();
// 初始化设置EaseUI定义的一些提供者
setEaseUIProviders();
// 全局监听消息方法
registerEventListener();
}
/**
* 设置EaseUI的提供者
*/
public void setEaseUIProviders() {
/**
* 设置通知消息提供者
*/
mEaseUI.getNotifier().setNotificationInfoProvider(new EaseNotifier.EaseNotificationInfoProvider() {
@Override
public String getDisplayedText(EMMessage message) {
// 设置状态栏的消息提示,可以根据message的类型做相应提示
String ticker = EaseCommonUtils.getMessageDigest(message, mContext);
if (message.getType() == EMMessage.Type.TXT) {
ticker = ticker.replaceAll("\\[.{2,3}\\]", "[表情]");
}
if (message.getFrom().equals(MLSPUtil.get(mContext, CustomerConstants.C_IM, ""))) {
return "客服: " + ticker;
} else {
return message.getFrom() + ": " + ticker;
}
}
/**
* 根据消息条数来判断如果显示
* @param message
* 接收到的消息
* @param fromUsersNum
* 发送人的数量
* @param messageNum
* 消息数量
* @return
*/
@Override
public String getLatestText(EMMessage message, int fromUsersNum, int messageNum) {
// 当只有一个人,发来一条消息时,显示消息内容 TODO 表情符显示为图片
if (fromUsersNum == 1 && messageNum == 1) {
return "客服:" + EaseCommonUtils.getMessageDigest(message, mContext).replace("\\[.{2,3}\\]", "[表情]");
} else {
return fromUsersNum + " 个联系人,发来 " + messageNum + " 条消息";
}
}
@Override
public String getTitle(EMMessage message) {
return null;
}
/**
* 设置通知栏小图标,规定要求大小为24dp
* @param message
* @return
*/
@Override
public int getSmallIcon(EMMessage message) {
return R.mipmap.ic_small;
}
/**
* 通知栏点击跳转设置,这里因为只有客服,所以没有其他判断,直接跳转到聊天界面,
* 把客服username传递过去即可
* @param message
* 显示在notification上最近的一条消息
* @return
*/
@Override
public Intent getLaunchIntent(EMMessage message) {
Intent intent = new Intent();
intent.setClass(mContext, ChatActivity.class);
intent.putExtra(EaseConstant.EXTRA_USER_ID, message.getFrom());
return intent;
}
});
}
/**
* 全局的消息监听事件,这里的监听会一直执行,所以要判断一下程序是否在前台运行阶段,
* 如果在前台就让前台界面的监听去处理消息(比如MainActivity、ChatActivity里的onEvent)
*/
private void registerEventListener() {
EMEventListener eventListener = new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent emNotifierEvent) {
switch (emNotifierEvent.getEvent()) {
case EventNewMessage:
// 判断如果在前台活动,全局的监听就不处理消息通知
if (!mEaseUI.hasForegroundActivies()) {
EMMessage message = (EMMessage) emNotifierEvent.getData();
getNotifier().onNewMsg(message);
}
break;
case EventOfflineMessage:
// 判断如果在前台活动,全局的监听就不处理消息通知
if (!mEaseUI.hasForegroundActivies()) {
List<EMMessage> messageList = (List<EMMessage>) emNotifierEvent.getData();
getNotifier().onNewMesg(messageList);
}
break;
}
}
};
EMChatManager.getInstance().registerEventListener(eventListener);
}
/**
* 获取EaseUI定义的通知对象,用来发送通知
*
* @return
*/
public EaseNotifier getNotifier() {
return mEaseUI.getNotifier();
}
/**
* 判断当前sdk是否登录成功过
*
* @return
*/
public boolean isLogined() {
return EMChat.getInstance().isLoggedIn();
}
/**
* 判断是否为满意度调查类型的消息
*
* @param message
* @return
*/
public boolean isCtrlTypeMessage(EMMessage message) {
JSONObject jsonObj = null;
try {
jsonObj = message.getJSONObjectAttribute(CustomerConstants.C_ATTR_KEY_WEICHAT);
if (jsonObj.has(CustomerConstants.C_ATTR_CTRLTYPE)) {
String type = jsonObj.getString(CustomerConstants.C_ATTR_CTRLTYPE);
if (type.equalsIgnoreCase(CustomerConstants.C_ATTR_INVITEENQUIRY)
|| type.equalsIgnoreCase(CustomerConstants.C_ATTR_ENQUIRY)) {
return true;
}
}
} catch (EaseMobException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 判断是否为用户轨迹类型的消息
*
* @param message
* @return
*/
public boolean isTrackMessage(EMMessage message) {
JSONObject jsonObj = null;
try {
jsonObj = message.getJSONObjectAttribute(CustomerConstants.C_ATTR_KEY_MSGTYPE);
if (jsonObj.has(CustomerConstants.C_ATTR_TRACK)) {
return true;
}
} catch (EaseMobException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 判断是否为订单消息
*
* @param message
* @return
*/
public boolean isOrderFormMessage(EMMessage message) {
JSONObject jsonObj = null;
try {
jsonObj = message.getJSONObjectAttribute(CustomerConstants.C_ATTR_KEY_MSGTYPE);
if (jsonObj.has(CustomerConstants.C_ATTR_ORDER)) {
return true;
}
} catch (EaseMobException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 退出登陆方法
*/
public void signOut(final EMCallBack callback) {
EMChatManager.getInstance().logout(new EMCallBack() {
@Override
public void onSuccess() {
mEaseUI = null;
callback.onSuccess();
}
@Override
public void onError(int i, String s) {
callback.onError(i, s);
}
@Override
public void onProgress(int i, String s) {
}
});
}
}