jpush / jpush-api-java-client Goto Github PK
View Code? Open in Web Editor NEWJiGuang's officially supported Java client library for accessing JPush APIs. 极光官方支持的 Java 版本服务器端 SDK。
Home Page: https://docs.jiguang.cn
JiGuang's officially supported Java client library for accessing JPush APIs. 极光官方支持的 Java 版本服务器端 SDK。
Home Page: https://docs.jiguang.cn
方便用户更好的和spring生态整合
v3.2.15 Release 中增加的NettyHttpClient无法捕获APIConnectionException, APIRequestException异常
看了下源码
这能抛出异常么?
@OverRide
public ResponseWrapper sendPost(String url, String content) throws APIConnectionException, APIRequestException {
ResponseWrapper wrapper = new ResponseWrapper();
try {
return sendHttpRequest(HttpMethod.POST, url, content);
} catch (Exception e) {
e.printStackTrace();
}
return wrapper;
}
在构建推送的时候 采用dubbo的远程调用服务时 出现该2个类无法序列化。原因是这两个类没有实现序列化接口。通过修改该项目打包到maven里面引用解决了该问题 希望改掉这个问题。如有不清楚的问题
请联系 qq 496268609。(顺便说一句 默认构造器和实现序列化接口不是JavaBaan规范么);
Audience 中的 registrationId 和 segment 的重载方法的参数存在错误吧
public static Audience tag(String... tagValue) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG)
.addAudienceTargetValues(tagValue).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience tag(Collection<String> tagValues) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG)
.addAudienceTargetValues(tagValues).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience tag_and(String... tagValue) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG_AND)
.addAudienceTargetValues(tagValue).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience tag_and(Collection<String> tagValues) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG_AND)
.addAudienceTargetValues(tagValues).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience alias(String... alias) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.ALIAS)
.addAudienceTargetValues(alias).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience alias(Collection<String> aliases) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.ALIAS)
.addAudienceTargetValues(aliases).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience segment(String... segment) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.SEGMENT)
.addAudienceTargetValues(segment).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience segment(Collection<String> segments) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.ALIAS)
.addAudienceTargetValues(segments).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience registrationId(String... registrationId) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.REGISTRATION_ID)
.addAudienceTargetValues(registrationId).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience registrationId(Collection<String> registrationIds) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.ALIAS)
.addAudienceTargetValues(registrationIds).build();
return newBuilder().addAudienceTarget(target).build();
}
按照项目说明做的POM配置如下:
<!-- JPush dependencies -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<!-- For log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.2.3</version>
</dependency>
<!-- /. JPush dependencies -->
运行命令:
mvn eclipse:eclipse -Dwtpversion=2.0 -DdownloadSources=true
总是得到以下错误,导致无法正常执行mvn命令
[ERROR] An error occurred during dependency resolution of the following artifact:
com.google.code.gson:gson:2.3
Caused by: Unable to get dependency information: Unable to read the metadata file for artifact 'com.google.code.gson:gson:jar': Invalid JDK version in profile 'doclint-java8-disable': Unbounded range: [1.8, for project com.google.code.gson:gson
com.google.code.gson:gson:jar:2.3
内网只能通过代理服务器的方式访问外网,用极光推送会报连接超时错误
你们的API文档我也是看醉了,全部是类名方法名,都不说这个方法干吗用的,类干吗用的,需要什么样的参数,返回什么结果,太敷衍了事了!
推送在什么情况下会在超时时间没到的情况下一直堵塞?一个请求你们是只要客服端不终止你们服务端都不会终止的么?
定时推送如何实现上午9点-10点,每隔10分钟推送,貌似不支持。最小粒度是day的
PushPayload不支持根据RegistrationID推送,只能自己访问rest api吗?
// 封装数据
JSONObject jsonObject = new JSONObject();
jsonObject.put("platform", "all");
JSONArray jsonArray = new JSONArray();
JSONObject alias = new JSONObject();
// 用户名为其别名
jsonArray.add(user.getUserName());
alias.put("alias", jsonArray);
jsonObject.put("audience", alias);
//jsonObject.put("audience", "all");
JSONObject notification = new JSONObject();
notification.put("alert", "Hello" );
jsonObject.put("notification", notification);
JSONObject timeToLive = new JSONObject();
timeToLive.put("time_to_live", 0);
jsonObject.put("options", timeToLive);
使用SpringMVC修改ClientConfig的属性
怎么在hbuilder里面配置极光!
ClientConfig clientConfig = ClientConfig.getInstance();
clientConfig.setEncryptType(EncryptKeys.ENCRYPT_SMS2_TYPE);
clientConfig hasn't method setEncryptType
请问JPush推送数据类型只能是String类型吗?在使用JPush服务端SDK发送自定义消息时,如果附加字段中有boolean
或者int
类型会报类型转换错误,加上引号就没问题了。
java.lang.Integer cannot be cast to java.lang.String
java.lang.Boolean cannot be cast to java.lang.String
按照README.md的写的,代码如下:
public class NotificationServiceImpl implements NotificationService {
private String APP_KEY = "*******";
private String MASTER_SECRET = "*******";
@Override
public PushResult sendPush(NotificationVo notification) {
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY, null, ClientConfig.getInstance());
PushPayload payload = buildPushObject_all_alert(notification);
try {
PushResult result = jpushClient.sendPush(payload);
log.info("Result = " + result);
} catch (APIConnectionException e) {
// Connection error, should retry later
log.error("Connection error, should retry later");
} catch (APIRequestException e) {
// Should review the error, and fix the request
log.error("Should review the error, and fix the request",e);
log.error("HTTP Status: " + e.getStatus());
log.error("Error Code: " + e.getErrorCode());
log.error("Error Message: " + e.getErrorMessage());
}
return null;
}
/**
* 所有平台,推送目标是别名为 "alias1",通知内容为 ALERT。
* @return
*/
private PushPayload buildPushObject_all_alert(NotificationVo notification) {
PushPayload pushPayload = PushPayload.newBuilder()
.setPlatform(Platform.all())
.setAudience(Audience.alias("alias1"))
.setNotification(Notification.alert(notification.getAlert()))
.build();
return pushPayload;
}
}
在buildPushObject_all_alert方法的时候报
"error": "Internal Server Error",
"exception": "java.lang.IllegalArgumentException",
"message": "No notification payload is set.",
是哪里写法有问题吗?
失败时,setActionCache 没有remove元素哟
下面这个问题有人遇到过不?也有可能是我配置的原因,比较奇怪,前几天都可以,代码没有改动,最近就不行了。
1# cn.jiguang.common.connection.NettyHttpClient#sendHttpRequest 创建CountDownLatch执行发送,等待返回结果。
2# 发送完毕,服务器返回结果交给HttpResponseHandler处理,msg为DefaultLastHttpContent执行了if分支,_latch计数器没有减掉,导致1#被block住。
if(msg instanceof HttpContent) { // msg为DefaultLastHttpContent,实现接口LastHttpContent
HttpContent content1 = (HttpContent)msg;
LOG.info(content1.content().toString());
if(content1 instanceof LastHttpContent) {
LOG.info("closing connection");
ctx.close();
} else {
// ...
if(null != this._latch) {
this._latch.countDown();
}
}
}
相关信息:
推送结果:发送失败(errcode:1011,errmsg:没有满足条件的推送目标)
响应信息:
DefaultHttpResponse(decodeResult: success, version: HTTP/1.1)
HTTP/1.1 400 Bad Request
Server: nginx
Date: Thu, 21 Jun 2018 01:25:01 GMT
Content-Type: application/json
Content-Length: 91
Connection: keep-alive
X-Rate-Limit-Limit: 600
X-Rate-Limit-Remaining: 599
X-Rate-Limit-Reset: 60
X-Jpush-Msgid: 2209689839
DefaultLastHttpContent(data: PooledSlicedByteBuf(ridx: 0, widx: 91, cap: 91/91, unwrapped: PooledUnsafeDirectByteBuf(ridx: 352, widx: 352, cap: 381)), decoderResult: success)
http://repo1.maven.org/maven2/cn/jpush/api/jpush-client/
WTF shit document
如题 谢谢
推送到Android端的时候,是如何识别Android端的呢?比如是在数据库中存有Android的ID吗?
第二次调用就会报错
Force-closing a channel whose registration task was not accepted by an event loop: [id: 0x0db43730]
java.util.concurrent.RejectedExecutionException: event executor terminated
at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:855)
at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:328)
at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:321)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:778)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:479)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:80)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:74)
at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86)
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:333)
at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:163)
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:145)
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:126)
at cn.jiguang.common.connection.NettyHttpClient.sendRequest(NettyHttpClient.java:82)
cannot find user by this audience。
17/09/01 17:42:33 DEBUG connection.NativeHttpClient: Request Content - {"platform":["android","ios"],"audience":"all","notification":{"ios":{"alert":"你好","extras":{"type":"infomation"},"badge":"+1","sound":""},"android":{"alert":"你好","extras":{"type":"infomation"}}},"options":{"sendno":1742040373,"time_to_live":90,"apns_production":false}}
17/09/01 17:42:33 DEBUG resp.ResponseWrapper: JPush API Rate Limiting params - quota:600, remaining:599, reset:60
17/09/01 17:42:33 WARN connection.NativeHttpClient: Got error response - responseCode:400, responseContent:{"msg_id": 2081584083, "error": {"message": "cannot find user by this audience", "code": 1011}}
17/09/01 17:42:33 ERROR connection.NativeHttpClient: Your request params is invalid. Please check them according to error message.
17/09/01 17:42:33 ERROR test.Push: Error response from JPush server. Should review and fix it.
{}
at cn.jiguang.common.connection.NativeHttpClient._doRequest(NativeHttpClient.java:235)
at cn.jiguang.common.connection.NativeHttpClient.doRequest(NativeHttpClient.java:99)
at cn.jiguang.common.connection.NativeHttpClient.sendPost(NativeHttpClient.java:86)
at cn.jpush.api.push.PushClient.sendPush(PushClient.java:163)
at cn.jpush.api.JPushClient.sendPush(JPushClient.java:195)
at com.cg.test.Push.testSendPush(Push.java:51)
at com.cg.test.Push.main(Push.java:29)
17/09/01 17:42:33 INFO test.Push: HTTP Status: 400
17/09/01 17:42:33 INFO test.Push: Error Code: 1011
17/09/01 17:42:33 INFO test.Push: Error Message: cannot find user by this audience
17/09/01 17:42:33 INFO test.Push: Msg ID: 2081584083
17/09/01 17:42:33 ERROR test.Push: Sendno: 1742040373
jpush-client jar依赖不到,是不是没有打到仓库中?
cn.jpush.api
jpush-client
3.2.18
3.2.17
版本 jpush-client 3.1.3
绑定别名URL:https://device.jpush.cn/v3/devices/13065ffa4e47c6c6ba6/?platform=android,ios
错误日志如下:
2019-05-09 09:29:54 WARN [http-bio-8090-exec-2] (NativeHttpClient.java:161) method:_sendRequest - Got error response - responseCode:404, responseContent:{"error": {"code": 7010, "message": "request api doesn't exist"}}
极光社区 收不到注册邮件所有在这里问一下,麻烦解答一下。
如何通过服务端SDK推送富媒体消息
try {
PushResult result = jpushClient.sendPush(payload);
LOG.info("Got result - " + result);
Thread.sleep(5000);
// 请求结束后,调用 NettyHttpClient 中的 close 方法,否则进程不会退出。
jpushClient.close();
} catch(InterruptedException e) {
e.printStackTrace();
}
jpushClient.close()应该放在finally方法体内或者实现AutoCloseable接口,这种示例代码严重误导人,正确写法:
JPushClient jpushClient =null;
try {
jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
PushPayload payload = PushPayload.alertAll(alert);
PushResult result = jpushClient.sendPush(payload);
this.output("Get result :" + result);
Thread.sleep(5000);
} catch (Exception e) {
Log....
} finally {
try {
jpushClient.close();
} catch (Exception e) {
Log....
}
}
myproject use jdk6
由于jpush-client依赖的jar和系统框架的一些jar冲突,只能自己参考Jpush服务端 REST API 概述封装实现,但是调用总报400错误:
java.io.IOException: <html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
但是同样的json和appKey以及masterSecret,用postman或curl能正常调用,请教下是什么原因。
这是什么垃圾官方文档?注释也没有,内容都是错的,垃圾
public Map<String, MessageStatus> getMessagesStatus(CheckMessagePayload payload)
throws APIConnectionException, APIRequestException {
String url = _hostName + "/v3/status/message";
ResponseWrapper result = _httpClient.sendPost(url, payload.toString());
Type type = new TypeToken<Map<String, MessageStatus>>(){}.getType();
return new Gson().fromJson(result.responseContent, type);
}
这里把送达状态查询的接口地址写死了,然后北京机房的接口地址不是这个
在java接口文档中看到的增加附加字段的话,都是区分平台(iOS和Android)的,想知道如果不区分平台的话,应该如何调用接口
Message$Builder.addExtras(Map<String, String> extras)
建议该方法Map改为 Map<String,Object>, 这样直接添加Map才不会受到只能添加字符串的限制,这样可满足如添加此类json的限制
{
type : 1
data: {
userName: "xxx",
age : 18
}
}
对于Object的支持类型,可再内部做进一步校验
如题
尤其是针对IOS,如果服务器端有很多不同种类的不同设置的push,即使抽象出来也会有特别多的位置需要在adhoc测试和开发测试进行切换。
参照下你们友商个推 服务端这个很多人在用 想办法好好搞搞,我们这想快速搭建还得去网上搜别人的
别名为什么不支持减号字符啊,别名是程序使用的,不需要有可读性,干嘛要限定字符呢。而且减号也是url安全的。
请问你们能改成支持减号字符吗?
谢谢
没有沙箱,如何测试开发环境
NativeHttpClient.java:55
这里的log 是不是可以log.debug.
在每次推送都会产生
2017-10-17 17:17:10,801 INFO [main] c.j.c.c.NativeHttpClient [NativeHttpClient.java:55] Created instance with connectionTimeout 5,000, readTimeout 30,000, maxRetryTimes 3, SSL Version TLS
2017-10-17 17:17:10,856 INFO [main] c.j.c.c.NativeHttpClient [NativeHttpClient.java:55] Created instance with connectionTimeout 5,000, readTimeout 30,000, maxRetryTimes 3, SSL Version TLS
2017-10-17 17:17:10,859 INFO [main] c.j.c.c.NativeHttpClient [NativeHttpClient.java:55] Created instance with connectionTimeout 5,000, readTimeout 30,000, maxRetryTimes 3, SSL Version TLS
2017-10-17 17:17:10,860 INFO [main] c.j.c.c.NativeHttpClient [NativeHttpClient.java:55] Created instance with connectionTimeout 5,000, readTimeout 30,000, maxRetryTimes 3, SSL Version TLS
这些无用的垃圾日志.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.