1、Push 的原理:
Push 的工作机制可以简单的概括为下图
![]()
![](http://dl.iteye.com/upload/attachment/0076/2418/22db8b88-5d5e-36ed-a75a-c87362591f81.jpeg)
图中,Provider 是指某个 iPhone 软件的 Push 服务器,这篇文章我将使用.net 作为 Provider。
APNS 是 Apple Push Notification Service(Apple Push 服务器)的缩写,是苹果的服务器。
上图可以分为三个阶段。
第一阶段:.net 应用程序把要发送的消息、目的 iPhone 的标识打包,发给 APNS。
第二阶段:APNS 在自身的已注册 Push 服务的 iPhone 列表中,查找有相应标识的 iPhone,并把消息发到 iPhone。
第三阶段:iPhone 把发来的消息传递给相应的应用程序, 并且按照设定弹出 Push 通知。
![]()
![](http://dl.iteye.com/upload/attachment/0076/2422/fe018586-ab47-34d9-863c-de65a04e271c.jpeg)
从上面的流程图中,可以看到一个能接收推送通知的 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),如果已经购买登录进去后,页面右上角会看到如下图所示的页面:
![](http://dl.iteye.com/upload/attachment/0076/2424/140c714c-42c6-3ca0-9c5f-55bd55292a04.jpeg)
点击第一项:iOS Provisioning Portal,然后会看到下面的页面:
![](http://dl.iteye.com/upload/attachment/0076/2426/269fa5ff-7e8f-3e5e-be57-11141baa5585.jpeg)
点击进入 Certificates,然后看到如下所示的页面:
点击图中的 click here to download now,这会下载下来一个 AppleWWDRCA.cer 文件,这是调试以及发
布 iOS 应用必须的一个文件,这个文件只要下载一次就够了,即使你有多个 iDP,无论是调试程序,还是发布
程序,也只需要一个。如果已经下载过,那么就不用再下载这个了
![](http://dl.iteye.com/upload/attachment/0076/2428/69856359-55c2-3d90-8553-cb99c246eb28.jpeg)
点击“New App ID”按钮后,如下
![](http://dl.iteye.com/upload/attachment/0076/2430/9d98bdbd-62c6-3be0-b3ff-d1dd26dcacf4.jpeg)
Description 的内容可以任意,Bundle Identifier (App ID Suffix)必须和创建 App 工程时的 Bundle
Identifier,如下
点击“Submit”后,点击左侧导航中的“App IDs”,找到刚才新创建的 App ID,如下
![](http://dl.iteye.com/upload/attachment/0076/2432/daf4c636-e19c-3667-af14-88cbb46ab4c3.png)
点击“Configure”后,如下
![](http://dl.iteye.com/upload/attachment/0076/2434/9a2b2914-ae46-3b2c-864f-b8235683be84.png)
勾选“Enable for Apple Push Notification service”,然后点击红色的“Configure”按钮,这里暂时只针对Development 取得证书。弹出一个对话框,如下
![](http://dl.iteye.com/upload/attachment/0076/2436/e8958af9-c4fd-351d-8ecb-55c8d8e5fd8f.png)
点击“Continue”后,要我们上传一个 CSR 文件,如下
![](http://dl.iteye.com/upload/attachment/0076/2438/0d0183b4-b603-3e06-ab20-b6f73c345ebb.png)
下面使用钥匙串访问(KeychainAccess)应用程序创建上面需要的 CSR 文件(.certSigningRequest 文
件)
3、创建 CSR 文件
Keychain Access 位于/Applications/Utilities 目录中,打开它如下
![](http://dl.iteye.com/upload/attachment/0076/2440/883bd09d-dd0d-3d96-b5fd-b418ea79cf2d.png)
然后弹出窗口如下:
![](http://dl.iteye.com/upload/attachment/0076/2443/11102ad2-ff6a-3aea-8f85-c02c1a8b4d72.png)
点击继续:
![](http://dl.iteye.com/upload/attachment/0076/2449/04a77b97-78ee-3a97-b0aa-ce3c2ee3656e.png)
点击存储:
![](http://dl.iteye.com/upload/attachment/0076/2449/04a77b97-78ee-3a97-b0aa-ce3c2ee3656e.png)
然后,点击继续,这时就会在你的桌面上生成一个 CertificateSigningRequest.certSigningRequest 文件.
![](http://dl.iteye.com/upload/attachment/0076/2451/314ba12c-9750-3e9d-b69b-36b955a98d3b.png)
回到下面的网页中,上传刚才用 KeychainAccess 产生的 HelloRemoteNotification.certSigningRequest文件。
![](http://dl.iteye.com/upload/attachment/0076/2453/ab29b72f-2abb-31b9-9c1f-da00f66f12f9.png)
很快需要的证书就 OK 了,如下
![](http://dl.iteye.com/upload/attachment/0076/2456/7799ef20-ad34-31d1-a6e6-83e91382e55c.png)
点击“Continue”,然后点击“Done”。
![](http://dl.iteye.com/upload/attachment/0076/2459/921aedf5-0592-389a-9b55-1ce2b87d6ae8.png)
发现上面的 Status 是 Enabled,而且多了“Download”按钮,点击它,下载了一个名为
“aps_development.cer”的文件。双击打开它
![]()
![](http://dl.iteye.com/upload/attachment/0076/2463/6a274ab2-ae69-3986-97c5-07b302f9c01e.png)
找到上图中“Keys”栏中名为“HelloRemoteNotification”的 private key(注意是 private key,而不是
public key),右击它,选择“Export “HelloRemoteNotification”...”,这样会导出一个 push.p12 文件
(需要输入密码),如下(目前共有 3 个文件)
![](http://dl.iteye.com/upload/attachment/0076/2465/d5c143d5-62b2-3c41-a427-2f995c5d6cff.png)
下面开始用刚才产生的 push.p12 文件,创建 Profile provision 文件
接着,打开 Devices 那一项,出来如下图所示页面:
![](http://dl.iteye.com/upload/attachment/0076/2467/0ca38b19-7c64-3734-81ba-b4eaaa961391.png)
点击右上角的 Add Devices,出现下图所示页面:
![](http://dl.iteye.com/upload/attachment/0076/2469/63c3e591-faef-3459-a727-ac413e5ef1f6.png)
给自己的设备取个名字,例如:iPhone,Device ID 就是设备的机身号(40 位),机身号可以通过 Xcode 的
window 菜单下的 Organizer 来获得。填写完了以后,点击 Submit 就可以了。
99 美元的帐号允许绑定 100 台移动设备。
4、创建 ProvisioningProfile 文件
![](http://dl.iteye.com/upload/attachment/0076/2471/01098915-c709-30d6-ba94-711a753bd996.png)
在上图中,点击“New Profile”按钮后,如下
![](http://dl.iteye.com/upload/attachment/0076/2473/e043e5a1-1a4e-350f-8c7b-1622fccc02d7.png)
填写“Profile Name”;勾选“Certificate”;“App ID”选择正确的、之前我们创建的 ID,即
PushNotification;最后关联需要测试真机设备。点击“Submit”,如下
![](http://dl.iteye.com/upload/attachment/0076/2475/d8888deb-5af8-32ea-a961-ffe944e83f5f.png)
可以看到多了一个 Provisioning Profile 文件,点击“Download”按钮下载它,这时我们一共产生 4 个文件,
如下
![]()
![](http://dl.iteye.com/upload/attachment/0076/2477/f1649cb2-6672-3209-b807-29b45b645184.png)
双击“PushNotification.mobileprovision”文件,或把它拖入到 Xcode 中。
![](http://dl.iteye.com/upload/attachment/0076/2479/541f2629-d1e2-3dc6-b701-6e6762fae905.png)
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 的文件。
![](http://dl.iteye.com/upload/attachment/0076/2409/595ab236-8764-370e-be8b-f1d06d06793f.jpeg)
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2418/22db8b88-5d5e-36ed-a75a-c87362591f81-thumb.jpeg)
- 大小: 9.8 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2422/fe018586-ab47-34d9-863c-de65a04e271c-thumb.jpeg)
- 大小: 26.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2424/140c714c-42c6-3ca0-9c5f-55bd55292a04-thumb.jpeg)
- 大小: 9.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2426/269fa5ff-7e8f-3e5e-be57-11141baa5585-thumb.jpeg)
- 大小: 5.8 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2428/69856359-55c2-3d90-8553-cb99c246eb28-thumb.jpeg)
- 大小: 61.1 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2430/9d98bdbd-62c6-3be0-b3ff-d1dd26dcacf4-thumb.jpeg)
- 大小: 61.1 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2432/daf4c636-e19c-3667-af14-88cbb46ab4c3-thumb.png)
- 大小: 31.8 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2434/9a2b2914-ae46-3b2c-864f-b8235683be84-thumb.png)
- 大小: 167.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2436/e8958af9-c4fd-351d-8ecb-55c8d8e5fd8f-thumb.png)
- 大小: 118.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2438/0d0183b4-b603-3e06-ab20-b6f73c345ebb-thumb.png)
- 大小: 75.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2440/883bd09d-dd0d-3d96-b5fd-b418ea79cf2d-thumb.png)
- 大小: 197.7 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2443/11102ad2-ff6a-3aea-8f85-c02c1a8b4d72-thumb.png)
- 大小: 98.6 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2447/68c013c9-22dc-338f-b253-c23cff3ac913-thumb.png)
- 大小: 109.6 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2449/04a77b97-78ee-3a97-b0aa-ce3c2ee3656e-thumb.png)
- 大小: 118.3 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2451/314ba12c-9750-3e9d-b69b-36b955a98d3b-thumb.png)
- 大小: 38.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2453/ab29b72f-2abb-31b9-9c1f-da00f66f12f9-thumb.png)
- 大小: 75.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2456/7799ef20-ad34-31d1-a6e6-83e91382e55c-thumb.png)
- 大小: 57.2 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2459/921aedf5-0592-389a-9b55-1ce2b87d6ae8-thumb.png)
- 大小: 46.6 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2461/35c92d9e-1004-3569-9647-19eac542a3eb-thumb.png)
- 大小: 46.6 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2463/6a274ab2-ae69-3986-97c5-07b302f9c01e-thumb.png)
- 大小: 121.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2465/d5c143d5-62b2-3c41-a427-2f995c5d6cff-thumb.png)
- 大小: 28.6 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2467/0ca38b19-7c64-3734-81ba-b4eaaa961391-thumb.png)
- 大小: 285.3 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2469/63c3e591-faef-3459-a727-ac413e5ef1f6-thumb.png)
- 大小: 258.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2471/01098915-c709-30d6-ba94-711a753bd996-thumb.png)
- 大小: 258.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2473/e043e5a1-1a4e-350f-8c7b-1622fccc02d7-thumb.png)
- 大小: 93.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2475/d8888deb-5af8-32ea-a961-ffe944e83f5f-thumb.png)
- 大小: 72.1 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2477/f1649cb2-6672-3209-b807-29b45b645184-thumb.png)
- 大小: 39.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0076/2479/541f2629-d1e2-3dc6-b701-6e6762fae905-thumb.png)
- 大小: 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推送服务中的测试证书和发布证书的区别,并提供一些关键步骤来帮助开发者...