zoukankan      html  css  js  c++  java
  • 关于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是相同的。

  • 相关阅读:
    深度学习实战 Tricks
    Latex 琐碎
    Latex 琐碎
    数据网站(数据集的获取)、打分网站
    数据网站(数据集的获取)、打分网站
    matplotlib —— 添加文本信息(text)
    hdu 1506 Largest Rectangle in a Histogram
    poj2007
    OpenRisc-43-or1200的IF模块分析
    RHEL 6.4 安装svn和apache
  • 原文地址:https://www.cnblogs.com/handsomeBoys/p/5822187.html
Copyright © 2011-2022 走看看