广告咖,专注分享优质互联网运营推广资讯

ios是如何进行消息推送的

发表时间:2020-10-21 20:06

  与不依赖网络请求的本地消息推送不同,iOS系统方法可以直接调用。远程消息推送的实现涉及到用户设备、我们自己的服务端服务器和苹果的APNs服务之间的交互


  与Android系统中远程消息推送的实现不同,App本身需要通过后台服务与业务服务器保持长链接通信。iOS中的消息推送是通过操作系统与苹果,的APNs服务器直接交互实现的,App本身不需要与服务器保持连接。


  只要用户打开推送权限,我们的业务服务器就可以随时通过调用APNs服务向用户推送通知,不仅可以为开发者和用户提供安全稳定的推送服务,还可以节省系统资源消耗,提高系统流畅度和电池寿命。


  iOS客户端远程消息推送的实现可以分为以下几个过程:


  用户的iphone通过iOS的系统方法调用与苹果的APNs服务器通信,获取设备的deviceToken,设备的device   token是由APNs服务分配的,用来唯一标识不同设备上的不同应用,可以认为是在安装过程中由deviceID、bundleId等相关信息生成的。App、deviceToken的升级操作保持不变,卸载并重新安装App、还原并重新安装操作系统后,deviceToken会发生变化。


  苹果的APNs服务是基于设备令牌实现的,因此需要将设备的设备令牌发送到我们的业务服务器,以便后续的消息推送。一个设备可以登录多个用户,一个用户也可以登录多个设备。当我们需要向不同的用户推送不同的消息时,除了设备令牌之外,还需要保存用户的openid和设备令牌之间的映射关系。我们可以在用户登录成功后更新openid和deviceToken的映射关系,在用户注销后取消映射关系,只保存用户登录的最后一个设备的deviceToken,避免一个设备收到多个通知,一个用户在不同设备收到多个通知的情况。


