服務器向客戶端推送消息:
當應用程序推到後臺,或者根本就沒有運行(咱們的代碼無能爲力)
若是這種狀況之下,應用程序想和用戶交互(傳統的作法 不可能)
推送
APNS:Apple Push Notification Service
deviceToken:標示某一臺iPhone上的某一個應用程序
1.(用戶必須確認須要收到推送消息)註冊遠程通知中心向APNS獲取64位的字符串deviceToken
註冊遠程通知中心
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
參數:
UIRemoteNotificationTypeBadge //應用程序的角標
UIRemoteNotificationTypeSound //推送提示音
UIRemoteNotificationTypeAlert //提示框內容服務器
2.APNS返回deviceToken(進入代理方法)
1)成功獲取deviceToken,系統回調
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
2)獲取deviceToken失敗,系統回調
- (
void)application:(
UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(
NSError *)error;
3.iPhone將deviceToken上傳至服務器(POST)
例:
deviceToken: <
c389e769 d6ddb7d5 a783a015 ff553d90 5b1e04e2 6fa71ec7 f0aa52ab 4bdcc660>
1.處理字符串,消除空格 和 <>
2.獲得
64位字符串,
post至服務器
4.服務器將推送的消息+deviceToken+(SSL & privace key(兩個生成一個文件))
發送到APNS
5.(驗證經過後)APNS將消息發送到iPhone
6.用戶點擊推送通知,系統回調(在此方法裏將角標置零)
- (
void)application:(
UIApplication *)application didReceiveRemoteNotification:(
NSDictionary *)userInfo;
參數:
userInfo:包含推送的內容+推送的聲音+角標籤
1)設置角標
@property(
nonatomic)
NSInteger applicationIconBadgeNumber;
推送須要證書:該證書是2份 一份給客戶端 一份給服務器(客戶端的服務器) 服務器和客戶端推送證書必須一致