1、Push 的原理:
Push 的工作机制可以简单的概括为下图
![]()

图中,Provider 是指某个 iPhone 软件的 Push 服务器,这篇文章我将使用.net 作为 Provider。
APNS 是 Apple Push Notification Service(Apple Push 服务器)的缩写,是苹果的服务器。
上图可以分为三个阶段。
第一阶段:.net 应用程序把要发送的消息、目的 iPhone 的标识打包,发给 APNS。
第二阶段:APNS 在自身的已注册 Push 服务的 iPhone 列表中,查找有相应标识的 iPhone,并把消息发到 iPhone。
第三阶段:iPhone 把发来的消息传递给相应的应用程序, 并且按照设定弹出 Push 通知。
![]()

从上面的流程图中,可以看到一个能接收推送通知的 App,需要 3 个东西:
从上面的流程图中,可以看到一个能接收推送通知的 App,需要 3 个东西:
• App ID(唯一标识一个 App 程序)
• Provisioning Profile(App 程序的发布需要它,所以推送通知只能在真机上测试)
• Device Token(设备标识,这个是推送通知功能中特有的)
而能推送通知的服务器端则要 2 个东西:
• SSL Certificate
• Private Key
值得注意的是 APNS(ApplePush Notification Service) Server,完成发送 Device Token 和通知内容的功
能,而且这 2 个动作都是被动的,即第一个动作是由 App 发起的,第二个则是推送通知的服务器发起的。
2、创建 App ID
首先,登录到 http://developer.apple.com/devcenter/ios/index.action 购买 iPhone Develop Progra
m(iDP),如果已经购买登录进去后,页面右上角会看到如下图所示的页面:

点击第一项:iOS Provisioning Portal,然后会看到下面的页面:

点击进入 Certificates,然后看到如下所示的页面:
点击图中的 click here to download now,这会下载下来一个 AppleWWDRCA.cer 文件,这是调试以及发
布 iOS 应用必须的一个文件,这个文件只要下载一次就够了,即使你有多个 iDP,无论是调试程序,还是发布
程序,也只需要一个。如果已经下载过,那么就不用再下载这个了

点击“New App ID”按钮后,如下

Description 的内容可以任意,Bundle Identifier (App ID Suffix)必须和创建 App 工程时的 Bundle
Identifier,如下
点击“Submit”后,点击左侧导航中的“App IDs”,找到刚才新创建的 App ID,如下

点击“Configure”后,如下

勾选“Enable for Apple Push Notification service”,然后点击红色的“Configure”按钮,这里暂时只针对Development 取得证书。弹出一个对话框,如下

点击“Continue”后,要我们上传一个 CSR 文件,如下

下面使用钥匙串访问(KeychainAccess)应用程序创建上面需要的 CSR 文件(.certSigningRequest 文
件)
3、创建 CSR 文件
Keychain Access 位于/Applications/Utilities 目录中,打开它如下

然后弹出窗口如下:

点击继续:

点击存储:

然后,点击继续,这时就会在你的桌面上生成一个 CertificateSigningRequest.certSigningRequest 文件.

回到下面的网页中,上传刚才用 KeychainAccess 产生的 HelloRemoteNotification.certSigningRequest文件。

很快需要的证书就 OK 了,如下

点击“Continue”,然后点击“Done”。

发现上面的 Status 是 Enabled,而且多了“Download”按钮,点击它,下载了一个名为
“aps_development.cer”的文件。双击打开它
![]()

找到上图中“Keys”栏中名为“HelloRemoteNotification”的 private key(注意是 private key,而不是
public key),右击它,选择“Export “HelloRemoteNotification”...”,这样会导出一个 push.p12 文件
(需要输入密码),如下(目前共有 3 个文件)

下面开始用刚才产生的 push.p12 文件,创建 Profile provision 文件
接着,打开 Devices 那一项,出来如下图所示页面:

点击右上角的 Add Devices,出现下图所示页面:

