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

相关文章
相关标签/搜索