這是一篇來自[raywenderlich](http://www.raywenderlich.com)的教程,內容翔實!結構簡單透徹、講解循序漸進、文章質量上乘!是一篇難的的博文!使用半瓶的英語水平翻譯了一下:
1.【iOS push全方位解析】(一)?[push的概述](http://blog.csdn.net/hherima/article/details/45583787)
2.【iOS push全方位解析】(二)?[生成push證書,生成Provisioning Profile](http://blog.csdn.net/hherima/article/details/45583865)
3.【iOS push全方位解析】(三)一個極簡的demo,并測試一下push。(本博文)
[這里查看原文](http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1)
### 一個極簡的demo
到目前為止,上面還不是做的還不夠讓人興奮,但是那些準備工作還是很有必要的。本教程像你詳細展示了如何生成證書,因為每天都會用到證書,而且沒有證書push就不好。剛才你剛搞了一個證書,可以連接到APNS。現在讓我們來測試一下吧。
打開Xcode選擇File,New Project。在面板中選擇Single View Application并下一步:

(建工程)
我是這么填的:
● Product Name:PushChat
● Organization Name:Ray Wenderlich
● Company Indemnifier:com.hollance
● Device Family:iPhone
Product Name和Company Identifier 一起構成了Bundle ID。在我的例子中是“com.hollance.PushChat”.你應該選擇一個Product name 和Company Identifier,即,從之前在Provisioning Portal中生成的App ID中獲取(例如com.yourname.PushChat)。確保勾選“User Stroyboards”并且“Use Automatic Reference Counting”。好,完成創建工程。進入AppDelegate.m。改一下代碼:
~~~
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Let the device know we want to receive push notifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
return YES;
}
~~~
函數registerForRemoteNotificationTypes是高速iOS該App想接收push通知。編譯并運行該App。你應該在真機上運行,因為模擬器不支持push通知。Xcode會自動選擇新的的provisioning profile。當程序啟動并注冊push通知,手機上彈一個消息,告知用戶該app想發送push通知。

(發送push 通知提醒)
app僅僅彈出一次這樣的對話框詢問用戶。如果用戶點擊OK,那就一切就設置好了。如果點擊“Don't Allow”,那么這個app將永遠收不到push通知了。用戶可以更改push的設置在手機設置中。

(設置push通知)
app的名字被添加到設置中,在這里用戶可以enable和disable app的push通知,包括badge、聲音和alert樣式。

(詳細設置push通知)
你的app可以設置具體是哪一種push,比如:
UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
在AppDelegate.m中還要添加一個邏輯,來收到push通知
~~~
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSLog(@"My token is: %@", deviceToken);
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"Failed to get token, error: %@", error);
}
~~~
當你的app在遠程push 通知注冊后,會返回一個device token。這是一個32字節的數字,可以唯一標識你的設備。可以吧device token想象成一個push通知的地址。再次運行app,你應該在控制臺看到下面的輸出:
My token is:?
<740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>
token是一串兒二進制的數據,在一個NSData中存放著。Apple不想讓開發者對token做什么更改。對我們而言知道它是一個32字節長的數據就足夠了。
APP工程的修改就這些了,還有一件事做完,就能看到push通知了。
### 發送第一個push通知
我之前很多次提到的,你需要搞一個server來發送push通知。這里為了測試,你不必設置一個server了。我已經寫好一個簡單的php腳本,可以連接到APNS并發送指定token的push通知。你可以在mac上運行。
[下載SimplePush code](http://d1xzuxjlafny7l.cloudfront.net/downloads/SimplePush.zip)并解壓,你還需要改一下simplepush.php文件:
~~~
// Put your device token here (without spaces):
$deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5ddb387462c7eaf61bbad78';
// Put your private key's passphrase here:
$passphrase = 'pushchat';
// Put your alert message here:
$message = 'My first push notification!';
~~~
將app工程運行結果中的device token拷貝到$deviceToken變量,去掉空格和回車。一共是64個十六進制字符。將私鑰的密碼放放到$passphrase變量;設置你希望的文本內容到$message變量。
將ck.pem拷貝到SimplePush文件夾下,記得!ck.pem文件一定是包含了證書和私鑰。打開命令行:
**$ php simplepush.php**
如果一切正常,腳本輸出是:
**Connected to APNS
Message successfully delivered**
幾秒鐘后,你的設備收到了第一個push通知。

(push測試成功)
注意:app啟動后什么也看不到。push消息是被派發了,但是app中并沒有處理它。