JGMessageHelper.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.goafanti.message;
  2. import java.net.URI;
  3. import java.util.List;
  4. import io.netty.handler.codec.http.HttpMethod;
  5. import org.apache.commons.lang3.StringUtils;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.DisposableBean;
  9. import org.springframework.beans.factory.InitializingBean;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.beans.factory.annotation.Value;
  12. import com.goafanti.common.utils.LoggerUtils;
  13. import com.goafanti.message.bo.MessageAdapter;
  14. import com.goafanti.message.bo.MessageBo;
  15. import com.goafanti.message.push.model.Message;
  16. import com.goafanti.message.push.model.Platform;
  17. import com.goafanti.message.push.model.PushPayload;
  18. import com.goafanti.message.push.model.audience.Audience;
  19. import com.goafanti.message.push.model.audience.AudienceTarget;
  20. import com.goafanti.message.queue.MessageRedisQueue;
  21. import cn.jiguang.common.ClientConfig;
  22. import cn.jiguang.common.ServiceHelper;
  23. import cn.jiguang.common.connection.NettyHttpClient;
  24. import cn.jiguang.common.resp.ResponseWrapper;
  25. /**
  26. * 极光推送
  27. * @author Administrator
  28. *
  29. */
  30. public class JGMessageHelper implements InitializingBean, DisposableBean{
  31. @Value(value = "${jiguang.appKey}")
  32. private String appKey;
  33. @Value(value = "${jiguang.masterSecret}")
  34. private String masterSecret;
  35. @Value(value = "${jiguang.pushUrl}")
  36. private String pushUrl;
  37. @Autowired
  38. private MessageRedisQueue jedisQueue;
  39. private static final int UN_AUTH = 401;//未验证
  40. private static final int NOT_SUITABLE = 405;//不支持该请求方法
  41. private static final int EXCEED_THE_LIMIT = 429;//超过频率限制
  42. private static final Logger logger = LoggerFactory.getLogger(JGMessageHelper.class);
  43. private static final int MAX_TRYCOUNT = 3;
  44. private static final String MESSAGE_ID = "message_id";//消息ID
  45. private static final String RESOURCE_ID = "resource_id";//资源ID
  46. private static final String RESOURCE_TYPE = "resource_type";//资源类型
  47. public void send(MessageAdapter messageAdapter){
  48. ClientConfig clientConfig = ClientConfig.getInstance();
  49. String host = (String) clientConfig.get(ClientConfig.PUSH_HOST_NAME);
  50. final NettyHttpClient client = new NettyHttpClient(ServiceHelper.getBasicAuthorization(appKey, masterSecret), null, clientConfig);
  51. try {
  52. URI uri = new URI(host + clientConfig.get(ClientConfig.PUSH_PATH));
  53. PushPayload payload = messageAdapter.getPushPayload();
  54. if(payload == null) System.out.println("*******************shit*********************");
  55. System.out.println(payload.toJSON());
  56. client.sendRequest(HttpMethod.POST, payload.toString(), uri, new NettyHttpClient.BaseCallback() {
  57. @Override
  58. public void onSucceed(ResponseWrapper responseWrapper) {
  59. logger.info("Got result: " + responseWrapper.responseContent);
  60. if(responseWrapper.responseCode == UN_AUTH){
  61. LoggerUtils.debug(logger, "Request Not Authorized");
  62. }else if(responseWrapper.responseCode == NOT_SUITABLE){
  63. LoggerUtils.debug(logger, "Request Not Allow");
  64. }else if(responseWrapper.responseCode == EXCEED_THE_LIMIT){
  65. LoggerUtils.debug(logger, "Request Too Frequent");
  66. }
  67. }
  68. });
  69. } catch (Exception e) {
  70. sendLater(messageAdapter);
  71. e.printStackTrace();
  72. }finally {
  73. client.close();
  74. }
  75. }
  76. public void sendLater(MessageAdapter messageAdapter) {
  77. if(messageAdapter.getTryCount() < MAX_TRYCOUNT)
  78. jedisQueue.pushFromTail(messageAdapter.tryCount(messageAdapter.getTryCount()+1));
  79. }
  80. public void sendSystemMessage(MessageBo mb){
  81. MessageAdapter ma = new MessageAdapter();
  82. if(StringUtils.isNotBlank(mb.getRegistrationId())){
  83. ma.pushPayload(PushPayload.newBuilder()
  84. .setPlatform(Platform.android_ios())
  85. .setAudience(Audience.newBuilder()
  86. .addAudienceTarget(
  87. AudienceTarget.registrationId(mb.getRegistrationId()))
  88. .build())
  89. .setMessage(Message.newBuilder()
  90. .setTitle(mb.getMessageTitle())
  91. .setMsgContent(mb.getMessageBody())
  92. .addExtra(MESSAGE_ID,mb.getMessageId())
  93. .addExtra(RESOURCE_ID,mb.getResourceId() == null ? "" : mb.getResourceId())
  94. .addExtra(RESOURCE_TYPE, mb.getResourceType()== null ? "": mb.getResourceType())
  95. .build())
  96. .build());
  97. send(ma);
  98. }
  99. }
  100. public void sendSystemMessage(MessageBo... mb){
  101. for(MessageBo bo : mb){
  102. sendSystemMessage(bo);
  103. }
  104. }
  105. public void sendSystemMessage(List<MessageBo> mb){
  106. for(MessageBo bo : mb){
  107. sendSystemMessage(bo);
  108. }
  109. }
  110. @Override
  111. public void destroy() throws Exception {
  112. LoggerUtils.debug(logger, "消息系统关闭");
  113. }
  114. @Override
  115. public void afterPropertiesSet() throws Exception {
  116. }
  117. public static void main(String[] args) {
  118. PushPayload pp = PushPayload.newBuilder()
  119. .setPlatform(Platform.android_ios())
  120. .setAudience(Audience.newBuilder()
  121. .addAudienceTarget(
  122. AudienceTarget.registrationId("极光id"))
  123. .build())
  124. .setMessage(Message.newBuilder()
  125. .setTitle("消息标题")
  126. .setMsgContent("消息内容")
  127. .addExtra(MESSAGE_ID,"消息id")
  128. .addExtra(RESOURCE_ID,"资源id")
  129. .addExtra(RESOURCE_TYPE, "资源类型")
  130. .build())
  131. .build();
  132. System.out.println(pp.toString());
  133. }
  134. }