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


在這里,我就不哆嗦如何制作推送證書之類的了,網上一搜一大堆。

我們現在很多開發者的推送,就是集成第三方的推送SDK,然后通過第三方的推送平台幫我們進行推送。其實,這種推送(如JPush),一般只能廣播式地推送,就是推送給所有用戶,或者是分群推送(這種分群,是含糊分群,如活躍用戶,系統是iOS9的用戶等)(當然,如果后台服務器也同時集成JPush的sdk話,就可以特定用戶推送了)。

我現在要說的是,如何做到像QQ、微信那樣,特定推送到某個用戶呢?!

 

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

推送的流程是這樣的,程序運行起來以后,會判斷是否這個程序要推送,如果要的話會需要將手機和推送證書生成的一個唯一標識字符串(decice token)傳到我們自己的服務器去,服務器根據這個token和一個服務器端的證書文件一起將配合,將一個推送消息發給蘋果的apns服務器,蘋果根據這個token發送給指定的設備。所以只要你在服務器端將登錄的用戶的用戶信息和這個token做一個關聯,完全可以指定發給某一個人,而不是發給所有人。--某位網友

蘋果的推送,走的是socket協議,所以說,不用我們自己在進程中開一個線程來維持和自己服務器的長連接。

下面我就直接上代碼:

 

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

那怎么獲取設備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]];

    [[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是相同的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM