消息推送方法、装置、设备及存储介质与流程

文档序号:17758215发布日期:2019-05-24 21:28阅读:205来源:国知局
消息推送方法、装置、设备及存储介质与流程

本发明涉及通信技术领域,尤其涉及一种消息推送方法、装置、设备及存储介质。



背景技术:

在向苹果设备推送消息时,一般采用socket连接进行推送,由于苹果推送通知服务apns的机制问题,对于发送失败的设备(如设备卸载了应用程序app或更新了操作系统等),apns服务器会主动切断连接,而消息推送设备在发现连接切断之前还会继续向其它苹果设备推送消息,但由于连接已经切断了,从而导致漏发问题的发生。



技术实现要素:

本发明提供一种消息推送方法、装置、设备及存储介质,旨在解决由于apns服务器的服务机制而导致的消息漏发的问题。

为实现上述目的,本发明提供一种消息推送方法,所述方法应用于消息推送设备,所述方法包括:

将待推送消息按预设顺序推送至苹果推送通知服务apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;

当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;

基于所述历史索引和所述当前索引获取漏发消息;

标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。

优选地,所述将待推送消息按预设顺序推送至apns服务器的步骤之前还包括:

当接收到向所述apns服务器推送消息的任务时,与所述apns服务器通过套接字socket建立连接;

初始化所述连接,为所述连接设置一个对应的存取模型;

将所述待推送消息存入所述存取模型。

优选地,所述将所述待推送消息存入所述存取模型的步骤之前还包括:

判断所述存取模型的连接是否可用;

若所述存取模型的连接可用,则进一步地判断所述存取模型的存储空间是否大于或等于阈值;

若所述存取模型的存储空间大于或等于所述阈值,则执行步骤:将所述待推送消息存入所述存取模型。

优选地,所述将待推送消息按预设顺序推送至apns服务器的步骤包括:

为所述待推送消息中的所有消息设置编号形成消息队列,将所述编号作为所述待推送消息的推送顺序;

基于所述推送顺序,通过所述存取模型对应的连接将所述待推送消息推送至所述apns服务器。

优选地,所述在推送过程中不断更新所述待推送消息的当前索引的步骤包括:

在推送过程中,根据推送进度为所述待推送消息设置索引,并将所述索引移动至已推送消息与未推送消息之间,将最新的索引标记为所述当前索引。

优选地,所述基于所述历史索引和所述当前索引获取漏发消息的步骤包括:

从所述待推送消息中获取所述历史索引和所述当前索引之间的多条第一消息;

从所述多条第一消息中去除与所述历史索引对应的失败消息,则获得多条第二消息,并将所述多条第二消息标记为漏发消息。

优选地,所述将待推送消息按预设顺序推送至apns服务器的步骤之后还包括:

若在预设时间内未接收到所述apns服务器返回的回执,则删除所述存取模型中的所述待推送消息。

此外,本发明实施例还提供一种消息推送装置,所述消息推送装置包括:

第一推送模块,用于将待推送消息按预设顺序推送至apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;

接收模块,用于当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;

获取模块,用于基于所述历史索引和所述当前索引获取漏发消息;

第二推送模块,用于标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。

此外,本发明实施例还提供一种消息推送设备,所述消息推送设备包括处理器,存储器以及存储在所述存储器中的消息推送程序,所述消息推送程序被所述处理器运行时,实现如上所述的消息推送方法的步骤。

此外,本发明实施例还提供一种计算机存储介质,所述计算机存储介质上存储有消息推送程序,所述消息推送程序被处理器运行时实现如上所述消息推送方法的步骤。

相比现有技术,本发明提供一种消息推送方法、装置、设备及存储介质,将待推送消息按预设顺序推送至apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;基于所述历史索引和所述当前索引获取漏发消息;标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。本发明在开发消息推送的研发框架中,设置相关步骤对漏发的消息进行重新推送,解决了由于apns服务器的服务机制而导致的消息漏发的问题。

附图说明

图1是本发明各实施例涉及的消息推送设备的硬件结构示意图;

图2是本发明消息推送方法第一实施例的流程示意图;

图3是本发明消息推送方法第二实施例的流程示意图;

图4是本发明消息推送装置第一实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例主要涉及的消息推送设备是指能够实现网络连接的网络连接设备,所述消息推送设备可以是服务器、云平台等。所述消息推送设备与应用程序对应,用于接收应用程序服务器发送的待推送消息,然后通过预先建立的socket连接将所述待推送消息推送至苹果推送通知服务(applepushnotificationservice,apns)服务器。

