關於iOS特定設別推送(特定用戶推送)【原】

在這裏,我就不哆嗦如何製做推送證書之類的了,網上一搜一大堆。ios

咱們如今不少開發者的推送,就是集成第三方的推送SDK,而後經過第三方的推送平臺幫咱們進行推送。其實,這種推送(如JPush),通常只能廣播式地推送,就是推送給全部用戶,或者是分羣推送(這種分羣,是含糊分羣,如活躍用戶,系統是iOS9的用戶等)(固然,若是後臺服務器也同時集成JPush的sdk話,就能夠特定用戶推送了)。api

我如今要說的是,如何作到像QQ、微信那樣,特定推送到某個用戶呢?!服務器

 

先簡要闡明一下iOS推送的原理:和Android不一樣(谷歌被牆了,在中國沒有專門的推送服務器),蘋果擁有本身的APNS.微信

推送的流程是這樣的,程序運行起來之後,會判斷是否這個程序要推送,若是要的話會須要將手機和推送證書生成的一個惟一標識字符串(decice token)傳到咱們本身的服務器去,服務器根據這個token和一個服務器端的證書文件一塊兒將配合,將一個推送消息發給蘋果的apns服務器,蘋果根據這個token發送給指定的設備。因此只要你在服務器端將登陸的用戶的用戶信息和這個token作一個關聯,徹底能夠指定發給某一我的,而不是發給全部人。--某位網友網絡

蘋果的推送,走的是socket協議,因此說,不用咱們本身在進程中開一個線程來維持和本身服務器的長鏈接。app

下面我就直接上代碼:socket

 

ios消息推送,是經過獲取設備token來標記設備,也是經過token來實現Apple Push Notification Service的消息推送定位。spa

那怎麼獲取設備token?
1:設置好應用的push證書,並打包成功;
2:在delegate中實現線程

1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
2 {  
3         [[UIApplication sharedApplication] registerForRemoteNotificationTypes:  
4         UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |         UIRemoteNotificationTypeAlert];  

MARK:IOS 8之後,請用下面新的api

    [[UIApplication sharedApplication]registerUserNotificationSettings:[UIUserNotificationSettings                                                                      settingsForTypes:(UIUserNotificationTypeSound|UIUserNotificationTypeAlert|UIUserNotificationTypeBadge) categories:nil]];code

    [[UIApplication sharedApplication]registerForRemoteNotifications];

5 }      

 

3:獲取token,並保存下來,這裏須要保存到本身的服務端,而後給apple服務器推送消息時,須要帶上token做爲最終須要接受消息的設備標記。不然,目標設置沒法接受到消息,apple也不知道推送給那個設備。

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken  
{  
NSLog(@"deviceToken -- >> %@",deviceToken);  
NSString *pushToken = [[[[deviceToken description]  
stringByReplacingOccurrencesOfString:@"<" withString:@""]  
stringByReplacingOccurrencesOfString:@">" withString:@""]  
stringByReplacingOccurrencesOfString:@" " withString:@""];  
//MARK:這裏,發送網絡請求,把該用戶的ID和該token發送到本身的服務器,創建關係,當須要發送消息的時候,服務器就能夠查表得到token,而且發送相應的消息到APNs,讓APNs去推送。
}

 

 

4.若是對消息推送比較嚴格的,而APNs的推送,又不能確保每次一定送達。關於推送是否成功,或者失敗,能夠在回調裏面對相應的消息進行判斷,而後再反饋給服務器,然服務器進行相應的判斷(是否再次推送)。

 

5.同一臺設備,同一個app,每次返回token是相同的。

相關文章
相關標籤/搜索