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

相关文章

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

java导出pdf文件的详细实现方法

《java导出pdf文件的详细实现方法》:本文主要介绍java导出pdf文件的详细实现方法,包括制作模板、获取中文字体文件、实现后端服务以及前端发起请求并生成下载链接,需要的朋友可以参考下... 目录使用注意点包含内容1、制作pdf模板2、获取pdf导出中文需要的文件3、实现4、前端发起请求并生成下载链接使

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

什么是 Java 的 CyclicBarrier(代码示例)

《什么是Java的CyclicBarrier(代码示例)》CyclicBarrier是多线程协同的利器,适合需要多次同步的场景,本文通过代码示例讲解什么是Java的CyclicBarrier,感... 你的回答(口语化,面试场景)面试官:什么是 Java 的 CyclicBarrier?你:好的,我来举个例