Skip to content

Commit 07ca4d8

Browse files
committed
Merge pull request #26 from Liuchy1/master
add ios apns alert json
2 parents 7d25169 + 181c263 commit 07ca4d8

File tree

16 files changed

+403
-91
lines changed

16 files changed

+403
-91
lines changed

example/main/java/cn/jpush/api/examples/DevcieExample.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cn.jpush.api.examples;
22

3+
import cn.jpush.api.device.OnlineStatus;
34
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
56

@@ -8,11 +9,13 @@
89
import cn.jpush.api.common.resp.APIRequestException;
910
import cn.jpush.api.device.TagAliasResult;
1011

12+
import java.util.Map;
13+
1114
public class DevcieExample {
1215
protected static final Logger LOG = LoggerFactory.getLogger(DevcieExample.class);
1316

1417
private static final String appKey = "dd1066407b044738b6479275";
15-
private static final String masterSecret = "2b38ce69b1de2a7fa95706ea";
18+
private static final String masterSecret = "6b135be0037a5c1e693c3dfa";
1619
private static final String TAG1 = "tag1";
1720
private static final String ALIAS1 = "alias1";
1821
private static final String ALIAS2 = "alias2";
@@ -22,7 +25,8 @@ public class DevcieExample {
2225
private static JPushClient jpushClient = new JPushClient(masterSecret, appKey);
2326

2427
public static void main(String[] args) {
25-
testGetDeviceTagAlias();
28+
// testGetDeviceTagAlias();
29+
testGetUserOnlineStatus();
2630
}
2731

2832
public static void testGetDeviceTagAlias() {
@@ -42,6 +46,22 @@ public static void testGetDeviceTagAlias() {
4246
LOG.info("Error Message: " + e.getErrorMessage());
4347
}
4448
}
49+
50+
public static void testGetUserOnlineStatus() {
51+
try {
52+
Map<String, OnlineStatus> result = jpushClient.getUserOnlineStatus(REGISTRATION_ID1, REGISTRATION_ID2);
53+
54+
LOG.info(result.get(REGISTRATION_ID1).toString());
55+
LOG.info(result.get(REGISTRATION_ID2).toString());
56+
} catch (APIConnectionException e) {
57+
LOG.error("Connection error. Should retry later. ", e);
58+
} catch (APIRequestException e) {
59+
LOG.error("Error response from JPush server. Should review and fix it. ", e);
60+
LOG.info("HTTP Status: " + e.getStatus());
61+
LOG.info("Error Code: " + e.getErrorCode());
62+
LOG.info("Error Message: " + e.getErrorMessage());
63+
}
64+
}
4565

4666
}
4767

example/main/java/cn/jpush/api/examples/PushExample.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.jpush.api.examples;
22

33
import cn.jpush.api.common.ClientConfig;
4+
import cn.jpush.api.push.model.notification.IosAlert;
45
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
67

@@ -18,6 +19,8 @@
1819
import cn.jpush.api.push.model.notification.IosNotification;
1920
import cn.jpush.api.push.model.notification.Notification;
2021

22+
import java.util.HashMap;
23+
2124
public class PushExample {
2225
protected static final Logger LOG = LoggerFactory.getLogger(PushExample.class);
2326

@@ -32,7 +35,8 @@ public class PushExample {
3235
public static final String TAG = "tag_api";
3336

3437
public static void main(String[] args) {
35-
testSendPushWithCustomConfig();
38+
// testSendPushWithCustomConfig();
39+
testSendIosAlert();
3640
}
3741

3842

@@ -154,5 +158,25 @@ public static void testSendPushWithCustomConfig() {
154158
}
155159
}
156160

161+
public static void testSendIosAlert() {
162+
JPushClient jpushClient = new JPushClient(masterSecret, appKey);
163+
164+
IosAlert alert = IosAlert.newBuilder()
165+
.setTitleAndBody("test alert", "test ios alert json")
166+
.setActionLocKey("PLAY")
167+
.build();
168+
try {
169+
PushResult result = jpushClient.sendIosNotificationWithAlias(alert, new HashMap<String, String>(), "alias1");
170+
LOG.info("Got result - " + result);
171+
} catch (APIConnectionException e) {
172+
LOG.error("Connection error. Should retry later. ", e);
173+
} catch (APIRequestException e) {
174+
LOG.error("Error response from JPush server. Should review and fix it. ", e);
175+
LOG.info("HTTP Status: " + e.getStatus());
176+
LOG.info("Error Code: " + e.getErrorCode());
177+
LOG.info("Error Message: " + e.getErrorMessage());
178+
}
179+
}
180+
157181
}
158182

pom.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@
143143
<artifactId>maven-surefire-plugin</artifactId>
144144
<version>2.17</version>
145145
<configuration>
146-
<encoding>UTF-8</encoding>
147146
<groups>cn.jpush.api.FastTests</groups>
148147
<argLine>-Dfile.encoding=UTF-8</argLine>
149148
<excludes>
@@ -200,7 +199,7 @@
200199
<plugin>
201200
<groupId>org.apache.maven.plugins</groupId>
202201
<artifactId>maven-project-info-reports-plugin</artifactId>
203-
<version>2.7</version>
202+
<version>2.8</version>
204203
<reportSets>
205204
<reportSet>
206205
<reports>
@@ -214,7 +213,7 @@
214213
<plugin>
215214
<groupId>org.apache.maven.plugins</groupId>
216215
<artifactId>maven-javadoc-plugin</artifactId>
217-
<version>2.9.1</version>
216+
<version>2.10.3</version>
218217
<configuration>
219218
<overview>resources/javadoc-overview.html</overview>
220219
</configuration>

src/main/java/cn/jpush/api/JPushClient.java

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package cn.jpush.api;
22

3-
import java.util.Map;
4-
import java.util.Set;
5-
63
import cn.jpush.api.common.ClientConfig;
74
import cn.jpush.api.common.TimeUnit;
85
import cn.jpush.api.common.Week;
@@ -11,16 +8,14 @@
118
import cn.jpush.api.common.resp.APIRequestException;
129
import cn.jpush.api.common.resp.BooleanResult;
1310
import cn.jpush.api.common.resp.DefaultResult;
14-
import cn.jpush.api.device.AliasDeviceListResult;
15-
import cn.jpush.api.device.DeviceClient;
16-
import cn.jpush.api.device.TagAliasResult;
17-
import cn.jpush.api.device.TagListResult;
11+
import cn.jpush.api.device.*;
1812
import cn.jpush.api.push.PushClient;
1913
import cn.jpush.api.push.PushResult;
2014
import cn.jpush.api.push.model.Message;
2115
import cn.jpush.api.push.model.Platform;
2216
import cn.jpush.api.push.model.PushPayload;
2317
import cn.jpush.api.push.model.audience.Audience;
18+
import cn.jpush.api.push.model.notification.IosAlert;
2419
import cn.jpush.api.push.model.notification.Notification;
2520
import cn.jpush.api.report.MessagesResult;
2621
import cn.jpush.api.report.ReceivedsResult;
@@ -33,6 +28,9 @@
3328
import cn.jpush.api.schedule.model.TriggerPayload;
3429
import cn.jpush.api.utils.Preconditions;
3530

31+
import java.util.Map;
32+
import java.util.Set;
33+
3634
/**
3735
* The global entrance of JPush API library.
3836
*/
@@ -249,6 +247,28 @@ public PushResult sendIosNotificationWithAlias(String alert,
249247
.build();
250248
return _pushClient.sendPush(payload);
251249
}
250+
251+
/**
252+
* Send an iOS notification with alias.
253+
* If you want to send alert as a Json object, maybe this method is what you needed.
254+
*
255+
* @param alert The wrapper of APNs alert.
256+
* @param extras The extra params.
257+
* @param alias The alias list.
258+
* @return
259+
* @throws APIConnectionException
260+
* @throws APIRequestException
261+
*/
262+
public PushResult sendIosNotificationWithAlias(IosAlert alert,
263+
Map<String, String> extras, String... alias)
264+
throws APIConnectionException, APIRequestException {
265+
PushPayload payload = PushPayload.newBuilder()
266+
.setPlatform(Platform.ios())
267+
.setAudience(Audience.alias(alias))
268+
.setNotification(Notification.ios(alert, extras))
269+
.build();
270+
return _pushClient.sendPush(payload);
271+
}
252272

253273
/**
254274
* Shortcut
@@ -264,6 +284,28 @@ public PushResult sendIosNotificationWithRegistrationID(String alert,
264284
return _pushClient.sendPush(payload);
265285
}
266286

287+
/**
288+
* Send an iOS notification with registrationIds.
289+
* If you want to send alert as a Json object, maybe this method is what you needed.
290+
*
291+
* @param alert The wrapper of APNs alert.
292+
* @param extras The extra params.
293+
* @param registrationID The registration ids.
294+
* @return
295+
* @throws APIConnectionException
296+
* @throws APIRequestException
297+
*/
298+
public PushResult sendIosNotificationWithRegistrationID(IosAlert alert,
299+
Map<String, String> extras, String... registrationID)
300+
throws APIConnectionException, APIRequestException {
301+
PushPayload payload = PushPayload.newBuilder()
302+
.setPlatform(Platform.ios())
303+
.setAudience(Audience.registrationId(registrationID))
304+
.setNotification(Notification.ios(alert, extras))
305+
.build();
306+
return _pushClient.sendPush(payload);
307+
}
308+
267309

268310
// ---------------------- shortcuts - message
269311

@@ -407,6 +449,12 @@ public DefaultResult deleteAlias(String alias, String platform)
407449
return _deviceClient.deleteAlias(alias, platform);
408450
}
409451

