Giter Site home page Giter Site logo

jpush / jpush-api-java-client Goto Github PK

View Code? Open in Web Editor NEW
729.0 82.0 419.0 16.59 MB

JiGuang's officially supported Java client library for accessing JPush APIs. 极光官方支持的 Java 版本服务器端 SDK。

Home Page: https://docs.jiguang.cn

Java 99.96% HTML 0.04%
jpush sdk-java

jpush-api-java-client's People

Contributors

boxingyewei avatar clement2026 avatar curacao-1 avatar dependabot[bot] avatar javenfang avatar joshlipan avatar kenchoi1992 avatar liuchy1 avatar ruibozhang1 avatar wang110696 avatar wicked-tc130 avatar xdx54321 avatar xiezefan avatar xinluke avatar yutaipu avatar zengzw avatar zincal8 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jpush-api-java-client's Issues

v3.2.15 Release 中增加的NettyHttpClient无法捕获APIConnectionException, APIRequestException异常

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;
}

关于PushResult和ResponseWrapper序列化问题

在构建推送的时候 采用dubbo的远程调用服务时 出现该2个类无法序列化。原因是这两个类没有实现序列化接口。通过修改该项目打包到maven里面引用解决了该问题 希望改掉这个问题。如有不清楚的问题
请联系 qq 496268609。(顺便说一句 默认构造器和实现序列化接口不是JavaBaan规范么);

接口API中的参数错误

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();
}

gson2.3无法在JDK1.8以下环境正常生成eclipse配置

按照项目说明做的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

这就是所谓的文档吗?

方法是干嘛的,参数是什么含义,一概没有。
setStyle方法传入一个int值,这个值可以是多少?文档呢?
我服了。
恕我直喷:还不如不写。估计也就是个KPI产物,草草敷衍了事

uJF1je.png

能给一个详细点的API说明文档吗?

你们的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);

"testSendPushWithEncrypt"method is error

ClientConfig clientConfig = ClientConfig.getInstance();
    clientConfig.setEncryptType(EncryptKeys.ENCRYPT_SMS2_TYPE);

clientConfig hasn't method setEncryptType

无法setIntent

当我构建PushPayload的时候如果我不setInbox,就无法setIntent
DeepinScreenshot_select-area_20190830184823
DeepinScreenshot_select-area_20190830184719
DeepinScreenshot_select-area_20190830184358
DeepinScreenshot_select-area_20190830184431

JPush推送数据类型有限?

请问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

按照demo做的报错

按照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.",

是哪里写法有问题吗?

http状态为400时,HttpResponseHandler中计数器不能减一,导致发送过程block住

下面这个问题有人遇到过不?也有可能是我配置的原因,比较奇怪,前几天都可以,代码没有改动,最近就不行了。

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)

JPush推送到Android端

推送到Android端的时候,是如何识别Android端的呢?比如是在数据库中存有Android的ID吗?

NettyHttpClient的sendRequest方法只能调用一次吗

第二次调用就会报错

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

README.md样例代码问题

示例代码

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....
	       }
}

jpush发送通知400错误

由于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能正常调用,请教下是什么原因。

源码可读性不高;是否可以添加注解?

  1. PushPayload累中的字段各是什么用?具体到字段类里面有没有?除了example的方法名可以了解点东西之外,自己扩展起来又点耗时间,还需要通过验证看是否正确?
  2. Pushapi里面结构跟代码中的结构又不一致~

ReportClient#getMessagesStatus

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);
    }

这里把送达状态查询的接口地址写死了,然后北京机房的接口地址不是这个

https://bjapi.push.jiguang.cn/v3/report/status/message

别名支持特殊字符减号

别名为什么不支持减号字符啊,别名是程序使用的,不需要有可读性,干嘛要限定字符呢。而且减号也是url安全的。

请问你们能改成支持减号字符吗?

无用的log造成了造成了大量的日志

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

这些无用的垃圾日志.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.