iOS推送javaPNS源码解析二,消息体类

2024-04-25 12:38

本文主要是介绍iOS推送javaPNS源码解析二,消息体类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

消息体类是推送的基本组成部分,巧妇难为无米之炊,没消息体还推送神马。

消息体的顶级类是Payload,这是一个抽象类,作为基本的javabean,不需要什么其他的接口方法。

该类默认了消息体的实现是utf-8字符集,定义了消息体是一个JSONObject对象,说明了默认消息体失效时间是1天,类中payloadSizeEstimatedWhenAdding用于判断添加消息内容时候消息体长度是否过长,默认false;preSendConfiguration用于说明是否检测消息体为空。

set/get方法就不说了,构造函数也不说了就是实例化一个JSONObject。

public JSONObject getPayload(),返回自身

public void addCustomDictionary(String name, String value) throws JSONException ,增加String类型的字典属性和值
public void addCustomDictionary(String name, int value) throws JSONException ,增加int类型的字典属性和值。

public void addCustomDictionary(String name, List values) throws JSONException ,增加list类型的自定义字典属性和值。
public String toString() ,重写toString方法,也就是使用JSONObject的toString方法,打印json字符串。

void verifyPayloadIsNotEmpty() 如果设置检测消息体为检测,即preSendConfiguration!=0那么久判断是否为空,为空抛出异常

public byte[] getPayloadAsBytes() throws Exception,如果消息体长度大于消息允许的最大长度,抛出异常否则根据默认配置获取指定字符集的消息体byte[]格式,调用getPayloadAsBytesUnchecked() 。
private byte[] getPayloadAsBytesUnchecked() throws Exception ,获取消息体的byte[]形式,使用设置的字符集失败则默认执行。
 private boolean isPayloadTooLong() ,是否消息体的byte[]长度大于消息允许的最大值。
 public int estimatePayloadSizeAfterAdding(String propertyName, Object propertyValue)获取添加该属性后消息体长度。
 public boolean isEstimatedPayloadSizeAllowedAfterAdding(String propertyName, Object propertyValue) 是否允许添加该属性和属性值,是否添加后长度大于最大长度。
 private void validateMaximumPayloadSize(int currentPayloadSize) throws PayloadMaxSizeExceededException校验消息体长度。

 protected void put(String propertyName, Object propertyValue, JSONObject object, boolean opt) throws JSONException 属性放入消息体,opt确定调用存储函数,如果为true则为key/valu有为空的则不存储,为false则报异常。

 public int getMaximumPayloadSize()获取消息体最大长度,需要子类实现。

 public Payload asSimulationOnly() 获取仿真模式的消息体,不明白啥意思,因为里面就修改了一个失效时间,由一天设置为10天+。哪位知道要告诉我哈,不胜感激!

别问我字典是什么,在下面!

常用的推送消息体实现:

public class PushNotificationPayload extends Payload

看好了,这个是类,是消息体的子类,该子类用于最普通的手机推送,手机上新闻推送,qq推送,基本上就是用的这个!

这个类重写了消息体长度,非空消息判断方法,构造方法就不说了。

下面是子类自己的方法

public static PushNotificationPayload alert(String message)
public static PushNotificationPayload badge(int badge) 
public static PushNotificationPayload sound(String sound)

分别创建有弹出提示语,未读消息数量,提示声音的消息体。

着这里解释下:alert就是手机收到推送的时候顶部显示的信息,比如说你有一条新消息,sound表示提示声音是什么,badge表示app图标上显示的未读消息数量,字典表示隐藏函数,比如新消息的id。

public static PushNotificationPayload combined(String message, int badge, String sound)该方法表示创建三个元素都有的消息体。

public static PushNotificationPayload test() 创建一个空的消息体,设置检测值为1,

public static PushNotificationPayload complex(),返回一个空消息体

public static PushNotificationPayload fromJSON(String rawJSON) throws JSONException 根据json字符串返回消息体
 public void addBadge(int badge) throws JSONException ;
 public void addSound(String sound) throws JSONException ;
 public void addAlert(String alertMessage) throws JSONException;

分别设置消息体的未读消息数量,提示声音,提示信息。

 private JSONObject getOrAddCustomAlert() throws JSONException;返回一个自定义消息体提示属性的对象
 private <T> T getCompatibleProperty(String propertyName, Class<T> expectedClass, String exceptionMessage) throws JSONException 
 private <T> T getCompatibleProperty(String propertyName, Class<T> expectedClass, String exceptionMessage, JSONObject dictionary) throws JSONException 
 public void addCustomAlertBody(String body) throws JSONException 将提示语放入消息体。
 public void addCustomAlertActionLocKey(String actionLocKey) throws JSONException ,添加action-loc-key参数指定动作。
 public void addCustomAlertLocKey(String locKey) throws JSONException 添加loc-key参数指定动作
 public void addCustomAlertLocArgs(List args) throws JSONException添加loc-args参数指定动作

有两个方法就是解析属性值,没心情写了,他们两个被getOrAddCustomAlert调用。

其他还有一些实现,不常用不说了回家吃饭!

这篇关于iOS推送javaPNS源码解析二,消息体类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934713

相关文章

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心