给自己的设备取个名字,例如:iPhone,Device ID 就是设备的机身号(40 位),机身号可以通过 Xcode 的
window 菜单下的 Organizer 来获得。填写完了以后,点击 Submit 就可以了。
99 美元的帐号允许绑定 100 台移动设备。
4、创建 ProvisioningProfile 文件

在上图中,点击“New Profile”按钮后,如下

填写“Profile Name”;勾选“Certificate”;“App ID”选择正确的、之前我们创建的 ID,即
PushNotification;最后关联需要测试真机设备。点击“Submit”,如下

可以看到多了一个 Provisioning Profile 文件,点击“Download”按钮下载它,这时我们一共产生 4 个文件,
如下
![]()

双击“PushNotification.mobileprovision”文件,或把它拖入到 Xcode 中。

5、创建.pem 文件
• 将已有的.cer 文件转成.pem 文件
• 将已有的.p12 文件转成.pem 文件(需要输入密码)
• 最后将上面 2 个.pem 文件合并成 1 个.pem 文件(需要输入新密码)
cd 进入证书所在目录
把.cer 文件转换成.pem 文件:
$ openssl x509 -in aps_developer_identity.cer -inform der -out PushChatCert.pem
把私钥 Push.p12 文件转换成.pem 文件:
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
你首先需要为.p12 文件输入 passphrase 密码短语,这样 OpenSSL 可以读它。然后你需要键入一个新的密码短语来加密 PEM 文件。还是使用”pushchat”来作为 PEM 的密码短语。你需要选择一些更安全的密码短语。
注意:如果你没有键入一个 PEM passphrase,OpenSSL 将不会返回一个错误信息,但是产生的.pem 文件里面将不会含有私钥。
最后。把私钥和证书整合到一个.pem 文件里:
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
为了测试证书是否工作,执行下面的命令:
$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]’.
它将尝试发送一个规则的,不加密的连接到 APNS 服务。如果你看到上面的反馈,那说明你的 MAC 能够到
达APNS。按下 Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许 2195 端口。
然后再次连接,这次用我们的 SSL 证书和私钥来设置一个安全的连接:
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:
你会看到一个完整的输出,让你明白 OpenSSL 在后台做什么。如果连接是成功的,你可以键入一些字符。
当
你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL 将会给你一个错误消息,
ck.pem 文件就是我们需要得到 Push 服务器 连接 APNS 的文件。


- 大小: 9.8 KB

- 大小: 26.4 KB

- 大小: 9.5 KB

- 大小: 5.8 KB

- 大小: 61.1 KB

- 大小: 61.1 KB

- 大小: 31.8 KB

- 大小: 167.5 KB

- 大小: 118.5 KB

- 大小: 75.4 KB

- 大小: 197.7 KB

- 大小: 98.6 KB

- 大小: 109.6 KB

- 大小: 118.3 KB

- 大小: 38.5 KB

- 大小: 75.4 KB

- 大小: 57.2 KB

- 大小: 46.6 KB

- 大小: 46.6 KB

- 大小: 121.4 KB

- 大小: 28.6 KB

- 大小: 285.3 KB

- 大小: 258.4 KB

- 大小: 258.4 KB

- 大小: 93.5 KB

- 大小: 72.1 KB

- 大小: 39.5 KB

