Notification(极光推送)

简介

通知或者说 Push Notification,即指在手机的通知栏(状态栏)上会显示的一条通知信息。 通知主要用于提示用户的目的,应用于新闻内容、促销活动、产品信息、版本更新提醒、订单状态提醒等多种场景

官方文档链接 : https://docs.jiguang.cn/jpush/guideline/intro/

准备工作

  1. 注册JPush账号,并完成认证
  2. 在JPush上创建一个应用
  3. 在JPush上配置相关Android、IOS的推送配置
  4. 获取应用的AppKey与Master Secret

IOS端

参考链接 : https://blog.csdn.net/qq_31927785/article/details/52170521?locationNum=5

重点 : 需要IOS端获取RegisterID

服务端

1.在maven中引入JPush相关依赖

<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.2.9</version>
</dependency>

2业务处理思路

  1. 通过Android或IOS为应用的用户注册RegisterId,通过Registerld来发送推送
  2. 推送方式可以用RegisterID、Alias,本章以RegisterID为例.

3.构建推送服务

  1. 连接JPush : 通过init()创建JPushClient对象
  2. 初始化PushPayload对象
  3. 推送通知
public class NotificationManager {
private static final Logger logger = LoggerFactory.getLogger(NotificationManager.class);
@Resource
private NotificationMapper mapper;
@Resource
private YamlConfig yamlConfig;
private JPushClient jpush;

// 连接JPush
@PostConstruct
private void init(){
if (jpush == null)
jpush = new JPushClient(yamlConfig.master_secret, yamlConfig.app_key);
}

// 推送通知
public boolean sendPushMsgByUserId(Integer userid , String content ){

if(jpush == null){
logger.warn("Jpush初始化失败!");
return false;
}
if(userid == null){
logger.warn("用户的id为空!");
}
// 初始化PushPayload
PushPayload pushPayload = PushPayload.newBuilder()
.setPlatform(Platform.all())
.setAudience(Audience.registrationId(userid.toString()))
.setNotification(cn.jpush.api.push.model.notification.Notification.alert(content))
.build();

try {
// 推送通知
PushResult pushResult = jpush.sendPush(pushPayload);
logger.info("Push result: " + pushResult);
return true;
} catch (APIConnectionException e) {
logger.error("Connection error, should retry later.", e);
} catch (APIRequestException e) {
logger.error("Should review the error, and fix the request", e);
logger.info("HTTP Status: " + e.getStatus());
logger.info("Error Code: " + e.getErrorCode());
logger.info("Error Message: " + e.getErrorMessage());
}
return false;
}

}

4.其他问题

4.1JPush 之前一直支持基于Alias(别名)的点对点推送方式,那为什么还要开放 RegistrationID 的点对点推送方式呢?

参 考链接:​https://blog.csdn.net/gao_chun/article/details/46726091

与 Alias 相比,RegistrationID 的有什么不同,或者说优势、劣势呢?

本质上 RegistrationID 与 Alias 类似,其目的都是唯一地定位到应用安装在一个特定的设备上。而本质的不同在于,Alias 是把映射关系保存到 JPush 的服务器上,而 RegistrationID 需要把映射关系保存到开发者业务服务器上。

这个本质的不同,决定了其特点:

Alias 有个 SDK 端设置绑定关系的问题。这个设置,有可能会失败,App 需要有处理这个暂时失败的逻辑。另外,Alias 是不限制绑定到多个设备的,这样要精确地定位到一个设备就不好控制。总而言之,这个绑定关系是没有那么精确一点的。

RegistrationID 一旦生成,意味着这个设备的安装一定存在。App 把这个 RegistrationID 保存到自己的业务服务器上,可以非常精确地定位到这台设备(安装这个应用)。这样开发者的内部业务可以做比较复杂的用户关联关系。

或者说,使用 Alias 开发者更简单、方便。但使用 RegistrationID 更方便于精确地定位用户。

Copyright © Sodo Tech 2014-2018 all right reserved,powered by Gitbook最后更新: 2018-08-10 23:26

results matching ""

    No results matching ""