当前位置:网站首页 > Java基础 > 正文

java的极光推送教程



@Service(“jpushService”) @Slf4j public class JpushUtils {

@Resource JpushConfig jpushConfig; </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 发送自定义消息,由APP端拦截信息后再决定是否创建通知(目前APP用此种方式) * * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> title App通知栏标题 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> content App通知栏内容(为了单行显示全,尽量保持在22个汉字以下) * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> extrasMap 额外推送信息(不会显示在通知栏,传递数据用) * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> alias 别名数组,设定哪些用户手机能接收信息(为空则所有用户都推送) * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> PushResult </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">public</span> PushResult sendCustomPush(String title, String content, Map&lt;String, String&gt; extrasMap, String... alias) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> APIConnectionException, APIRequestException { ClientConfig clientConfig </span>=<span style="color: rgba(0, 0, 0, 1)"> ClientConfig.getInstance(); clientConfig.setTimeToLive(Long.parseLong(jpushConfig.getLiveTime())); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用NativeHttpClient网络客户端,连接网络的方式,不提供回调函数</span> JPushClient jpushClient = <span style="color: rgba(0, 0, 255, 1)">new</span> JPushClient(jpushConfig.getMasterSecret(), jpushConfig.getAppkey(), <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">, clientConfig); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置为消息推送方式为仅推送消息,不创建通知栏提醒 