消息推送


  当新闻App有事实热点新闻时,后台服务可以携带消息内容和deviceToken等。并向苹果的APNs服务发送消息推送请求。推送消息的实现是异步的,只要请求格式和设备令牌检查通过APNs服务,就不会报告错误,但用户可能仍然不会收到推送消息,因为网络异常或推送权限关闭。APNs服务向用户设备异步推送消息。当用户关机或网络无法正常接收推送消息时,接入点将保留每个设备令牌的最后一条推送消息,并在网络恢复后再次推送。


  1.获取设备设备令牌


  当应用程序启动时,我们可以通过UIApplication的registerForRemoteNotifications方法从苹果的APNS服务器请求设备令牌。


  如果请求成功,将执行DidRegisterForRemotiontificationSwitDeviceToken的回调方法。为了方便业务服务器的调用,我们通常将二进制devicetoken转换成十六进制字符串,然后存储。


  如果请求失败,还将使用特定的错误信息调用didfailtoregister   for   remotification   witherror方法。相关代码如下:


  2.在后台调用APNs推送


  服务端服务器在调用APNs服务时,首先要建立安全连接,对开发者身份进行认证,分为基于证书的认证和基于令牌的认证,常用的是基于证书的认证。


  推送证书分为开发环境证书和生产环境证书,分别对应不同的APNs推送接口。我们从苹果开发者平台或者第三方平台导出的推送证书一般都是p12和pem格式的文件。为了方便接口调用,我们可以使用以下命令将p12格式的文件转换成pem证书。


  基于证书建立TLS连接的过程如下图所示:


  提供商发起一个请求,要求建立与APNs服务器的顶级域名系统连接。


  APNs服务器返回其证书供业务端服务器验证。


  服务端服务器提供自己的推送证书供APNs服务器验证。


  APNs服务器验证服务端服务器提供的推送证书正确后,TLS连接已经建立,然后服务端服务器可以直接向APNs发送消息推送请求。


  在业务端和APNs之间建立请求的简单实现的PHP代码如下:


  通过证书与APNs建立安全连接后,业务端的服务器可以多次进行连续的消息推送操作,每次消息推送都必须指定deviceToken和Payload参数。load是一个json对象,用于配置iOS在接收远程消息推送时的呈现形式。aps参数包括alert、sound、badge和苹果,预设的其他参数,其中alert参数可以是字符串或字典类型,包括标题、正文和其他参数;徽章参数使用shaping设置App图标右上角显示的数字,徽章设置为0时不会显示角标;声音参数用于设置按压的声音。如果未传递此参数或传递了空字符串,推送将不会发出提示音。当设置为默认时,将使用系统默认的提示声音,或者可以设置为特定的音频文件名。音频文件要提前放在项目的捆绑目录中,时长不能超过30s。


  除了预置参数,我们还可以定制一些同级别aps的参数。这些参数也可以是字典类型,然后嵌套其他参数,比如我们在样例代码中自定义的userInfo对象。但一般推送消息的有效载荷不宜过大,应控制在4 K以内,建议只透明传输id、url等一些关键参数,具体内容由客户端接收推送后获取。


  以上有效载荷包括标题、字幕、内容、消息提示音、App角号等预置参数。以及开发者定义的gameID参数。用户点击推送消息后,它会自动从后台启动或唤醒应用程序。我们可以在系统的回调方法中获取用户自定义的参数,并根据gameID自动为用户打开游戏页面。


  3.消息推送调试工具


  在调试APNs接口时,我们可以使用一些优秀的推送调试工具来帮助我们验证有效载荷或证书的有效性。本文介绍了两种流行的开源软件,即国外的Knuff和国内开发者维护的smartPush。


  https://github.com/KnuffApp/Knuff


  智能推送:https://github.com/shaojiankui/SmartPush


  第六,应用推送消息的处理


  在iOS10中,UserNotifications框架为开发者提供了UnUser   Notification   Center   Delegate协议,开发者可以通过实现协议中的方法,在App收到推送消息,用户点击推送消息时,执行一些业务逻辑处理。无论是本地推送还是远程推送的消息,App的运行状态都可能处于以下三种状态:


  该应用程序正在前台运行。此时,用户正在使用该应用程序。收到推送消息时,默认情况下不会弹出消息提示框,会调用willPresentNotification回调方法。开发者可以从UNNotification对象获取推送消息的有效载荷内容,然后获取自定义参数,然后显示自定义弹出窗口,提示用户接收新消息;您也可以通过调用willPresentNotification方法中的completionHandler函数,直接在前台显示推送消息。当用户点击前台显示的推送消息时,也会执行didReceiveNotificationResponse回调方法。


  App在后台运行,当用户点击推送消息时,App会从后台唤醒,执行didReceiveNotificationResponse回调方法,开发者可以在其中获取负载,解析自定义参数,自动打开相应页面。


  App还没有启动,此时用户点击推送消息打开App,开发者可以从launchOptions获取本地或远程推送消息中的用户自定义参数,页面初始化完成后跳转相关页面。


  在iOS9中,UIApplication提供了以下三种消息推送的处理方法,分别是远程消息推送、远程静默推送和本地消息推送的回调处理方法。


  前两种回调方法可以用来处理App远程消息推送,使用时只会调用远程静默推送方法。当有效载荷包含参数content-available=1时,推送为无声推送,不会显示推送消息。后台挂起App时,会执行静默推送的回调方法,开发者有30s时间在回调方法中处理一些业务逻辑,处理后调用fetchCompletionHandler。


  UIApplication中的这三种方法在以下两种情况下调用:


  应用程序在前台运行时会得到通知;


  当应用程序在后台运行时,用户单击推送消息来调出应用程序。


  区别在于,前两种方法对应的是远程消息推送和点击触发响应的接收,而didReceiveLocalNotification用于本地消息推送。我们可以通过UIApplication的applicationState属性来判断应用是否在前台运行,然后实现:用户点击消息,调出后台App,打开相应页面;


  当用户在前台使用应用程序时,会显示一个用户定义的弹出窗口。


  七.结论


  首先介绍了消息推送相关的推送权限的工程配置和应用,然后介绍了本地和远程消息推送的不同使用场景和实现方法,最后介绍了App接收推送消息后的相关回调方法和处理逻辑。


  在实际的项目开发中,我们经常会选择比较成熟的第三方消息推送平台,比如腾讯云推送或者极光推送。这些平台提供相对完善的推送产品运营和数据统计服务,并通过接口和SDK阻断底层逻辑的实现。了解iOS消息推送的实现过程,也可以帮助我们更好的利用这些平台。


ABUIABAEGAAgma-A4gUoxJmmygIwoAE4oAE

广告咖,互联网广告运营资讯站

关于广告咖
     广告咖资讯站是一个为网站运营推广信息流广告优化爱好者分享优质信息、提供互联网运营课程的站点,同时也是一个为商家提供广告投放资质查询等便捷服务的平台。
     信息源于网络,用于大众,如有侵权,请及时与我们联系!广告咖,因广告而生,因您的关注更有价值!
客户服务
 
 

服务热线:18971576794

企业外站.png

广告服务


ABUIABAEGAAgq5Db-gUoy8rtkAYwZjgp.png