请教自定义消息的循环发送问题,以及能否改成批量发送?


(林客) #1

请教以下几个问题:
1、最近使用极光推送时,发现 后台循环发送(自定义)消息时 会有无故中止的情况,
调用方式:循环调用极光封装的 JpushUtils.pushAlies(aliasList, notice, message) 方法,
每次 AliasList 实际只包含1个别名(用户)
通过打日志发现,往往在调用十几次之后,就莫名中止了,但也没捕捉到其他异常(比较随机,不好设断点跟踪)
——请问这种情况,我们该如何进一步跟踪分析?

2、上述场景下(用于练习题推送同步),消息内容实质是同一个,但其中有1个用户id(同Alias)不一样。
当初没想太多,就用了循环的方式单独发送
——目前API 里有方法,可以支持这种消息的批量发送吗? 类似于模板,极光发送前可以动态替换Alias
——如果有此方法,客户端(App)是否要修改解析代码? 如果能不修改最好
——(别的批量发送场景,我们用的是 JpushUtils.pushAlies(aliasList, notice, message) )

我们目前java端版本是3.3.1

极光刚开始试用,还是小白,文档里也没看太明白,麻烦高手指点一二。感谢感谢!


#2

推送一次消息,可以最多一次性传 1000个别名
https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#audience

如果是你们对 API 调用的终止,这个就不太清楚原因了,我们这边有一定的频率限制,但超频是会给你报错说明的。

https://docs.jiguang.cn/jpush/server/push/server_overview/#api_1


(林客) #3

谢了! 同时给多个别名发送消息,这个已了解,也应用过了。
不过我指的是 消息内容 Msg_Content 里用到了别名,如下红框部分

每个用户收到的消息,除了这个studentId 不一样,其他都相同,有没有方法在原来批量发送的基础上,置换内容里这个别名吗?

调用终止的情况,我们再跟踪一下


#4

这个就没有办法了,内容不一样,则就属于两条消息,我们没有提供 API 做动态修改。只能多次调用。

你们的这个信息是一定要通过远程推送发下去吗?可以考虑客户端处理后展示的方式。

如果只是在客户端展示上改动一个类似于用户名这样的东西,那你们可以考虑客户端收到后,将当前用户名放进消息展示里面,而其他同样的消息就走远程下发。

譬如这个思路


(林客) #5

好的了解——这个消息用来在 App内打开(内嵌浏览器的)web页面,给学生做题,将来提交时需要区分用户。
当初web页面没从App取用户名,只放在消息里传递的。 而且我们APP是 ToB 的,所有用户升级一次比较麻烦。。。
——既然改不了,你说的有道理,没办法,只能后面去升级App了

另外我们日志里,最近也看到访问极光后台超时的情况,这种主要是网络原因吗?

Exception in thread "Thread-20704" io.netty.channel.ConnectTimeoutException: connection timed out: api.jpush.cn/103.40.232.116:443 

	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe$1.run(AbstractNioChannel.java:267)
	at io.netty.util.concurrent.PromiseTask$RunnableAdapter.call(PromiseTask.java:38)
	at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:120)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
	at java.lang.Thread.run(Thread.java:745)

或者
Jan 09, 2018 8:53:25 AM cn.jiguang.common.connection.NativeHttpClient <init>
INFO: Created instance with connectionTimeout 5,000, readTimeout 30,000, maxRetryTimes 3, SSL Version TLS
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)

#6

超时一般就是网络波动问题导致,重试成功可以忽略,如果遇到某段时间怎么重试都不成功,检查网络又没有问题的话,可以上报给我们,看是否我们的服务器这边有变动。