452+
public Map<String, OnlineStatus> getUserOnlineStatus(String... registrationIds)
453+
throws APIConnectionException, APIRequestException
454+
{
455+
return _deviceClient.getUserOnlineStatus(registrationIds);
456+
}
457+
410458
// ----------------------- Schedule
411459

412460
/**

src/main/java/cn/jpush/api/device/DeviceClient.java

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
package cn.jpush.api.device;
22

3-
import java.util.Set;
4-
53
import cn.jpush.api.common.ClientConfig;
64
import cn.jpush.api.common.ServiceHelper;
75
import cn.jpush.api.common.connection.HttpProxy;
86
import cn.jpush.api.common.connection.IHttpClient;
97
import cn.jpush.api.common.connection.NativeHttpClient;
10-
import cn.jpush.api.common.resp.APIConnectionException;
11-
import cn.jpush.api.common.resp.APIRequestException;
12-
import cn.jpush.api.common.resp.BaseResult;
13-
import cn.jpush.api.common.resp.BooleanResult;
14-
import cn.jpush.api.common.resp.DefaultResult;
15-
import cn.jpush.api.common.resp.ResponseWrapper;
8+
import cn.jpush.api.common.resp.*;
169
import cn.jpush.api.utils.Preconditions;
17-
10+
import com.google.gson.Gson;
1811
import com.google.gson.JsonArray;
1912
import com.google.gson.JsonObject;
2013
import com.google.gson.JsonPrimitive;
14+
import com.google.gson.reflect.TypeToken;
15+
16+
import java.lang.reflect.Type;
17+
import java.util.Map;
18+
import java.util.Set;
2119

2220
public class DeviceClient {
2321

@@ -196,6 +194,29 @@ public DefaultResult deleteAlias(String alias, String platform) throws APIConnec
196194

197195
return DefaultResult.fromResponse(response);
198196
}
197+
198+
// -------------- devices status
199+
200+
public Map<String, OnlineStatus> getUserOnlineStatus(String... registrationIds)
201+
throws APIConnectionException, APIRequestException
202+
{
203+
Preconditions.checkArgument((null != registrationIds ),
204+
"The registration id list should not be null.");
205+
Preconditions.checkArgument(registrationIds.length > 0 && registrationIds.length <= 1000,
206+
"The length of registration id list should between 1 and 1000.");
207+
208+
String url = hostName + devicesPath + "/status";
209+
JsonObject json = new JsonObject();
210+
JsonArray array = new JsonArray();
211+
for(int i = 0; i < registrationIds.length; i++) {
212+
array.add(new JsonPrimitive(registrationIds[i]));
213+
}
214+
json.add("registration_ids", array);
215+
Type type = new TypeToken<Map<String, OnlineStatus>>(){}.getType();
216+
ResponseWrapper response = _httpClient.sendPost(url, json.toString());
217+
Map<String, OnlineStatus> map = new Gson().fromJson(response.responseContent, type);
218+
return map;
219+
}
199220

200221
}
201222

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package cn.jpush.api.device;
2+
3+
public class OnlineStatus {
4+
5+
Boolean online;
6+
String last_online_time;
7+
8+
public Boolean getOnline() {
9+
return online;
10+
}
11+
12+
public void setOnline(Boolean online) {
13+
this.online = online;
14+
}
15+
16+
public String getLast_online_time() {
17+
return last_online_time;
18+
}
19+
20+
public void setLast_online_time(String last_online_time) {
21+
this.last_online_time = last_online_time;
22+
}
23+
24+
@Override
25+
public String toString() {
26+
if(null == last_online_time) {
27+
return "OnlineStatus " + online;
28+
}
29+
return "OnlineStatus " + online + " ," + last_online_time;
30+
}
31+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package cn.jpush.api.push.model;
22

3+
import com.google.gson.Gson;
34
import com.google.gson.JsonElement;
45

56
public interface PushModel {
67

8+
public static Gson gson = new Gson();
79
public JsonElement toJSON();
810

911
}

src/main/java/cn/jpush/api/push/model/notification/AndroidNotification.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package cn.jpush.api.push.model.notification;
22

3-
import java.util.Map;
4-
53
import com.google.gson.JsonElement;
64
import com.google.gson.JsonObject;
75
import com.google.gson.JsonPrimitive;
86

7+
import java.util.Map;
8+
99
public class AndroidNotification extends PlatformNotification {
1010
public static final String NOTIFICATION_ANDROID = "android";
1111

@@ -15,7 +15,7 @@ public class AndroidNotification extends PlatformNotification {
1515
private final String title;
1616
private final int builderId;
1717

18-
private AndroidNotification(String alert, String title, int builderId,
18+
private AndroidNotification(Object alert, String title, int builderId,
1919
Map<String, String> extras,
2020
Map<String, Number> numberExtras,
2121
Map<String, Boolean> booleanExtras,
@@ -73,7 +73,7 @@ public Builder setBuilderId(int builderId) {
7373
return this;
7474
}
7575

76-
public Builder setAlert(String alert) {
76+
public Builder setAlert(Object alert) {
7777
this.alert = alert;
7878
return this;
7979
}

0 commit comments

Comments
 (0)