- 大小: 91.2 KB
分享到:
相关推荐
APNs(Apple Push Notification service)是苹果公司提供的推送服务,允许开发者将消息推送到用户的iOS设备上。本教程将重点讲解如何使用Java实现基于HTTP/2协议的APNS推送,并假设你已经对JDK 11及以上版本有一定的...
**苹果推送通知服务(Apple Push Notification service,简称APNS)** APNS是苹果公司提供的一项服务,用于向iOS、iPadOS、watchOS、tvOS以及macOS设备推送通知。通过APNS,应用开发者可以在他们的应用不在前台运行...
本文将深入探讨iOS APNS推送消息的实现,包括iPhone端和服务端的设置和交互。 首先,让我们从iPhone端开始。在iOS应用中集成APNs推送功能,开发者需要做以下几件事: 1. **获取设备Token**:当用户安装并首次运行...
在iOS应用开发中,苹果提供了Apple Push Notification Service (APNS) 来实现实时的消息推送功能,使得即使应用不在前台运行也能接收到服务器发送的通知。本文主要围绕如何使用.NET服务端来实现APNS消息推送,以及...
苹果推送服务(Apple Push Notification service,简称APNs)是苹果公司提供的一项服务,允许开发者将实时的通知信息推送到iOS、macOS以及watchOS等设备上。这个“APNS 苹果消息推送项目源码,运行即用”包含了实现...
而制作APNs(Apple Push Notification service)证书是实现iOS推送通知的前提。本知识点将详细介绍如何制作APNs证书,包括创建证书、备份、以及将证书转换为PEM格式的详细步骤。 首先,制作APNs证书需要准备以下几...
APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...
在iOS应用开发中,为了实现在用户...以上就是关于“iPhone推送通知服务器端Java实现”的详细说明,希望对你理解并实际操作APNs推送有所帮助。在实际开发中,记得遵循苹果的开发者指南,确保推送通知的合规性和有效性。
在这个“APNS push例子”中,我们将主要探讨如何实现一个简单的APNs推送流程。 首先,我们需要在苹果开发者中心创建一个认证文件,这包括生产环境和开发环境的两种证书。这两个证书分别用于在生产环境和测试环境下...
本文将深入探讨“iOS消息推送Demo”相关知识点,主要围绕苹果的Apple Push Notification service (APNS)展开,以及如何在客户端实现这一功能。 一、Apple Push Notification Service (APNS) APNS是苹果公司提供的一...
JavaPNS是Java平台上用于实现Apple Push Notification Service (APNs)的一个开源库,版本2.2提供了对iPhone设备推送通知的支持。APNs是苹果公司提供的一个服务,允许开发者向iOS、iPadOS以及watchOS设备发送远程通知...
苹果推送服务(Apple Push Notification service, APNS)是苹果公司提供的一项服务,用于向iOS设备推送消息。APNS推送机制主要包括三个参与方:应用程序的服务器端(Provider)、苹果的推送服务器(APNS)以及目标iOS...
本文将从多个角度对iPhone推送通知的功能原理进行深入解析,帮助读者更好地理解并运用这一技术。 #### 一、推送通知概述 **推送通知**是一种允许应用程序远程发送消息到用户的设备上的服务。这些消息可以是简单的...
iOS远程消息推送涉及到的技术细节丰富,其中主要包含APNS(Apple Push Notification Service),证书,以及消息传输过程。 1. APNS作用: APNS作为苹果提供的远程消息推送服务,是整个推送机制的核心服务器。它管理...
推送技术是基于APNs(Apple Push Notification Service)的,APNs是Apple提供的一种推送服务,允许应用程序在后台运行时接收来自服务器的消息。APNs使用了基于证书的身份验证机制来确保推送消息的安全性。 推送技术...
APNs (Apple Push Notification service) 是苹果公司提供的一项服务,用于向iOS、iPadOS、watchOS、tvOS以及macOS设备发送即时推送通知。在本文中,我们将深入探讨APNs的工作原理、iPhone上的实现以及如何利用源码...
Java消息推送给iPhone涉及到的是iOS应用开发中的远程通知服务,主要使用Apple的Push Notification Service (APNs)。在iOS设备上,当应用不在前台运行时,开发者可以通过APNs向设备发送消息,提醒用户有新的信息或者...
然而,在实现这一功能时,开发者需要理解iOS推送服务(APNs, Apple Push Notification service)的不同证书类型及其用途。本文将详细解释iOS推送服务中的测试证书和发布证书的区别,并提供一些关键步骤来帮助开发者...
从给定的文件信息来看,主要涉及的是iPhone推送消息的实现技术,具体是通过Apple Push Notification Service(APNs)进行的。以下是对标题、描述、标签以及部分内容中提及的知识点的详细解读: ### iPhone推送消息 ...