iOS上容易推送通知(Push Notification)的实现

iOS上简单推送通知(Push Notification)的实现
iOS上简单推送通知(Push Notification)的实现
    根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12),结合自己的实践,写下一点笔记,仅供参考:)
    由于篇幅较长,我列出简单的目录,如下

1) 理解Apple推送通知的机制
2) 创建App ID
3) 创建CSR文件
4) 创建Provisioning Profile文件
5) Xcode工程中取得Device Token


1、理解Apple推送通知的机制
iOS上容易推送通知(Push Notification)的实现
从上面的流程图中,可以看到一个能接收推送通知的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
iOS上容易推送通知(Push Notification)的实现
点击“New App ID”按钮后,如下
iOS上容易推送通知(Push Notification)的实现
Description的内容可以任意,Bundle Identifier (App ID Suffix)必须和创建App工程时的Bundle Identifier,如下
iOS上容易推送通知(Push Notification)的实现
点击“Submit”后,点击左侧导航中的“App IDs”,找到刚才新创建的App ID,如下
iOS上容易推送通知(Push Notification)的实现
点击“Configure”后,如下
iOS上容易推送通知(Push Notification)的实现
勾选“Enable for Apple Push Notification service”,然后点击红色的“Configure”按钮,这里暂时只针对Development取得证书。弹出一个对话框,如下
iOS上容易推送通知(Push Notification)的实现
点击“Continue”后,要我们上传一个CSR文件,如下
iOS上容易推送通知(Push Notification)的实现
下面使用钥匙串访问(KeychainAccess)应用程序创建上面需要的CSR文件(.certSigningRequest文件)

3、创建CSR文件
Keychain Access位于/Applications/Utilities目录中,打开它如下
iOS上容易推送通知(Push Notification)的实现
然后弹出窗口如下。
iOS上容易推送通知(Push Notification)的实现
UserEmail Address随意写就可以,Common Name也是一样,注意勾选“Save to disks”,然后点击“Continue”。很快就生成好了所需文件,去找到它。
iOS上容易推送通知(Push Notification)的实现
回到下面的网页中,上传刚才用KeychainAccess产生的HelloRemoteNotification.certSigningRequest文件。
iOS上容易推送通知(Push Notification)的实现
很快需要的证书就OK了,如下
iOS上容易推送通知(Push Notification)的实现
点击“Continue”,然后点击“Done”。
iOS上容易推送通知(Push Notification)的实现
发现上面的Status是Enabled,而且多了“Download”按钮,点击它,下载了一个名为“aps_development.cer”的文件。双击打开它,
iOS上容易推送通知(Push Notification)的实现
找到上图中“Keys”栏中名为“HelloRemoteNotification”的private key(注意是private key,而不是public key),右击它,选择“Export “HelloRemoteNotification”…”,这样会导出一个.p12文件(需要输入密码),如下(目前共有3个文件)
iOS上容易推送通知(Push Notification)的实现
下面开始用刚才产生的.p12文件,创建Profile provision文件

4、创建ProvisioningProfile文件
iOS上容易推送通知(Push Notification)的实现
在上图中,点击“New Profile”按钮后,如下
iOS上容易推送通知(Push Notification)的实现
填写“Profile Name”;勾选“Certificate”;“App ID”选择正确的、之前我们创建的ID,即PushNotification;最后关联需要测试真机设备。点击“Submit”,如下
iOS上容易推送通知(Push Notification)的实现
可以看到多了一个Provisioning Profile文件,点击“Download”按钮下载它,这时我们一共产生4个文件,如下
iOS上容易推送通知(Push Notification)的实现
双击“PushNotification.mobileprovision”文件,或把它拖入到Xcode中。
iOS上容易推送通知(Push Notification)的实现
在Xcode中,找到Code Signing项,如上图,将Debug一项配置成刚才拖入Provisioning Profile对应的iPhone Developer。

5、Xcode工程中取得Device Token
iOS上容易推送通知(Push Notification)的实现
在application:didFinishLaunchingWithOptions:方法里,注册使用远程通知。
iOS上容易推送通知(Push Notification)的实现
添加2个方法,application: didRegisterForRemoteNotificationsWithDeviceToken:和application:didFailToRegisterForRemoteNotificationsWithError:,用于取得Device Token和打印错误。运行我们建的HelloRemoteNotification工程,如果以上步骤都正确,应该打印出Device Token,如下
iOS上容易推送通知(Push Notification)的实现
也可能出错如下
iOS上容易推送通知(Push Notification)的实现