- 地址
- 创建应用
- 创建应用后可得到应用的
AppKey
和AppSecret
。
- 客户端集成(略)
将生成一个 Registration ID,形如171976fa8ae931b4e93
- 服务端集成:
- 依赖
"cn.jpush.api:jpush-client:3.4.3"
- 推送代码
package com.wise.service.configuration; import cn.hutool.core.util.RandomUtil; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang.common.resp.APIRequestException; import cn.jpush.api.JPushClient; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Message; import cn.jpush.api.push.model.Options; import cn.jpush.api.push.model.Platform; import cn.jpush.api.push.model.PushPayload; import cn.jpush.api.push.model.audience.Audience; import cn.jpush.api.push.model.notification.AndroidNotification; import cn.jpush.api.push.model.notification.IosAlert; import cn.jpush.api.push.model.notification.IosNotification; import cn.jpush.api.push.model.notification.Notification; import com.alibaba.fastjson.JSON; import com.wise.framework.exception.Excep; import com.wise.model.proxy.ProxyErrMsgs; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import javax.annotation.PostConstruct; import java.util.Collection; /** * @author futao * @date 2019/12/20. */ @Slf4j @Configuration public class JpushClientConfiguration { @Autowired private Environment environment; private static Environment environmentHolder; /** * @PostConstruct 注解的方法将会在依赖注入完成后被自动调用。 */ @PostConstruct public void injectEnvironment() { JpushClientConfiguration.environmentHolder = environment; } /** * 推送消息给指定的用户 * * @param jPushClient 客户端配置 * @param registrationIds 要推送的目的用户 * @param message 提示消息 * @param title 标题 * @param noVisualableMessage 透传消息 */ public static void push(JPushClient jPushClient, Collection<String> registrationIds, String title, String message, Object noVisualableMessage) { String messageUUID = RandomUtil.simpleUUID(); PushPayload.Builder builder = PushPayload.newBuilder() //接收设备类型 .setPlatform(Platform.all()) //消息ID--用于防止 api 调用端重试造成服务端的重复推送而定义的一个标识符。 // .setCid("03b6bf760c86f9fe77c0caef-") //此部分内容不会展示到通知栏上--透传给 App .setMessage(Message.newBuilder().setMsgContent(noVisualableMessage != null ? JSON.toJSONString(noVisualableMessage) : "{}").build()) //title是标题,alert是内容 .setNotification(Notification.newBuilder() // .setAlert(message) .addPlatformNotification( IosNotification .newBuilder() //子标题展示不出来 .setAlert(IosAlert.newBuilder().setTitleAndBody(title, null, message).build()) //IOS角标 // .incrBadge(1) //推送唤醒 .setContentAvailable(true) //通知声音 .setSound("default") .build() ) .addPlatformNotification( AndroidNotification .newBuilder() .setTitle(title) .setAlert(message) //消息,振动,呼吸灯类型 doc: https://community.jiguang.cn/question/150550 .setAlertType(7) .build() ) .build()) .setOptions(Options.newBuilder().setApnsProduction(environmentHolder.acceptsProfiles("pro")).build()); if (CollectionUtils.isNotEmpty(registrationIds)) { //接收对象 builder.setAudience(Audience.registrationId(registrationIds)); } else { builder.setAudience(Audience.all()); } PushPayload payload = builder .build(); try { log.info("【{}】before极光消息推送-body:{}", messageUUID, JSON.toJSONString(payload)); PushResult pushResult = jPushClient.sendPush(payload); log.info("【{}】极光消息推送成功结果:{}", messageUUID, JSON.toJSONString(pushResult)); } catch (APIConnectionException | APIRequestException e) { log.error("【{}】消息推送失败", messageUUID, e); throw Excep.le(ProxyErrMsgs.ERR_100300100009); } } }
- 注意点:
IOS区分开发环境与生产环境,需要设置.setOptions(Options.newBuilder().setApnsProduction(environmentHolder.acceptsProfiles("pro")).build());
。且IOS打包的时候需要选择是开发环境还是正式环境,否则消息推送不到。Android不区分环境。 - 环境问题:可以将IOS获取到的
Registration ID
到管理后台查看注册到了什么环境,从而得知IOS的打包环境是否错误。
当选择了开发环境,且预估人数为1,说明该IOS设备注册到了极光的开发环境。
当选择了正式环境,再查询该Registration ID
。发现预估人数为0,是正常的,因为这台设备注册在了开发环境。