-
创建应用
image.png -
创建应用后可得到应用的
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的打包环境是否错误。
image.png
当选择了开发环境,且预估人数为1,说明该IOS设备注册到了极光的开发环境。
image.png
- 当选择了正式环境,再查询该
Registration ID
。发现预估人数为0,是正常的,因为这台设备注册在了开发环境。
网友评论