消息推送方法及装置
技术领域
本发明涉及移动通信技术领域,具体而言,涉及一种消息推送方法及装置。
背景技术
消息推送是一种通过一定的技术标准或协议,通过服务器定期将用户需要的信息传送到用户手机上的技术。可根据用户的兴趣过滤定向推送,从而提高用户对应用使用及体验度。目前由于安卓***碎片化严重,以及国内手机厂商对安卓***定制化的修改,导致安卓***上消息推送到达率较低。各大推送方案,如友盟推送、个推推送、小米推送以及华为推送等都不能提供很好的到达率。小米推送在小米MIUI***上有很好的到达率,但在其他手机上到达率较低。华为推送在华为EMUI***上有很好的到达率,但在其他手机上到达率也较低。因此,如何根据手机***类型进行分别推送以提高推送到达率的问题亟待解决。
发明内容
有鉴于此,本发明的目的在于提供一种消息推送方法及装置,以解决上述问题。
本发明较佳实施例提供一种消息推送方法,应用于分别与用户端和应用服务器通信连接的连接服务器,所述方法包括:
获取所述用户端的***的***参数属性,根据所述***参数属性判别所述用户端的***类型;
获取与所述***类型对应的消息推送方案;
根据所述消息推送方案为所述用户端注册相应的消息推送服务,并发送相应的注册标识符至所述用户端,以使所述用户端将所述注册标识符发送至所述应用服务器;
接收所述应用服务器根据所述注册标识符发送的推送消息,并转发至所述用户端。
进一步地,所述用户端为多个,各所述用户端的***类型不同,所述方法还包括:
获取多个所述用户端的多种***类型;
建立包括与所述多种***类型对应的多种***的***列表,所述***列表中的各所述***能够提供***级别的消息推送方案。
进一步地,所述根据所述***参数属性判别所述用户端的***类型的步骤,包括:
检测所述***参数属性中是否包含有特定参数,所述特定参数为特定***类型的***参数属性所包含的参数;
若包含有所述特定参数,则判定所述用户端的***类型为所述特定***类型;
若不包含所述特定参数,则判定所述用户端的***类型为预设的第三方***类型。
进一步地,所述获取与所述***类型对应的消息推送方案的步骤,包括:
查询所述***列表,判断是否存在与所述用户端的***类型对应的***;
若存在与所述用户端的***类型对应的***,则将与所述***类型对应的推送方案设置为消息推送方案;
若不存在与所述用户端的***类型对应的***,则将预设的第三方推送方案设置为消息推送方案。
进一步地,所述根据所述消息推送方案为所述用户端注册相应的消息推送服务的步骤,包括:
将与所述消息推送方案对应的推送服务的SDK包加入应用数据库,在应用内初始化所述推送服务;
继承推送消息接收器,配置推送权限;
注册消息推送服务及广播接收器,设置相应的注册标识符。
本发明另一较佳实施例提供一种消息推送装置,应用于分别与用户端和应用服务器通信连接的连接服务器,所述消息推送装置包括:
***类型判别模块,用于获取所述用户端的***的***参数属性,根据所述***参数属性判别所述用户端的***类型;
方案获取模块,用于获取与所述***类型对应的消息推送方案;
注册模块,用于根据所述消息推送方案为所述用户端注册相应的消息推送服务,并发送相应的注册标识符至所述用户端,以使所述用户端将所述注册标识符发送至所述应用服务器;
接收模块,用于接收所述应用服务器根据所述注册标识符发送的推送消息,并转发至所述用户端。
进一步地,所述用户端为多个,各所述用户端的***类型不同,所述消息推送装置还包括***类型获取模块以及列表建立模块;
所述***类型获取模块用于获取多个所述用户端的多种***类型;
所述列表建立模块用于建立包括与所述多种***类型对应的多种***的***列表,所述***列表中的各所述***能够提供***级别的消息推送方案。
进一步地,所述***类型判别模块包括检测子模块、第一判定子模块以及第二判定子模块;
所述检测子模块用于检测所述***参数属性中是否包含有特定参数,所述特定参数为特定***类型的***参数属性所包含的参数;
所述第一判定子模块用于在包含有所述特定参数时,判定所述用户端的***类型为所述特定***类型;
所述第二判定子模块用于在不包含所述特定参数时,判定所述用户端的***类型为预设的第三方***类型。
进一步地,所述方案获取模块包括判断子模块、第一设置子模块以及第二设置子模块;
所述判断子模块用于查询所述***列表,判断是否存在与所述用户端的***类型对应的***;
所述第一设置子模块用于在存在与所述用户端的***类型对应的***时,将与所述***类型对应的推送方案设置为消息推送方案;
所述第二设置子模块用于在不存在与所述用户端的***类型对应的***时,将预设的第三方推送方案设置为消息推送方案。
进一步地,所述注册模块包括初始化子模块、配置子模块以及注册子模块;
所述初始化子模块用于将与所述消息推送方案对应的推送服务的SDK包加入应用数据库,在应用内初始化所述推送服务;
所述配置子模块用于继承推送消息接收器,配置推送权限;
所述注册子模块用于注册消息推送服务及广播接收器,设置相应的注册标识符。
相比现有技术而言,本发明具有以下有益效果:
本发明实施例提供一种消息推送方法及装置,通过集成多类消息推送方案,根据用户端***类型进行分别推送。在不影响用户端耗电量和性能的同时,提高用户端的消息推送的到达率,从而提高应用曝光率,增加应用体验度。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明较佳实施例提供的消息推送方法的应用场景示意图。
图2为本发明较佳实施例提供的连接服务器的功能模块框图。
图3为本发明较佳实施例提供的一种应用于上述连接服务器的消息推送方法的流程图。
图4为图3中步骤101的子步骤的流程图。
图5为本发明较佳实施例提供的一种应用于上述连接服务器的消息推送方法的另一流程图。
图6为图3中步骤103的子步骤的流程图。
图7为图3中步骤105的子步骤的流程图。
图8为本发明较佳实施例提供的消息推送装置的功能模块框图。
图9为本发明较佳实施例提供的***类型判别模块的功能模块框图。
图10为本发明较佳实施例提供的方案获取模块的功能模块框图。
图11为本发明较佳实施例提供的注册模块的功能模块框图。
图标:100-连接服务器;110-消息推送装置;111-***类型判别模块;1111-检测子模块;1112-第一判定子模块;1113-第二判定子模块;112-方案获取模块;1121-判断子模块;1122-第一设置子模块;1123-第二设置子模块;113-注册模块;1131-初始化子模块;1132-配置子模块;1133-注册子模块;114-接收模块;115-***类型获取模块;116-列表建立模块;120-处理器;130-存储器;200-用户端;300-应用服务器。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,为本发明实施例提供的一种消息推送方法的应用场景示意图。该应用场景包括连接服务器100、用户端200以及应用服务器300。所述连接服务器100、所述应用服务器300和所述用户端200通过网络相互通信,以进行数据通信或交互。其中,所述用户端200可以为多个,所述用户端200可以是但不限于智能手机、移动上网设备、平板电脑等。在本实施例中,以下均以智能手机为例进行说明。
所述用户端200上可安装各类应用,所述应用服务器300为所述用户端200上所安装的应用的后台服务器,可向安装有相应应用的用户端200推送消息。所述连接服务器100是一个能够帮助开发者从所述应用服务器300发送数据到运行在用户端200上的应用的服务器。该服务器能够提供一个简单、轻量化的机制,使得应用服务器300可以通知用户端200的应用与应用服务器300建立直接的连接,来获取更新的应用或者用户的数据。连接服务器100可以处理消息队列的问题,并且可以将消息发送到目标用户端上运行的目标应用。
请参阅图2,为本发明较佳实施例提供的上述连接服务器100的功能模块框图。所述连接服务器100包括消息推送装置110、处理器120以及存储器130。其中,所述消息推送装置110与所述处理器120之间直接或间接的电性连接,以实现数据的传输或交互。所述消息推送装置110包括至少一个可以软件或固件的形式存储于所述存储器130中或固化在所述连接服务器100的操作***中的软件功能模块。所述处理器120用于执行所述存储器130中存储的可执行模块,例如所述消息推送装置110包括的软件功能模块或计算机程序。
请参阅图3,是本发明实施例提供的一种应用于上述连接服务器100的消息推送方法的流程图。所应说明的是,本发明提供的方法不以图3及以下所述的具体顺序为限制。下面将对图3中示出的各步骤进行详细说明。
步骤S101,获取所述用户端200的***的***参数属性,根据所述***参数属性判别所述用户端200的***类型。
以用户端200为手机,***为安卓***为例,安卓手机上的推送分为***级别推送和第三方推送方案。***级别推送方案手机厂商集成在手机***里,推送服务进程并不会因为应用退出或应用后台被回收而被杀死。只要应用注册过该推送,不论应用进程是否存在,推送服务进程都常驻在后台,应用服务器300推送过来的信息都能收到并展示。第三方推送方案的推送服务进程是依附于应用进程,无法成为***进程。当应用进程被杀死时,第三方推送方案的推送服务进程也同时被杀死了,应用服务器300推送过来的信息无法接收到,直到应用再次被打开后方能接收到推送消息。
实施中,需要判别出用户端200的***的***类型,以辨别其***是否能够提供***级别的消息推送方案。可选地,需要获取用户端200的***的***参数属性。例如,Android***的***类型参数存储在"build.prop"文件中,可通过调用Properties.load(new File(Environment.Get Root Directory(),"build.prop"))获取Properties属性。其中new File(Environment.Get Root Directory(),"build.prop")为打开根目录下的"build.prop"文件,并通过Properties.load()函数加载到Properties属性中。在获得用户端200的***的***参数属性后,可根据获得的参数属性以判别用户端200的***类型。
请参阅图4,步骤S101可以包括步骤S1011、步骤S1013以及步骤S1015三个子步骤。
步骤S1011,检测所述***参数属性中是否包含有特定参数,所述特定参数为特定***类型的***参数属性所包含的参数,若包含有所述特定参数,则执行下述步骤S1013,若不包含所述特定参数,则执行下述步骤S1015。
步骤S1013,判定所述用户端200的***类型为所述特定***类型。
步骤S1015,判定所述用户端200的***类型为预设的第三方***类型。
目前,由于Android***的源码开放,各手机厂商都有对Android手机进行修改定制。因此,可以根据各厂商提供的***类型获取方法以获取到手机***类型。可选地,检测获取到的***参数属性中是否包含有特定的参数以判断为何种***类型。例如,其中小米MIUI***的获取方式为判断***参数属性中是否包含有小米MIUI的特定参数。可选地,通过调用Properties.containsKey("ro.miui.ui.version.code")||Properties.containsKey("ro.m iui.ui.version.name")||Properties.containsKey("ro.miui.has_handy_mode_sf")||Properties.containsKey("ro.miui.has_real_blur")以检测***参数属性中是否包含小米MIUI的特定参数。若检测到相应的小米MIUI的特定参数,则可以判定该用户端200的***类型为小米MIUI***。
例如,华为EMUI***的获取方式为判断所获取到的***参数属性中是否包含有华为EMUI***的特定参数。可选地,通过调用Properties.contains Key("ro.build.version.emui")来检测***参数属性中是否包含有华为EMUI的特定参数。若检测到相应的华为EMUI的特定参数,则可以判定该用户端200的***类型为华为EMUI***。
若依次检测之后,均未检测到小米MIUI的特定参数或华为EMUI的特定参数,则将该用户端200的***类型判定为预设的第三方***类型。
可选地,在本实施例中,用户端200可以多个,并且用户端200的***类型亦可不同,如上所述,其***类型可以为小米MIUI***、华为EMUI***或者其他的第三方***。可选地,请参阅图5,所述消息推送方法还可以包括以下步骤:
步骤S201,获取多个所述用户端200的多种***类型。
步骤S203,建立包括与所述多种***类型对应的多种***的***列表,所述***列表中的各所述***能够提供***级别的消息推送方案。
通常只需要判断市场占有率较高的热门安卓手机***类型,获取到多种手机***的***类型。根据获取到的多种***类型建立包含有与该多种***类型对应的多种***的***列表romList。并且,该***列表romList中包含的各***能够提供***级别的消息推送方案,否则也没有***级别的消息推送方案可用。例如目前热门手机***主要有小米MIUI和华为EMUI,则romList为MIUI和EMUI。
步骤S103,获取与所述***类型对应的消息推送方案。
请参阅图6,步骤S103可以包括步骤S1031、步骤S1033以及步骤S1035。
步骤S1031,查询所述***列表,判断是否存在与所述用户端200的***类型对应的***,若存在与所述用户端200的***类型对应的***,则执行下述步骤S1033,若不存在与所述用户端200的***类型对应的***,则执行下述步骤S1035。
步骤S1033,将与所述***类型对应的推送方案设置为消息推送方案。
步骤S1035,将预设的第三方推送方案设置为消息推送方案。
可选地,根据判别出的用户端200的***类型,查找所建立的***列表romList。依次判断该用户端200的***是否是***列表romList中保存的***。如果该用户端200的***是所述***列表romList中的***,则将与该***类型对应的推送方案设置为该用户端200的消息推送方案。例如,依次判断是否是***列表romList中保存的小米MIUI***,是则返回TYPE_MIUI,并将该用户端200的推送方案设置为小米推送。若不是小米MIUI***,则再判断是否是华为EMUI***,是则返回TYPE_EMUI,并将该用户端200的推送方案设置为华为推送。
如果经过查找之后发现,该用户端200的***不是所述***列表romList中的***,则返回TYPE_DEFAULT,并将预设的第三方推送方案设置为该用户端200的消息推送方案。在本实施例中,预设的第三方推送方案为友盟推送方案。
步骤S105,根据所述消息推送方案为所述用户端200注册相应的消息推送服务,并发送相应的注册标识符至所述用户端200,以使所述用户端200将所述注册标识符发送至所述应用服务器300。
请参阅图7,步骤S105可以包括步骤S1051、步骤S1053以及步骤S1055三个子步骤。
步骤S1051,将与所述消息推送方案对应的推送服务的SDK包加入应用数据库,在应用内初始化所述推送服务。
步骤S1053,继承推送消息接收器,配置推送权限。
步骤S1055,注册消息推送服务及广播接收器,设置相应的注册标识符。
可选地,在每一用户端200上只需要注册一种消息推送服务,从而实现小米MIUI***手机上注册小米推送,华为EMUI***手机上注册华为推送。若手机不是***列表romList中的***则注册默认的第三方推送服务。例如,当判别出用户端200的***类型为小米TYPE_MIUI,则通过小米推送SDK(软件开发工具包)提供的接口进行注册。将小米推送服务的SDK(软件开发工具包)加入应用数据库,在应用内初始化小米推送服务。继承消息接收器Push Message Receiver,并复写相关推送消息的方法。在Android Manifest文件里面配置推送权限。注册消息推送服务Service和广播接收器Broadcast Receiver,并设置相应的注册标识符。可选地,可根据需要设置一系列的推送设置,例如用户名、标签等。其中,通过MiPushClient.registerPush()实现小米推送注册,通过实现onNotification MessageArrived()方法实现小米推送消息接收。
再例如,若判断出用户端200的***类型为TYPE_EMUI,则通过华为推送SDK提供的接口注册并接收推送消息。通过Push Manager.Request Token()实现华为推送注册,通过实现onPushMsg()方法实现华为推送消息接收。若手机类型是TYPE_DEFAULT则通过友盟推送SDK提供的接口注册并接收推送消息,通过Push Agent.register()实现友盟推送注册,通过实现deal With Notification Message()方法实现友盟推送消息接收。
由上述可知,本实施例中,根据手机的***类型注册相应的消息推送服务,从而使安装在热门手机上的应用可以注册到该手机的***推送服务中。由于***推送服务不会随着应用的退出或杀死而被回收,***推送服务一直在***进程中,从而保证了消息推送过来时,***推送服务可以接收到并显示,大大提高了热门手机上应用的消息推送到达率。而其他的普通手机则依然采用第三方推送方案,维持原有的消息推送到达率。并且,虽然集成了多种消息推送方案,但只会根据各用户端200的***类型以注册一种和***类型对应的推送服务,并不会注册多个推送服务,有效的优化了用户端200的内存使用和处理装置使用。
步骤S107,接收所述应用服务器300根据所述注册标识符发送的推送消息,并转发至所述用户端200。
应用服务器300根据注册标识符发送推送消息至连接服务器100,若用户端200当前不在线,则连接服务器100会将该推送消息进行存储。当用户端200上线时,连接服务器100将推送消息发送至用户端200。用户端200接收到推送消息后,***会使用适当的权限通过Intent broadcast把该推送消息广播到特定的应用,然后特定的应用会获得该推送消息,这样就唤醒了该应用。
请参阅图8,是本发明实施例提供的消息推送装置110的功能模块框图。所述消息推送装置110包括***类型判别模块111、方案获取模块112、注册模块113、接收模块114、***类型获取模块115以及列表建立模块116。
所述***类型判别模块111用于获取所述用户端200的***的***参数属性,根据所述***参数属性判别所述用户端200的***类型。具体地,该***类型判别模块111可用于执行图3中所示的步骤S101,具体的操作方法可参考步骤S101的详细描述。
所述方案获取模块112用于获取与所述***类型对应的消息推送方案。具体地,该方案获取模块112可用于执行图3中所示的步骤S103,具体的操作方法可参考步骤S103的详细描述。
所述注册模块113用于根据所述消息推送方案为所述用户端200注册相应的消息推送服务,并发送相应的注册标识符至所述用户端200,以使所述用户端200将所述注册标识符发送至所述应用服务器300。具体地,该注册模块113可用于执行图3中所示的步骤S105,具体的操作方法可参考步骤S105的详细描述。
所述接收模块114用于接收所述应用服务器300根据所述注册标识符发送的推送消息,并转发至所述用户端200。具体地,该接收模块114可用于执行图3中所示的步骤S107,具体的操作方法可参考步骤S107的详细描述。
所述***类型获取模块115用于获取多个所述用户端200的多种***类型。具体地,该***类型获取模块115可用于执行图5中所示的步骤S201,具体的操作方法可参考步骤S201的详细描述。
所述列表建立模块116用于建立包括与所述多种***类型对应的多种***的***列表,所述***列表中的各所述***能够提供***级别的消息推送方案。具体地,该列表建立模块116可用于执行图5中所示的步骤S203,具体的操作方法可参考步骤S203的详细描述。
可选地,请参阅图9,所述***类型判别模块111包括检测子模块1111、第一判定子模块1112以及第二判定子模块1113。
所述检测子模块1111用于检测所述***参数属性中是否包含有特定参数,所述特定参数为特定***类型的***参数属性所包含的参数。具体地,该检测子模块1111可用于执行图4中所示的步骤S1011,具体的操作方法可参考步骤S1011的详细描述。
所述第一判定子模块1112用于在包含有所述特定参数时,判定所述用户端200的***类型为所述特定***类型。具体地,该第一判定子模块1112可用于执行图4中所示的步骤S1013,具体的操作方法可参考步骤S1013的详细描述。
所述第二判定子模块1113用于在不包含所述特定参数时,判定所述用户端200的***类型为预设的第三方***类型。具体地,该第二判定子模块1113可用于执行图4中所示的步骤S1015,具体的操作方法可参考步骤S1015的详细描述。
可选地,请参阅图10,所述方案获取模块112包括判断子模块1121、第一设置子模块1122以及第二设置子模块1123。
所述判断子模块1121用于查询所述***列表,判断是否存在与所述用户端200的***类型对应的***。具体地,该判断子模块1121可用于执行图6中所示的步骤S1031,具体的操作方法可参考步骤S1031的详细描述。
所述第一设置子模块1122用于在存在与所述用户端200的***类型对应的***时,将与所述***类型对应的推送方案设置为消息推送方案。具体地,该第一设置子模块1122可用于执行图6中所示的步骤S1033,具体的操作方法可参考步骤S1033的详细描述。
所述第二设置子模块1123用于在不存在与所述用户端200的***类型对应的***时,将预设的第三方推送方案设置为消息推送方案。具体地,该第二设置子模块1123可用于执行图6中所示的步骤S1035,具体的操作方法可参考步骤S1035的详细描述。
可选地,请参阅图11,所述注册模块113包括初始化子模块1131、配置子模块1132以及注册子模块1133。
所述初始化子模块1131用于将与所述消息推送方案对应的推送服务的SDK包加入应用数据库,在应用内初始化所述推送服务。具体地,该初始化子模块1131可用于执行图7中所示的步骤S1051,具体的操作方法可参考步骤S1051的详细描述。
所述配置子模块1132用于继承推送消息接收器,配置推送权限。具体地,该配置子模块1132可用于执行图7中所示的步骤S1053,具体的操作方法可参考步骤S1053的详细描述。
所述注册子模块1133用于注册消息推送服务及广播接收器,设置相应的注册标识符。具体地,该注册子模块1133可用于执行图7中所示的步骤S1055,具体的操作方法可参考步骤S1055的详细描述。
综上所述,本发明实施例提供的一种消息推送方法及装置,通过集成多类消息推送方案,根据用户端200的***类型进行分别推送。在不影响用户端200耗电量和性能的同时,提高用户端200的消息推送的到达率,从而提高应用曝光率,增加应用体验度。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。