http://blog.it985.com/3184.html
这时候就要使用消息,消息是通过透传的方式传递内容,上代码:
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
294
295
296
297
298
299
300
301
302
|
package
com.baidu.push;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
java.util.List;
import
org.json.JSONException;
import
org.json.JSONObject;
import
android.content.Context;
import
android.content.Intent;
import
android.text.TextUtils;
import
android.util.Log;
import
com.baidu.frontia.api.FrontiaPushMessageReceiver;
import
com.lidroid.xutils.util.LogUtils;
import
com.robinframe.xutils.utils.StringUtils;
import
com.zmit.teddy.AppManager;
import
com.zmit.teddy.ContactsActivity;
import
com.zmit.teddy.DetaiDataActivity;
import
com.zmit.teddy.DetaiLlistActivty;
import
com.zmit.teddy.MainActivity;
import
com.zmit.teddy.PromotionActivity;
import
com.zmit.teddy.SplashScreensActivity;
/**
* Push消息处理receiver。请编写您需要的回调函数, 一般来说: onBind是必须的,用来处理startWork返回值;
* onMessage用来接收透传消息; onSetTags、onDelTags、onListTags是tag相关操作的回调;
* onNotificationClicked在通知被点击时回调; onUnbind是stopWork接口的返回值回调
*
* 返回值中的errorCode,解释如下:
* 0 - Success
* 10001 - Network Problem
* 30600 - Internal Server Error
* 30601 - Method Not Allowed
* 30602 - Request Params Not Valid
* 30603 - Authentication Failed
* 30604 - Quota Use Up Payment Required
* 30605 - Data Required Not Found
* 30606 - Request Time Expires Timeout
* 30607 - Channel Token Timeout
* 30608 - Bind Relation Not Found
* 30609 - Bind Number Too Many
*
* 当您遇到以上返回错误时,如果解释不了您的问题,请用同一请求的返回值requestId和errorCode联系我们追查问题。
*
*/
public
class
MyPushMessageReceiver
extends
FrontiaPushMessageReceiver {
/** TAG to Log */
public
static
final
String TAG = MyPushMessageReceiver.
class
.getSimpleName();
/**
* 调用PushManager.startWork后,sdk将对push
* server发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。 如果您需要用单播推送,需要把这里获取的channel
* id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。
*
* @param context
* BroadcastReceiver的执行Context
* @param errorCode
* 绑定接口返回值,0 - 成功
* @param appid
* 应用id。errorCode非0时为null
* @param userId
* 应用user id。errorCode非0时为null
* @param channelId
* 应用channel id。errorCode非0时为null
* @param requestId
* 向服务端发起的请求id。在追查问题时有用;
* @return none
*/
@Override
public
void
onBind(Context context,
int
errorCode, String appid,
String userId, String channelId, String requestId) {
String responseString =
"onBind errorCode="
+ errorCode +
" appid="
+ appid +
" userId="
+ userId +
" channelId="
+ channelId
+
" requestId="
+ requestId;
Log.d(TAG, responseString);
// 绑定成功,设置已绑定flag,可以有效的减少不必要的绑定请求
if
(errorCode ==
0
) {
Utils.setBind(context,
true
);
}
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, responseString);
}
/**
* 接收透传消息的函数。
*
* @param context
* 上下文
* @param message
* 推送的消息
* @param customContentString
* 自定义内容,为空或者json字符串
*/
@Override
public
void
onMessage(Context context, String message,
String customContentString) {
String messageString =
"透传消息 message=\""
+ message
+
"\" customContentString="
+ customContentString;
Log.d(TAG, messageString);
// 自定义内容获取方式,mykey和myvalue对应透传消息推送时自定义内容中设置的键和值
if
(!TextUtils.isEmpty(customContentString)) {
JSONObject customJson =
null
;
try
{
customJson =
new
JSONObject(customContentString);
String myvalue =
null
;
if
(customJson.isNull(
"mykey"
)) {
myvalue = customJson.getString(
"mykey"
);
}
}
catch
(JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, messageString);
}
/**
* 接收通知点击的函数。注:推送通知被用户点击前,应用无法通过接口获取通知的内容。
*
* @param context
* 上下文
* @param title
* 推送的通知的标题
* @param description
* 推送的通知的描述
* @param customContentString
* 自定义内容,为空或者json字符串
*/
@Override
public
void
onNotificationClicked(Context context, String title,
String description, String customContentString) {
String notifyString =
"通知点击 title=\""
+ title +
"\" description=\""
+ description +
"\" customContent="
+ customContentString;
Log.d(TAG, notifyString);
// 自定义内容获取方式,mykey和myvalue对应通知推送时自定义内容中设置的键和值
String myvalue =
null
;
if
(!TextUtils.isEmpty(customContentString)) {
JSONObject customJson =
null
;
try
{
customJson =
new
JSONObject(customContentString);
if
(!customJson.isNull(
"mykey"
)) {
myvalue = customJson.getString(
"mykey"
);
}
}
catch
(JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, myvalue);
}
/**
* setTags() 的回调函数。
*
* @param context
* 上下文
* @param errorCode
* 错误码。0表示某些tag已经设置成功;非0表示所有tag的设置均失败。
* @param successTags
* 设置成功的tag
* @param failTags
* 设置失败的tag
* @param requestId
* 分配给对云推送的请求的id
*/
@Override
public
void
onSetTags(Context context,
int
errorCode,
List
String responseString =
"onSetTags errorCode="
+ errorCode
+
" sucessTags="
+ sucessTags +
" failTags="
+ failTags
+
" requestId="
+ requestId;
Log.d(TAG, responseString);
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, responseString);
}
/**
* delTags() 的回调函数。
*
* @param context
* 上下文
* @param errorCode
* 错误码。0表示某些tag已经删除成功;非0表示所有tag均删除失败。
* @param successTags
* 成功删除的tag
* @param failTags
* 删除失败的tag
* @param requestId
* 分配给对云推送的请求的id
*/
@Override
public
void
onDelTags(Context context,
int
errorCode,
List
String responseString =
"onDelTags errorCode="
+ errorCode
+
" sucessTags="
+ sucessTags +
" failTags="
+ failTags
+
" requestId="
+ requestId;
Log.d(TAG, responseString);
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, responseString);
}
/**
* listTags() 的回调函数。
*
* @param context
* 上下文
* @param errorCode
* 错误码。0表示列举tag成功;非0表示失败。
* @param tags
* 当前应用设置的所有tag。
* @param requestId
* 分配给对云推送的请求的id
*/
@Override
public
void
onListTags(Context context,
int
errorCode, List
String requestId) {
String responseString =
"onListTags errorCode="
+ errorCode +
" tags="
+ tags;
Log.d(TAG, responseString);
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, responseString);
}
/**
* PushManager.stopWork() 的回调函数。
*
* @param context
* 上下文
* @param errorCode
* 错误码。0表示从云推送解绑定成功;非0表示失败。
* @param requestId
* 分配给对云推送的请求的id
*/
@Override
public
void
onUnbind(Context context,
int
errorCode, String requestId) {
String responseString =
"onUnbind errorCode="
+ errorCode
+
" requestId = "
+ requestId;
Log.d(TAG, responseString);
// 解绑定成功,设置未绑定flag,
if
(errorCode ==
0
) {
Utils.setBind(context,
false
);
}
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, responseString);
}
/**
* 自定义函数,处理业务逻辑
* @param context
* @param content
*/
private
void
updateContent(Context context, String content) {
System.out.println(
"推送返回值"
+
"updateContent"
+content);
String logText =
""
+ Utils.logStringCache;
// if (!logText.equals("")) {
// logText += "\n";
// }
//
// SimpleDateFormat sDateFormat = new SimpleDateFormat("HH-mm-ss");
// logText += sDateFormat.format(new Date()) + ": ";
// logText += content;
//
// Utils.logStringCache = logText;
// Intent intent = new Intent();
// intent.setClass(context.getApplicationContext(), ContactsActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.getApplicationContext().startActivity(intent);
if
(!StringUtils.isEmpty(content)&&!content.equals(
"promotion"
)) {
Intent intent=
new
Intent();
intent.putExtra(
"CompanyId"
, content);
// intent.putExtra("cityid", content);
intent.setClass(context.getApplicationContext(), DetaiDataActivity.
class
);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
context.getApplicationContext().startActivity(intent);
}
else
if
(content.equals(
"promotion"
)) {
Intent intent=
new
Intent();
intent.setClass(context.getApplicationContext(), PromotionActivity.
class
);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
context.getApplicationContext().startActivity(intent);
}
}
}
|
这次我们要关注的方法是onMessage()方法,这个方法就是我们接收消息之后的回调方法,在这个方法里面只要处理我们传过来的值容纳后实现
自己的业务逻辑就ok了
来看看这个方法的参数: onMessage(Context context, String message,String customContentString)
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
|
@Override
public
void
onMessage(Context context, String message,
String customContentString) {
String messageString =
"透传消息 message=\""
+ message
+
"\" customContentString="
+ customContentString;
Log.d(TAG, messageString);
// 自定义内容获取方式,mykey和myvalue对应透传消息推送时自定义内容中设置的键和值
if
(!TextUtils.isEmpty(customContentString)) {
JSONObject customJson =
null
;
try
{
customJson =
new
JSONObject(customContentString);
String myvalue =
null
;
if
(customJson.isNull(
"mykey"
)) {
myvalue = customJson.getString(
"mykey"
);
}
}
catch
(JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
updateContent(context, messageString);
}
|
要注意有一点就是如果做Activity跳转的话,最好使用单例模式,不然有时候会出异常。消息就是这么简单,下一篇继续三大类中的最后一类:富媒体。
本文永久地址:http://blog.it985.com/3184.html