`
AnhuiOSS技术分享
  • 浏览: 34066 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

iPhone 消息推送(Push Notification)的实现-------搭建 APNS 环境

阅读更多

 

 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
分享到:
评论

相关推荐

    java实现给Iphone推送消息

    APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...

    iPhone的Push(推送通知)功能原理浅析

    APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,下文统一使用该缩写。 因 此,整个过程可以分为三个阶段,下面用大家常用的聊天客户端BeejiveIM来说明。(BeejiveIM是一款支持多账户登录的...

    iOS实现消息推送及原理分析

    2、APNS:Apple Push Notification Service[苹果消息推送服务器]; 3、iPhone:用来接收APNS下发下来的消息; 4、Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制定的一个客户端 app[消息...

    macos-push-tester:本地Mac应用程序,可轻松将Apple APNs推送消息发送到iOS应用程序

    macOS Pusher App允许您通过APNS(Apple Push Notification Service)发送推送通知,并在设备上接收它们。 它还可以从同一wifi网络上的任何iPhone获取设备令牌。 注意:此应用是由SSED SDK团队内部使用而创建的。 ...

    iOS-Push:iOS多媒体推送总结与Demo

    创建项目,开启远程推送功能在Cababilities中打开Push Notification开关2. 编码注册通知#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0#import <UserNotifications>#endif- (BOOL)application:...

    iOS消息推送原理及具体实现代码

    2、APNS:Apple Push Notification Service[苹果消息推送服务器]; 3、iPhone:用来接收APNS下发下来的消息; 4、Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制定的一个客户端app[消息的...

    移动消息推送库 PushSharp.zip

    PushSharp 实现了服务器端向移动客户端推送消息的库,支持 iOS (iPhone/iPad APNS), Android (C2DM and GCM - Google Cloud Message), Windows Phone, 和 Windows 8 devices! 示例代码://Create our push ...

    ApnsPHP:ApnsPHP:苹果推送通知和反馈提供程序

    ApnsPHP:Apple推送通知和反馈提供程序 全套开放源代码PHP类,可与iPhone,iPad和iPod Touch的Apple Push Notification服务交互。消息2016年6月1日,首先实现的HTTP / 2协议的,请下载(请检查您是否卷曲与HTTP2支持...

    iOS开发之(APNS)远程推送实现代码 附证书与真机调试

    顾名思义,就是从远程服务器推送给客户端的通知(需要联网)远程推送服务,又称为APNs(ApplePush Notification Services) 为什么需要远程推送通知传统获取数据的局限性只要用户关闭了app,就无法跟app的服务器沟通...

    BasicUserNotification.m

    在联网的情况下,由远程服务器推送给客户端的通知,又称APNs(Apple Push Notification Services) 不管应用是打开还是关闭的情况下,都能接收到服务器推送的远程通知 5.远程通知的实现基础 在联网状态下,所有苹果...

    iOS10推送教程详解

    上个月接到一个需求,做ios10的推送,意图冲击AppStore头条.瞬间抓狂,工具都还没有,于是赶紧安装xcodeBeta版,ios10Beta版,然后就开始无尽的查资料,毕竟新功能,毕竟没做过……..不过还好,在发布会之前赶出来了,由于本人...

Global site tag (gtag.js) - Google Analytics