// PushPayload payload = buildCustomPushPayload(title, content, extrasMap, alias);

 PushPayload payload =<span style="color: rgba(0, 0, 0, 1)"> buildCustomPushPayload(title, content, extrasMap, alias); PushResult result </span>=<span style="color: rgba(0, 0, 0, 1)"> jpushClient.sendPush(payload); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result; } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 发送通知消息 * * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> title App通知栏标题 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> content App通知栏内容(为了单行显示全,尽量保持在22个汉字以下) * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> extrasMap 额外推送信息(不会显示在通知栏,传递数据用) * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> tags 标签数组,设定哪些用户手机能接收信息(为空则所有用户都推送) </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">public</span> PushResult sendPush(String title, String content, Map&lt;String, String&gt; extrasMap, String... tags) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> APIConnectionException, APIRequestException { ClientConfig clientConfig </span>=<span style="color: rgba(0, 0, 0, 1)"> ClientConfig.getInstance(); clientConfig.setTimeToLive(Long.valueOf(jpushConfig.getLiveTime())); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用NativeHttpClient网络客户端,连接网络的方式,不提供回调函数</span> JPushClient jpushClient = <span style="color: rgba(0, 0, 255, 1)">new</span> JPushClient(jpushConfig.getMasterSecret(), jpushConfig.getAppkey(), <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">, clientConfig); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置推送方式</span> PushPayload payload =<span style="color: rgba(0, 0, 0, 1)"> buildPushLoadByTags(title, content, extrasMap, tags); PushResult result </span>=<span style="color: rgba(0, 0, 0, 1)"> jpushClient.sendPush(payload); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result; } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 异步请求推送方式 * 使用NettyHttpClient,异步接口发送请求,通过回调函数可以获取推送成功与否情况 * * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> title 通知栏标题 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> content 通知栏内容(为了单行显示全,尽量保持在22个汉字以下) * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> extrasMap 额外推送信息(不会显示在通知栏,传递数据用) * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> alias 需接收的用户别名数组(为空则所有用户都推送) </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> sendPushWithCallback(String title, String content, Map&lt;String, String&gt;<span style="color: rgba(0, 0, 0, 1)"> extrasMap, String... alias) { ClientConfig clientConfig </span>=<span style="color: rgba(0, 0, 0, 1)"> ClientConfig.getInstance(); clientConfig.setTimeToLive(Long.valueOf(jpushConfig.getLiveTime())); String host </span>=<span style="color: rgba(0, 0, 0, 1)"> (String) clientConfig.get(ClientConfig.PUSH_HOST_NAME); NettyHttpClient client </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> NettyHttpClient( ServiceHelper.getBasicAuthorization(jpushConfig.getAppkey(), jpushConfig.getMasterSecret()), </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">, clientConfig); </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { URI uri </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> URI(host +<span style="color: rgba(0, 0, 0, 1)"> clientConfig.get(ClientConfig.PUSH_PATH)); PushPayload payload </span>=<span style="color: rgba(0, 0, 0, 1)"> buildPushPayload(title, content, extrasMap, alias); client.sendRequest(HttpMethod.POST, payload.toString(), uri, </span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> NettyHttpClient.BaseCallback() { @Override </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onSucceed(ResponseWrapper responseWrapper) { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (200 ==<span style="color: rgba(0, 0, 0, 1)"> responseWrapper.responseCode) { log.info(</span>"极光推送成功"<span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { log.info(</span>"极光推送失败,返回结果: " +<span style="color: rgba(0, 0, 0, 1)"> responseWrapper.responseContent); } } }); } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (URISyntaxException e) { e.printStackTrace(); } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 需要手动关闭Netty请求进程,否则会一直保留</span> 

client.close();

 } } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 设置、更新、设备的 tag, alias 信息。 * * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> registrationId 设备的registrationId * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> alias 更新设备的别名属性 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> tagsToAdd 添加设备的tag属性 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> tagsToRemove 移除设备的tag属性 </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> UpdateDeviceTagAlias(String registrationId, String alias, Set&lt;String&gt; tagsToAdd, Set&lt;String&gt; tagsToRemove) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> APIConnectionException, APIRequestException { JPushClient jpushClient </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> JPushClient(jpushConfig.getMasterSecret(), jpushConfig.getAppkey()); jpushClient.updateDeviceTagAlias(registrationId, alias, tagsToAdd, tagsToRemove); } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 构建Android和IOS的推送通知对象 * * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> PushPayload </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> PushPayload buildPushPayload(String title, String content, Map&lt;String, String&gt;<span style="color: rgba(0, 0, 0, 1)"> extrasMap, String... alias) { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (extrasMap == <span style="color: rgba(0, 0, 255, 1)">null</span> ||<span style="color: rgba(0, 0, 0, 1)"> extrasMap.isEmpty()) { extrasMap </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> HashMap&lt;String, String&gt;<span style="color: rgba(0, 0, 0, 1)">(); } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 批量删除数组中空元素</span> String[] newAlias =<span style="color: rgba(0, 0, 0, 1)"> removeArrayEmptyElement(alias); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> PushPayload.newBuilder().setPlatform(Platform.android_ios()) </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 别名为空,全员推送;别名不为空,按别名推送</span> .setAudience((<span style="color: rgba(0, 0, 255, 1)">null</span> == newAlias || newAlias.length == 0) ?<span style="color: rgba(0, 0, 0, 1)"> Audience.all() : Audience.alias(alias)) 

// .setAudience(Audience.registrationId(“d”)) .setNotification(Notification.newBuilder().setAlert(content)

 .addPlatformNotification( AndroidNotification.newBuilder().setTitle(title).addExtras(extrasMap).build()) .addPlatformNotification(IosNotification.newBuilder().incrBadge(</span>1<span style="color: rgba(0, 0, 0, 1)">).addExtras(extrasMap).build()) .build()) .build(); } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 根据标签推送相应的消息 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> title 推送消息标题 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> content 推送消息内容 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> map 推送额外信息 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> tags 推送的目标标签 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span> <span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">public</span> PushPayload buildPushLoadByTags(String title,String content,Map&lt;String,String&gt;<span style="color: rgba(0, 0, 0, 1)"> map,String... tags) { </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(map.isEmpty()){ map </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> HashMap&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">(); } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">批量删除数组中的空元素</span> String[] newTags =<span style="color: rgba(0, 0, 0, 1)"> removeArrayEmptyElement(tags); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> PushPayload.newBuilder() </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置推送平台为安卓</span> 

.setPlatform(Platform.android())

 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置标签</span> 

