(二)APNS 消息推送 開發測試環節

文章參考:

http://blog.csdn.net/wowxavi1/article/details/8585480(重點推薦)

http://blog.csdn.net/wswqiang/article/details/8208581


開發測試環節,從網上下載了一個用於替換服務器的pushMeBaby,主要功能代替服務器向APNS服務連接併發送消息。


pushMeBaby需要用到的東西有  SSL(cer+key)證書 + 令牌(token)



大致流程如下


一、製作SSL(cer+key)證書

二、獲取令牌(token)

三、使用PushMeBaby進行模擬服務發送任務


------------------------------------------------------------------------------------------------------------


 具體生成SSL證書的步驟如下


一、SSL(cer+key)證書令牌(token)

 

1、生成Certificate Signing Request(CSR)


 

2、填寫你的郵箱和常用名稱,並選擇保存到硬盤。


 

點擊繼續:


 

這樣就在本地生成了一個Push.certSigningRequest文件。


同時鑰匙串裏生成兩個小鑰匙(公用密鑰和專用密鑰)




 

 

二、SSL certificate文件

 

1、用你付過費的帳號登錄到iOS Provisioning Portal,並新建一個App ID,這個過程可以參考:iOS應用的真機調試,這樣就會生成下面這條記錄:

如果已經創建好了一個APP ID的話,那麼只需要修改開啓它的推送功能就可以了。


 

2、點擊右側的Configure:


 

3、點擊Development Push SSL Certificate一行後的Configure:

 

 

4、點擊Continue:


 

5、選擇前面生成好的Push.certSigningRequest文件,點擊Generate,出現如下所示的頁面:


 

6、點擊Continue:


 

 

7、點擊Download,並將文件命名爲aps_developer_identity.cer

 

8、點擊Done,你會發現狀態變成了Enabled:


 

雙擊aps_developer_dientity.cer 註冊到你的鑰匙串中,這樣你的鑰匙串中就會有,也就是證書和鑰匙串相結合了


9.關鍵步驟 右擊導出文件,爲其命名,選擇文件格式爲.cer,這個文件是用於使用PushMeBaby時用來使用的證書,存儲即可!

到此SSL(cer+key)文件完成!



總結一下,因爲在第9步出現了問題,浪費自己半天的時間來找原因,最後發現,生成的aps_developer_dientity.cer這個證書雙擊後和自己的私鑰結合後,沒有導出它們兩個結合後的.cer文件,而是直接把aps_developer_dientity.cer放到PushMeBaby裏了,這樣在測試時,發現self.certificate的值是空的。所以一定要注意一下,用於測試時使用的驗證證書一定是SSL(.cer+key),即第9步,在此還得感謝我的一個好友哦!

10、準備profile證書,因爲推送消息只能再真機上測試,所以要建一個profile證書



點擊"new profile"爲上面新建的APP ID建個profile ,成功之後下載*_Dev_Profile.mobileprovision,當製作Provisioning Profiles時,會到 app id   cer 證書  device ,其中要補充的一點是當選擇cer時,和之前製作那個aps_developer_identity.cer證書一點關係也沒有,SSL證書是用於本地服務器同APNS服務器進行連接驗證用的。此步只是生成一個Provisioning Profiles文件,用於真機測試!之前在這裏也有一些迷惑!不知道這兩個證書的區別是什麼?現在弄清了!

雙擊將其加入到xcode 的Provisioning Profiles 中,這裏有一點要注意,再將這個加入xcode之前如果之前已經加入過一定要把之前加入的刪掉,如果有多個的話會出錯。

 

三、工程代碼

到這裏證書已經準備完畢,接下來,我們在xcode中新建一個測試工程,注意設置工程的Bundle Identifier必須與上面建的APP ID 裏的相同




二、獲取令牌(token)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

[self.window makeKeyAndVisible];

//向系統註冊遠程通知
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
return YES;

}

#pragma mark-UIApplicationDelegate代理方法

//系統詢問是否同意接收遠程通知,如果用戶同意,則OS向APNS服務器握手,APNS返回一個token,此方法可以得到那個token,註冊成功,將deviceToken保存到應用服務器數據庫(自己的服務器)

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {

 NSLog(@"regisger success:%@", pToken);

}

// 如果應用處於開啓狀態,此處可以得到從APNS服務器上的數據
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:selfcancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
[alert release];
NSLog(@"%@", userInfo);
}

// 註冊失敗
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Regist fail%@",error);

}

當運行程序時,控制檯會輸入結果:<740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad> 得到了令牌


三、使用PushMeBaby進行模擬服務發送任務

1.打開PushMeBaby程序,common+R運行,如果不能運行,則需要修改一下它的base SDK屬性即可

2.修改程序內的三個地方:token   send message  SSL證書

/*
* @只需要修改init方法
* 1、修改token
* 2、修改所需要的內容
* 3、如果aps證書(push SSL證書)錯誤,運行時程序崩潰
*/


當點擊發送時,你的設備應該就會出現你所發送的內容了!說明這個環境已經測通了!

發佈了92 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章