参照图1,图1是本发明各实施例涉及的消息推送设备的硬件结构示意图。本发明实施例中,消息推送设备可以包括处理器1001(例如中央处理器centralprocessingunit、cpu),通信总线1002,输入端口1003,输出端口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信;输入端口1003用于数据输入;输出端口1004用于数据输出,存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器,存储器1005可选的还可以是独立于前述处理器1001的存储装置。本领域技术人员可以理解,图1中示出的硬件结构并不构成对本发明的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

继续参照图1,图1中作为一种可读存储介质的存储器1005可以包括操作系统、网络通信模块、应用程序模块以及消息推送程序。在图1中,网络通信模块主要用于连接服务器,与服务器进行数据通信;而处理器1001可以调用存储器1005中存储的消息推送程序,并执行本发明实施例提供的消息推送方法。

本发明实施例提供了一种消息推送方法。

参照图2,图2是本发明消息推送方法第一实施例的流程示意图。

本实施例中,所述消息推送方法应用于消息推送设备,所述方法包括:

步骤s101,将待推送消息按预设顺序推送至apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;

可以理解地,所述待推送消息包括对应的大量消息,所述待推送消息中的每一条消息都包括消息内容及对应的设备标识devicetocken,由于所述待推送消息中的每一条消息的消息内容可以相同也可以不相同;对于相同的消息内容其对应的devicetocken不同,以避免向同一个苹果设备发送重复的消息;而同一个devicetocken可以对应具有不同的消息内容的多个消息。本实施例中,所述苹果设备是指苹果公司的移动操作系统ios对应的设备,包括手机、ipad、ipodtouch等。

其中,所述devicetocken是指所述待推送消息的苹果设备的一个标识符,也即app在设备上的标识符,可以理解的,每个app在每一个不同的苹果设备上都有着不同的devicetocken。当所述苹果设备安装app并注册后,通过安全套接层ssl与apns服务器建立ssl连接,所述apns服务器通过所述ssl连接向所述苹果设备返回devicetocken。当所述苹果设备更新系统后,会重新与所述apns服务器建立ssl连接,获得新的devicetocken。所述apns服务器根据所述devicetocken区别不同的设备。

本实施例中,所述消息推送设备为所述待推送消息中的所有消息设置编号形成消息队列,将所述编号作为所述待推送消息的推送顺序;例如若所述待推送消息中包括100条消息,则将所述待推送消息用1-100进行编号,每条消息获得对应的编号,获得编号后的待推送消息按编号顺序形成消息队列,并把所述编号作为推送顺序。

进一步地,基于所述推送顺序,通过所述存取模型对应的连接将所述待推送消息推送至所述apns服务器。具体地,所述消息推送设备基于所述推送顺序,依次将所述待推送消息通过所述存取模型对应的连接推送至所述apns服务器。所述apns服务器接收到所述待推送消息后,获取所述待推送消息中的devicetocken,从已注册的苹果设备列表中获取与所述devicetocken对应的苹果设备,并将所述待推送消息发送至与所述devicetocken对应的苹果设备。

本实施例中,在推送过程中,根据推送进度为所述待推送消息设置索引,并将所述索引移动至已推送消息与未推送消息之间,将最新的索引标记为所述当前索引。具体地,首先将所述索引设置在所述消息队列的第一个消息,此时所述索引设为0,在所述设置了编号的待推送消息,也即所述消息队列,进行推送的过程,不断移动所述索引,并且更新所述索引,更新方式为每推送一条消息则将所述索引+1。例如,若编号1的消息推送之后,则将所述索引设置在编号1和编号2的消息之间,此时索引为0+1,也即1;同理,若编号50的消息推送之后,则将所述索引设置在编号50和编号51的消息之间,此时索引为50。在所述编号50的消息推送之后,将索引50标记为当前索引,并将索引50之前的索引均标记为历史索引。

步骤s102,当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;

由于apns服务器机制的问题,在向苹果设备推送消息时,一般采用socket连接进行推送,由于apns的机制问题,对于发送失败的苹果设备(如设备卸载了应用程序app或更新了操作系统等),apns服务器会主动切断连接,并向所述消息推送设备返回回执。但是由于现在消息推送速度较快,甚至每分钟能推送百万条消息。但是所述消息推送设备在接收到所述回执之前未能发现连接已切断,并且在发现连接切断之前还会继续向其它苹果设备推送消息,但由于连接已经切断了,从而在所述apns服务器切断连接并返回回执与所述消息推送设备接收回执并发现所述连接切断的时间间隙内,所述apns服务器无法将所述时间间隙内所述消息推送设备推送的待推送消息发送至对应的苹果设备,因而所述时间间隙内所述消息推送设备推送的待推送消息会被漏发。

本实施例中,当所述消息推送设备当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引。一般地,所述回执包括消息内容和devicetocken,因此,所述消息推送设备可以根据所述回执,获取所述回执对应的消息以及所述消息对应的历史索引。

步骤s103,基于所述历史索引和所述当前索引获取漏发消息;

可以理解的,所述待推送消息中未推送至所述apns服务器的消息是未推送消息;所述回执对应的消息之前的消息为成功发送至对应苹果设备的消息;故需要获取所述未推送消息与所述已推送消息之间的漏发消息。

本实施例中,基于所述历史索引和所述当前索引获取漏发消息。具体地,首先,从所述待推送消息中获取所述历史索引和所述当前索引之间的多条第一消息;例如若所述回执对应的历史索引是索引30,所述历史索引30位于编号30与编号31的消息之间,所述当前索引是索引60,所述当前索引60位于编号60与编号61的消息之间,则将编号30与编号60之间的消息标记为第一消息。然后,从所述多条第一消息中去除与所述历史索引对应的失败消息,则获得多条第二消息,并将所述多条第二消息标记为漏发消息。具体地,将所述历史索引对应的消息标记为失败消息,并且从所述第一消息中去除所述失败消息,获得对应的多条第二消息,所述多条第二消息即为漏发消息。例如。本例中,由于回执对应的消息是编号30的消息,故去除所述编号30的消息,将编号31与编号60之间的消息标记为第二消息。

一般地,发送失败是由于所述失败消息对应设备的devicetocken失效,故不能再向所述失败消息对应的设备发送消息,因而需要去除所述失败消息对应的devicetocken。本实施例中,将所述失败消息存入预先设置的失败消息数据库中,并且从苹果设备devicetocken列表中去除所述失败消息对应的devicetocken,以提高消息推送的成功率。

步骤s104,标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。

本实施例中,标记所述漏发消息,并在重新与所述apns服务器建立socket连接后,再次将所述漏发消息和未推送消息推送至所述apns服务器,由所述apns服务器将所述漏发消息和未推送消息发送至对应的苹果设备。可以理解地,所述漏发消息和未推送消息是在重新建立socket连接后,存入重新设置的存取模型;或者存入其它未断开连接的存取模型中。

进一步地,所述步骤s101:将待推送消息按预设顺序推送至apns服务器的步骤之后还包括:

若在预设时间内未接收到所述apns服务器返回的回执,则删除所述存取模型中的所述待推送消息。

本实施例中,若在预设时间内未收到所述apns服务器返回的回执,则判定所述待推送消息全部推送成功。所述预设时间可以设为2s、3s、5s等。所述消息推送设备在将所述待推送消息全部推送至所述apns设备之后,弱智预设时间后未接收到所述apns服务器返回的回执,则删除所述存取模型中的所述待推送消息,以节约存储空间。

本实施例通过上述方案,将待推送消息按预设顺序推送至apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;基于所述历史索引和所述当前索引获取漏发消息;标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。由此,在开发消息推送的研发框架中,设置相关步骤对漏发的消息进行重新推送,解决了由于apns服务器的服务机制而导致的消息漏发的问题。

如图3所示,本发明第二实施例提出一种消息推送方法,基于上述图2所示的第一实施例,所述将待推送消息存入预先设置的存取模型的步骤之前还包括:

步骤s100,当接收到向所述apns服务器推送消息的任务时,与所述apns服务器通过套接字socket建立连接;

本实施例中,接收到向所述apns服务器推送消息的任务时,与所述apns服务器通过套接字socket建立连接。具体地,所述消息推送设备调用connect函数,触发连接请求,向所述anps服务器发送同步序列编号(synchronizesequencenumbers,syn)包,此时所述connect进入阻塞状态。所述apns服务器监听所述连接请求后,也即接收到所述syn包,则确认所述syn包生成确认(acknowledge,ack)包并调用accept函数向所述消息推送设备发送syn&ack包,此时所述accept函数进入阻塞状态;所述消息推送设备接收到所述syn&ack包后,返回所述connect,并对所述syn进行确认后,向所述apns服务器发送ack确认包。所述apns服务器接收到所述ack确认包后返回accept状态,由此建立了完整的socket连接。

步骤s1001,初始化所述连接,为所述连接设置一个对应的存取模型。

本实施例中,所述消息推送设备对所述连接进行初始化,为所述连接设置一个对应的存取模型。所述存取模型具有对应的socket连接和预设的存储空间。

可以理解地,所述消息推送设备可以与所述apns服务器建立n个连接,其中n为大于或等于1的整数。并为所述n个连接分别设置对应的存取模型。所述n个连接相互不干扰,可以并行运行,分别推送不同的待推送消息。

步骤s1002,将所述待推送消息存入所述存取模型;

本实施例中,当所述消息推送设备接收到推送消息的指令时,接收所述待推送消息,并将所述待推送消息存入所述存取模型,所述存取模型具有一定的存储空间,用于临时存储所述待推送消息。

进一步地,在所述将待推送消息存入预先设置的存取模型的步骤之前还包括:判断所述存取模型的连接是否可用;若所述存取模型的连接可用,则进一步地判断所述存取模型的存储空间是否大于阈值;若所述存取模型的存储空间大于所述阈值,则执行步骤:将待推送消息存入预先设置的存取模型。具体地,所述消息推送设备需要预先判断所述存取模型的连接是否可用,若所述连接处于正常状态能用于数据传输,则判定所述存取模型的连接可用;若所述存取模型的连接可用,则进一步地判断所述存取模型的存储空间是否大于或等于阈值,所述阈值可以预先设定,所述阈值设定为所述待推送消息的数据包大小,若所述存取模型的存储空间大于或等于所述阈值,则执行步骤:将待推送消息存入预先设置的存取模型。可以理解地,若所述连接不可用,则重新与所述apns服务器建立连接。若述存取模型的存储空间小于所述阈值,则将所述待推送消息拆分成若干个子消息后,存入不同的存取模型后再推送至所述apns服务器;或者重新与所述apns服务器建立连接,并设置存储空间大于或等于所述阈值的存取模型。

本实施例通过上述方案,当接收到向所述apns服务器推送消息的任务时,与所述apns服务器通过套接字socket建立连接;初始化所述连接,为所述连接设置一个对应的存取模型。由此,解决了由于apns服务器的服务机制而导致的消息漏发的问题。

此外,本实施例还提供一种消息推送装置。参照图4,图4为本发明消息推送装置第一实施例的功能模块示意图。

本发明实施例涉及的消息推送装置为虚拟装置,存储于图1所示的消息推送设备的存储器1005中,用于实现消息推送设备的所有功能,用于将待推送消息按预设顺序推送至apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;用于当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;用于基于所述历史索引和所述当前索引获取漏发消息;用于标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。

具体地,本实施例中,所述消息推送装置包括:

第一推送模块10,用于将待推送消息按预设顺序推送至apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;

接收模块20,用于当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;

获取模块30,用于基于所述历史索引和所述当前索引获取漏发消息;

第二推送模块40,用于标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。

进一步地,所述存入模块还用于:

当接收到向所述apns服务器推送消息的任务时,与所述apns服务器通过套接字socket建立连接;

初始化所述连接,为所述连接设置一个对应的存取模型;

将所述待推送消息存入所述存取模型。

进一步地,所述存入模块还用于:

判断所述存取模型的连接是否可用;

若所述存取模型的连接可用,则进一步地判断所述存取模型的存储空间是否大于或等于阈值;

若所述存取模型的存储空间大于或等于所述阈值,则执行步骤:将所述待推送消息存入所述存取模型。

进一步地,所述第一推送模块还用于:

为所述待推送消息中的所有消息设置编号形成消息队列,将所述编号作为所述待推送消息的推送顺序;

基于所述推送顺序,通过所述存取模型对应的连接将所述待推送消息推送至所述apns服务器。

进一步地,所述第一推送模块还用于:

在推送过程中,根据推送进度为所述待推送消息设置索引,并将所述索引移动至已推送消息与未推送消息之间,将最新的索引标记为所述当前索引。

进一步地,所述第一推送模块还用于:

从所述待推送消息中获取所述历史索引和所述当前索引之间的多条第一消息;

从所述多条第一消息中去除与所述历史索引对应的失败消息,则获得多条第二消息,并将所述多条第二消息标记为漏发消息。

进一步地,所述获取模块还用于:

若在预设时间内未接收到所述apns服务器返回的回执,则删除所述存取模型中的所述待推送消息。

此外,本发明还提供一种计算机存储介质,所述计算机存储介质上存储有消息推送程序,所述消息推送程序被处理器运行时实现如上所述消息推送方法的步骤,在此不再赘述。

相比现有技术,本发明提出的一种消息推送方法、装置、设备及存储介质,该方法包括:将待推送消息按预设顺序推送至apns服务器,以供所述apns服务器将所述待推送消息发送至相应的苹果设备,并在推送过程中不断更新所述待推送消息的当前索引;当接收到所述apns服务器返回的回执时,获取所述回执对应的历史索引;基于所述历史索引和所述当前索引获取漏发消息;标记所述漏发消息,并将所述漏发消息再次推送至所述apns服务器。本发明在开发消息推送的研发框架中,设置相关步骤对漏发的消息进行重新推送,解决了由于apns服务器的服务机制而导致的消息漏发的问题。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1