.setAudience(Audience.tag(tags))

 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置 推送的标签标题 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置通知方式(以alert方式提醒)</span> 

.setNotification(Notification.newBuilder().setAlert(content)

 .addPlatformNotification(AndroidNotification.newBuilder().setTitle(title).addExtras(map).build()).build()) </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">sendno int 可选 推送序号 纯粹用来作为 API 调用标识 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">离线消息保留时长 推送当前用户不在线时,为该用户保留多长时间的离线消息(默认 86400 (1 天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到) </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">apns_production boolean 可选 APNs是否生产环境 True 表示推送生产环境,False 表示要推送开发环境; 如果不指定则为推送生产环境 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">big_push_duration int 可选 定速推送时长(分钟) 又名缓慢推送,把原本尽可能快的推送速度,降低下来,在给定的 n 分钟内,均匀地向这次推送的目标用户推送。最大值为 1440。未设置则不是定速推送 

// .setOptions(Options.newBuilder().setApnsProduction(false).setTimeToLive(8600).setBigPushDuration(1).build())

 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置通知内容 

// .setMessage(Message.newBuilder().setTitle(“”).setMsgContent(“”).setContentType(“”).build()) .build();

} </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 构建Android和IOS的自定义消息的推送消息对象 * * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> PushPayload </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> PushPayload buildCustomPushPayload(String title, String content, Map&lt;String, String&gt;<span style="color: rgba(0, 0, 0, 1)"> extrasMap, String... alias) { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 批量删除数组中空元素</span> String[] newAlias =<span style="color: rgba(0, 0, 0, 1)"> removeArrayEmptyElement(alias); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> PushPayload.newBuilder().setPlatform(Platform.android_ios()) .setAudience((</span><span style="color: rgba(0, 0, 255, 1)">null</span> == newAlias || newAlias.length == 0) ?<span style="color: rgba(0, 0, 0, 1)"> Audience.all() : Audience.alias(alias)) .setNotification(Notification.newBuilder().setAlert(content) .addPlatformNotification(AndroidNotification.newBuilder().setTitle(title).addExtras(extrasMap).build()).build()) .setMessage(Message.newBuilder().setTitle(title).setMsgContent(content).addExtras(extrasMap).build()) .build(); } </span><span style="color: rgba(0, 128, 0, 1)">/</span><span style="color: rgba(0, 128, 0, 1)"> * 删除别名中的空元素(需删除如:null,""," ") * * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> strArray * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> String[] </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String[] removeArrayEmptyElement(String... strArray) { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">null</span> == strArray || strArray.length == 0<span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">; } List</span>&lt;String&gt; tempList =<span style="color: rgba(0, 0, 0, 1)"> Arrays.asList(strArray); List</span>&lt;String&gt; strList = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;String&gt;<span style="color: rgba(0, 0, 0, 1)">(); Iterator</span>&lt;String&gt; iterator =<span style="color: rgba(0, 0, 0, 1)"> tempList.iterator(); </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (iterator.hasNext()) { String str </span>=<span style="color: rgba(0, 0, 0, 1)"> iterator.next(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 消除空格后再做比较</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">null</span> != str &amp;&amp; !""<span style="color: rgba(0, 0, 0, 1)">.equals(str.trim())) { strList.add(str); } } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 若仅输入"",则会将数组长度置为0</span> String[] newStrArray = strList.toArray(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> String[strList.size()]); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> newStrArray; }</span></span></pre> 

版权声明


相关文章:

  • java需求分析教程2025-10-26 17:18:05
  • 学习java教程视频2025-10-26 17:18:05
  • java教程嵌套if2025-10-26 17:18:05
  • java教程3242025-10-26 17:18:05
  • java线上学习教程2025-10-26 17:18:05
  • java注解详细教程2025-10-26 17:18:05
  • java安装使用教程csgo2025-10-26 17:18:05
  • java做闹钟教程2025-10-26 17:18:05
  • java.switch使用教程2025-10-26 17:18:05
  • java+9教程2025-10-26 17:18:05