精华内容
下载资源
问答
  • APNS

    2019-09-24 00:50:34
    前言:现在第三方推送也很多 ,比如极光,融云,信鸽,其原理也是相同利用APNS推送机制 。 自己做推送的好处:,1.避免device token被第三方泄露,保护手机设备信息,2.第三方部分开始收费,一些免费的以后谁又知道...

    前言:现在第三方推送也很多 ,比如极光,融云,信鸽,其原理也是相同利用APNS推送机制 。

    自己做推送的好处:,1.避免device token被第三方泄露,保护手机设备信息,2.第三方部分开始收费,一些免费的以后谁又知道呢 ,不如自己创建,除了后台麻烦点,需要数据库来存储token相关字段(后台配置部分在最后更新添加),前端实现起来并不复杂 。 对于iOS8.0以后,原生推送实时性很好,也解决了第三方SDK占用存储顾虑,何乐不为呢!

     

    1.APNS的推送机制

    APNs(Apple Push Notification service)是远程推送功能的核心。

    deviceToken是设备的一个标识符,属于你这款APP装在你这个设备上的标识符,即每个APP在每一个不同的设备上都有着不同的deviceToekn,通过注册远程推送服务,APNs会返回给你的APP的deviceToken。

    首先我们看一下苹果官方给出的对ios推送机制的解释。如下图


     

    Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器。
    上图可以分为三个阶段:
    第一阶段:应用程序的服务器端把要发送的消息、目的iPhone的标识打包,发给APNS。
    第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
    第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。

    APNS推送通知的详细工作流程
    下面这张图是说明APNS推送通知的详细工作流程:


     

    根据图片我们可以概括一下:
    1、应用程序注册APNS消息推送。
    2、iOS从APNS Server获取devicetoken,应用程序接收device token。
    3、应用程序将device token发送给程序的PUSH服务端程序。
    4、服务端程序向APNS服务发送消息。
    5、APNS服务将消息发送给iPhone应用程序。

    准备工作
    首先要有一台苹果的设备,模拟器是不支持推送的,所以你需要一台iphone,ipod touch或者ipad。

    我们的客户端与苹果服务器之间和我们自己的服务器与苹果服务器之间都需要证书来进行链接。下面我们来开始进入证书的制作过程。

    转载于:https://www.cnblogs.com/developer-qin/p/9007453.html

    展开全文
  • apns

    2014-04-02 11:22:11
    在应用没有被运行的时候,只能通过 Apple Push Notification Service (APNs) 把数据发送到终端用户。对于互联网应用,正确高效的使用 APNs 显然非常重要。 JPush 为 iOS、Android 平台提供了一个统一推送消息的...

    在 iOS 平台上,大部分应用是不允许在后台运行并连接网络的。在应用没有被运行的时候,只能通过 Apple Push Notification Service (APNs) 把数据发送到终端用户。对于互联网应用,正确高效的使用 APNs 显然非常重要。

    JPush 为 iOS、Android 平台提供了一个统一推送消息的平台,而对 APNs 接口的封装管理是其中非常重要的一部分。本文分享一下 JPush 团队在使用 APNs 过程中碰到的问题以及我们的解决办法,以帮助应用开发者更好的理解 APNs。

    Apple 为应用开发者提供了一个 APNs  推送接口,称为 binary interface。

    Binary Interface V1

    最初版本的 binary interface 协议如下图,这里我们称之为 v1。

    Binary Interface V1



    v1 协议有几个问题:

    消息是否发送成功没有明确的反馈;
    如果一个消息发送失败,比如因为 deviceToken 不合法,APNs 会在大约 500ms 后断掉链接,在断链前发送的消息也会发送失败;
    经我们验证,feedback service 只有报告应用被卸载后,造成 deviceToken 失效的错误。而不会报告 deviceToken 不合法这种类型的推送错误。
    也就是说如果我们给一批用户发消息,只要有一个 deviceToken 不合法,将会有可能造成若干个用户收不到消息。并且没办法确认哪些 deviceToken 不合法,哪些 deviceToken 需要被重发。这应该是 APNs 丢消息的一个重要的原因。

    Binary Interface V2

    经过开发者不断的向 Apple 反馈这个问题,Apple 终于推出了一个新版本的 binary interface,称为 enhanced binary interface,我们称这为 v2。

    Binary Interface V2



    我们发现,在 v1 的基础上增加了两个字段:

    Identifier —— 一个任意的值,用于一条消息的识别。如果发送出现问题,错误应答里会把 Identifier 带回来。

    Expiry —— 离线消息超时的时间,如果为0或者小于0,APNs 不会保存这条消息。

    和 v1 一样,如果消息发送没有问题,APNs 不会有任何返回。和 v1 不同,并且很重要的改进是,如果发送出现错误,v2 会在断链之前返回一个错误应答,带上发消息时的 Identifier 和一个错误码。

    error-response packet



    根据这个错误应答,我们有机会找到是哪条消息发送出错,并确定哪些消息需要被重发。

    JPush 的解决办法

    为了确保每一位用户都能正确的收到消息,JPush 目前已经放弃 binary interface v1,完全采用 binary interface v2。(在我写这篇文章时,发现 Apple 已经把文档中对 binary interface v1 的描述移除,看来 Apple 也已经放弃 v1)

    在系统设计上,我们为每一个 APNs 链接维护 一个已发送列表,按发送的先后顺序排序。如果收到发送错误应答,根据返回的 Identifier 找到出错的消息,从该消息的下一条重新开始发送。

    发送队列



    总结

    为了持续提高 JPush 推送服务的质量,我们团队做了很多研究和尝试。APNs 管理模块我们最初用 C 语言实现了一个版本,后来觉得用 Erlang 实现可能更方便,所以又从头开始学习 Erlang 并重新用 Erlang 写了一个版本,目前使用效果良好。

    在 APNs 管理系统改造的过程中,包括 JPush 的其他模块,都大量的使用了开源的模块或者系统,为了回馈开源社区,我们准备把 APNs 管理系统的 Erlang 实现开放源码,敬请期待。

     

    展开全文
  • APNs

    2015-03-14 00:11:01
    APNS (Apple Push Notification Services) 苹果推送服务机制:(个人理解) 1. 手机注册通知 2.手机向相应的应用程序客服端发送消息。 3.应用程序的器获得手机的标示符,并向APNS(苹果推送服务器)发送相应的...
                     APNS (Apple Push Notification Services)
    

    苹果推送服务机制:(个人理解)
    1. 手机注册通知
    2.手机向相应的应用程序客服端发送消息。
    3.应用程序的器获得手机的标示符,并向APNS(苹果推送服务器)发送相应的消息(deviceToken)。
    4.苹果推送服务器根据从deviceToken内的Iphone标示符,在服务的内已经注册的IPhone中进行寻找,找到相应的Iphone产品,并根据IPhone的标示符,和APP的UDID向其发送通知。
    5.IPhone手机客户端接受到APNS发送过来的通知,通过App的UDID,找到相应的App并弹出通知。

    APNS 工作原理:
    1.苹果利用自己专门的推送服务器(APNs)收到我们应用程序服务器需要被推送的通知的消息,和指定的iOS设备上。
    2.APNs找到我们相应的iOS设备和App,iOS设备以通知或者声音的形式通知用户有新的消息。

    推送前提是装到我们应用的设备需要向APNs服务器注册,注册成功后APNs服务器返回给我们一个device_token,拿到token后我们将这个token发给我们自己的应用程序的服务器,当有消息需要被推送时,我们的应用程序服务器会将消息按照指定的格式打包,然后结合设备的device_token一并发送给APNs服务器,由于我们的应用和APNs是基于一个TCP的长连接,APNs将新的消息推送给我们的设备上,然后在设备屏幕上显示出新消息。

    推送的过程有如下步骤:
    1,首先,安装具有推送功能的应用,应用设备在APNs上面注册,注册成功后APNs会给我们返回一个device_token,当有网络的情况下,APNs会验证我们的device_token,连接成功后维持一个长连接。

    2, provider(我们自己的服务器)收到需啊哟推送的消息时,会结合被推送的设备的device_token一起打包发送给APNs服务器。

    3,APNs服务器将推送消息推送给device_token设备。

    4,设备收到消息后通知我们的应用程序,并显示和提示用户(声音,弹出框)

    其实真正完成APNs的是服务器,我们自己的应用服务器只是将需要推送的消息发送给苹果服务器,至于如何维护消息队列或如何保证消息被推送到指定的设备上,这些都都是由APNs给我们完成的。

     上面提到了将device_token和推送消息打包的过程,那么接下来就看看这个信息包结构:

    0  0 | 32   deviceToken(binary)  0 | 34  {“aps”:{“alert”:”You have mail"}}
    1. 第一部分命令提示符
    2.第二部分是我们的device_token的长度
    3.第三部分我们的device_token字符串
    4.第四部分推送消息体的长度
    5.最后一部分就是真正的消息内容


    有这么一种情况,当我们将应用从设备卸载后,推送的消息如何处理。
    我们知道,当我们将应用程序卸载后,我们就接收不到provider给我们推送的消息,但是如何让APNs和Provider都知道不去想这台卸载了应用的设备推送消息呢?针对这个问题,苹果已经帮我们处理解决了。那就是Feedback service, 他是APNs的一部分,APNs会持续的更新Feedback service列表,当我们的provider将消息发送给APNs推送到我们的设备时,如果这时如果这时设备无法将消息发送给这定的应用时,就会向APNs发送一条反馈消息。而这条消息会记录在feeddevice_token里面,按照这种方式Provider应该定时的区间车feedback_service中,然后删除在自己数据库里面记录的存在的device_token,从而不再向这些设备发送推送消息,连接feedback service的过程同样使用socket的方式,连接上后,直接接受由APNs传输给我们反馈列表,传输完后断开连接,然后根据这个最新的反馈列表更新我们自己的数据库。删除那些不需要推送消息的设备的device_token。从Feedback service读取数据结构。

    Feedback service 读取数据结构如下

    包含三个部分:

    第一部分:时间戳 , 记录我们设备失效后的时间信息
    第二部分:是device_token的长度,
    第三部分:是小的device_token  跟我们数据库进行对比后删除对应的device_token。下次不再向这些设备发送推送消息。







    展开全文
  • ApnsPHP_apnsphp_php_源码

    2021-10-03 03:29:12
    part of APNSPHP
  • the file LICENSE/p/apns-php/wiki/License * If you did not receive a copy of the license and are问题描述We use apns- ...

    the file LICENSE/p/apns-php/wiki/License * If you did not receive a copy of the license and are

    问题描述We use apns- php to implement push notification service and have faced this problem recentlyPush notifications work with our Development Profile and

    参考code/p/apns-php/作为修改 上面的项目实现很完全,其中包括了队列。服务端实现等,但是功能过于复杂。简单的使用觉得不顺手! 用了几个小时,参考其过

    在苹果的操作系统3.0以上,你可以享受到苹果的推送信息的服务,简称Apple Push Notification Service(APNS),及时获得各类有用的资讯。 现在,你可以使用PHP

    ApnsPHP Apple Push Notification & Feedback Provider.

    Development和Production两个版本对应的apnsdevice token是不同的 ,前者是develop的 服务器端, 如果是php的,那必须使用.pem的证书,如果是java的,那必须使用.p12的证

    Tag apns php PHP Client for Apple Push Notification Service By @sskaje Link https//sskaje/sskaje/apns 协议消息体

    php apns(Apple Push Notification Service) 搭建,懒得喘气的网易博客,记录代码资源以便日后忘了能查到, 希望各位高手能指正这流程中遗漏或不清楚的地方. 第

    展开全文
  • apns-cpp:apns-cpp-源码

    2021-05-02 09:59:33
    apns-cpp apns-cpp测试
  • Java Apns 服务器演示
  • #APNS 简单的APNS客户端类和APNS代理类 作者:sskaje( ) ## Files / class源文件夹/apns.inc.php APNS的初始化文件/apns.class.php APNS类/message.class.php APNS消息类/proxy.class.php APNS代理类/proxy_...
  • apns-push 简单的apns推送工具
  • apns-expiration:过期 A UNIX epoch date expressed in seconds (UTC). This header identifies the date when the notification is no longer valid and can >be discarded. If this value is nonzero, APNs ...
  • iOS APNS

    2021-10-15 15:10:06
    iOS APNS一、开启APNS二、代码实现三、Extension四、数据共享四、文件共享 一、开启APNS 1.创建证书 见证书创建 2.Xcode 设置 开启后台状态模式 二、代码实现 1.注册APNS 在需要实现的类中注册apns,非必需...
  • 烧瓶-apns 从烧瓶发送 APNS 消息。 这是使用flask 配置的简单扩展。 有关更多信息,请参阅
  • (它不对应于并行流,因为APNS服务器返回SETTINGS_MAX_CONCURRENT_STREAMS =1。) 概要 use Net::APNS::Simple; # With provider authentication tokens my $apns = Net::APNS::Simple->new( # enable if ...
  • apns:APNs(Apple推送通知服务)python客户端
  • 围裙 由node / io驱动的apns
  • JavaAPNS开源库apns4j.zip

    2019-07-16 04:50:52
    apns4j 是 Apple Push Notification Service 的 Java 实现!Maven:   <groupId>com.github.teaey</groupId>   <artifactId>apns4j   <version>1.0.1  示例代码:KeyStoreWraper keyStore = ...
  • Yii 2 Apns Gcm Yii 2将Apns和Gcm与常见方法(如send()和sendMulti() 安装 安装此扩展的首选方法是通过 。 无论运行 php composer.phar require --prefer-dist bryglen/yii2-apns-gcm "1.0.5" 或添加 "bryglen/yii...
  • apns-demo apns,通知服务器,heroku,node.js
  • tornado_apns, 在PyAPNS上,基于 Tornado的异步 APNS tornado_apns用于与苹果推送通知服务( APNs ) 进行 Tornado 异步编程的python 库示例用法import timefrom apns import APNs, Payloadfrom

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,581
精华内容 4,632
关键字:

apns