精华内容
下载资源
问答
  • 推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification):手机应用本身的通知,比如:闹铃 远程推送通知:(Remote ...

    推送通知和NSNotification是有区别的:

    NSNotification:是看不到的

    推送通知:是可以看到的

    IOS中提供了两种推送通知

    本地推送通知:(Local Notification):手机应用本身的通知,比如:闹铃

    远程推送通知:(Remote Notification)从服务器发送过来的通知

     

    推送通知的作用:让不在前台运行的App,告知用户App内部发生了什么事情.比如我们正在聊微信,突然界面上面出现了黑色半透明横幅(QQ好友给你发送的消息)这就是一个推送通知.

     

    推送通知的呈现效果:

    1:在屏幕顶部显示一块横幅(显示具体内容)

    2:在屏幕中间弹出一个UIAlertView(显示具体内容)

    3:还可以在呈现推送通知的同时播放音效(提醒作用)

    4:屏幕锁屏时也照样呈现(显示具体内容)

    5:呈现推送通知的同时,还可以更新App图标右上角的数字(说明新内容的数量)

    6:用户接收的推送通知,都会展示在通知中心(手指从屏幕顶部往下拉的窗口)(显示具体的内容)

     

    推送通知的使用细节:

    StartFragment

    1:发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来

     

    2:点击推送通知后,默认会自动打开发出推送通知的app

     

    3:不管app打开还是关闭,推送通知都能如期发出

    什么是本地推送通知:

    顾名思义,就是不需要联网的就能发出的推送通知(不需要服务器的支持)

    本地推送通知的使用场景:

    常用来定时提醒用户完成一些任务,比如:清理垃圾,记账,购物,买衣服,看电影

    如何发出本地推送通知:

    步骤:

    1:注册通知类型(IOS8以后)

    2:创建本地推送通知对象

    3:定制一个通知

     

    #import "ViewController.h"

     

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        //1 :IOS8以后需要注册通知类型,包含哪些(声音,图标文字,)信息,

        /*

         UIUserNotificationTypeNone    = 0

         UIUserNotificationTypeBadge   = 1 << 0 包含图标文字(左上角的数字)0001

         UIUserNotificationTypeSound   = 1 << 1 声音 ----------------->0010

         UIUserNotificationTypeAlert   = 1 << 2 主题内容--------------->0100

         目前是:0111,这个值是数值,下面的|||之间的内容相当于数值

         */

        // |:位移运算符 

        UIUserNotificationSettings *seting=[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

        

        [[UIApplication sharedApplication]registerUserNotificationSettings:seting];    

    }

     

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

        //告诉它有一个本地通知

        //2:创建一个本地推送通知对象

        UILocalNotification*local=[[UILocalNotification alloc]init];

        /*

         // timer-based scheduling  特定的时间发出通知

         @property(nonatomic,copy) NSDate *fireDate;触发时间

         @property(nonatomic,copy) NSTimeZone *timeZone;时区

         @property(nonatomic) NSCalendarUnit repeatInterval;重复间隔

         @property(nonatomic,copy) NSCalendar *repeatCalendar;重复间隔

         @property(nonatomic,copy) CLRegion *region NS_AVAILABLE_IOS(8_0);区域

         @property(nonatomic,assign) BOOL regionTriggersOnce NS_AVAILABLE_IOS(8_0);决定区域的一个BOOL

         // alerts警告

         @property(nonatomic,copy) NSString *alertBody; 提醒的主题

         @property(nonatomic) BOOL hasAction; NO不显示滑动解锁按钮  反之显示

         @property(nonatomic,copy) NSString *alertAction; 滑动解锁的文字     

         @property(nonatomic,copy) NSString *alertLaunchImage;  点击通知横幅的时候启动程序的启动 图片

         @property(nonatomic,copy) NSString *alertTitle 提示的标题文字NS_AVAILABLE_IOS(8_2);

         // sound

         @property(nonatomic,copy) NSString *soundName; 伴随的声音,默认的是UILocalNotificationDefaultSoundName

         // badge

         @property(nonatomic) NSInteger applicationIconBadgeNumber;图标右上角的数字

         // user info

         @property(nonatomic,copy) NSDictionary *userInfo;用户指定的携带参数,转换成键值对放在字典里面

         @property (nonatomic, copy) NSString *category NS_AVAILABLE_IOS(8_0);分类

         */

     

        //给这些属性赋值才能让通知有特定的内容

        local.alertBody=@"女神:在吗?";

        //特定的时间让显示出来(从现在5秒后显示出来)

        local.fireDate=[NSDate dateWithTimeIntervalSinceNow:5];

        //滑动解锁的文字(在推送通知信息的下面一小行字)

        local.alertAction =@"";

        //有声音给声音,没声音用默认的

        local.soundName=@"UILocalNotificationDefaultSoundName";

        //设置图标右上角数字

        local.applicationIconBadgeNumber=19;

        //用户信息

        local.userInfo=@{@"name":@"女神",@"content":@"在不",@"time":@"20180101"};

        //3:定制一个通知 

        

        [[UIApplication sharedApplication]scheduleLocalNotification:local];

        

    }

     

    @end

     什么是远程推送?

    远程:从远程服务器推送给客户端的通知(需要联网)

    从服务器发送了一个通知,接收到通知以后做的和本地通知类似的事情,这个通知只不过是从远方的服务器传过来的,

    要做的这个远程推送通知是由远程推送服务,又称为APNs(Apple Push Notification Services:苹果推送通知服务),苹果给我们提供了这个服务就可以做远程推送服务了.

    为什么要用苹果的服务器?-->我们都知道,程序在活着的时候是可以跟自己的服务器进行交互的(程序活着可以执行代码),但只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容.我们在使用QQ的时候,即使没有登录QQ也能收到信息,这就是用远程推送通知做的.不管登陆还是没有登陆QQ,都可以接收到,但前提是必须要联网.

     

    远程推送通知使用须知:所有的苹果设备在联网状态下,都会与苹果的设备建立长连接(只要建立连接,想发送数据,随时都可以发送, 始终保持连接),苹果有一个服务器集群,跟所有的苹果设备建立长连接

    长连接的作用:时间校准,系统升级,查找我的iPhone,

    长连接的好处:数据保持最新状态,数据传输快(以前的连接需要根据协议握几次手,苹果的直接就是已经连接了).

    只要和评估偶的设备保持长连接就享受苹果的APNs服务,举个例子:

    比如说我AgentLXJ现在有一部IPhone手机,手机里面有很多应用比如QQ,QQ有服务器吧,我的手机现在联网并且QQ软件要打开,陌陌的服务器就可以和我交互,我想传递消息,或者我接收到了消息,陌陌服务器金额以直接的告诉我.如果退出了QQ(不是卸载),但我的手机还在联网,这时QQ就不能给我推送消息,这时候苹果的服务就可以,只要我的手机在联网状态下(苹果建立的就是长连接),苹果要给我推送消息要是知道是哪个设备,怎么区分是哪一台设备呢?我们的手机都有自己的唯一标识,有了设备的唯一标识就知道推送给哪一台设备,但是还有一个问题,我的手机上不可能只有QQ这么一个软件,比如还有微信,陌陌等软件,所以苹果还要知道软件的BundleID(应用程序的唯一标识),有了设备和程序的唯一标识,就知道了推送给哪个设备的哪个应用程序.现在又有了一个问题,苹果不知道要推送什么消息内容.这里说明一个概念:消息体(来源:是谁发给我的,比如是:小媳妇.消息内容:比如给我说的是:吃饭了么?),苹果不知道这个消息体,但这个消息QQ知道,我的小媳妇发的这个消息体先到QQ服务器(告诉QQ我要给他发送一条消息),QQ服务器先看看被接受的人(我)在线没有,在线了直接发过去就完了,如果我不在线,这时苹果服务器可以发送,所以要发给苹果服务器,但是发给苹果服务器是有要求的1:交99美元成为开发者才能享受此服务.2:消息体 3目标的DeviceToken,QQ的服务器没有资格保存每一个设备的唯一标识和BundleID,苹果想了一个办法,叫做DeviceToken(APPID(应用位置标识)和UUID(设备唯一标识)).告诉我这三点苹果就可以帮我们做事情,怎么解析DeviceToken苹果知道,所以QQ有一个数据库,一旦有人注册或者是登陆(因为手机和苹果是长连接,一旦登陆或注册之前就会发送设备ID和软件ID,并在苹果服务器获得DeviceToken)QQ数据库就会存用户的信息,比如ID,名字,性别,DeviceToken(假如我的DeviceToken经苹果的加密生成的是ApentLXJ)等等信息,DeviceToken在每次登陆的时候保存,因为用户有可能换手机,一旦换手机用户的UUID就换了,这时需要重新生成一个DeviceToken,然后把最新的Devicetoken保存到服务器中,小媳妇我发消息的时候就去找苹果,看是否符合上面你的三条(交过钱了,有消息体,有目标的DeviceToken:ApentLXJ)),一看都符合就发给我了

    补充的:一个手机有多少个应用程序就有多少个DeviceToken,

    如果QQ同时推送给多台设备?比如我的QQ手机上登了,IPAD上也登了,这时候取决于QQ服务器的发给苹果的APNS的DeviceToken,发一个就发给一台设备,两个DeviceToken,就发给两台设备.

    如果我换了安卓的时候登陆陌陌,这时候就是谷歌来推送通知,谷歌也有一大推服务器来搞.

     

    转载于:https://www.cnblogs.com/AgentLXJ/p/4642528.html

    展开全文
  • 本地推送通知

    2019-09-23 19:22:32
    推送通知的作用: 可以让不在前台运行的app 告知用户app内部发生了什么事情 推送通知的呈现效果: 1.在屏幕顶部显示一条横幅 2.在屏幕中间弹出一个UIAlertView 3.锁屏状态下也可以呈现 4.呈现推送通知的...

    推送通知的作用:

    可以让不在前台运行的app 告知用户app内部发生了什么事情

    推送通知的呈现效果:

    • 1.在屏幕顶部显示一条横幅
    • 2.在屏幕中间弹出一个UIAlertView
    • 3.锁屏状态下也可以呈现

    4.呈现推送通知的同时还可以更新app图标的数字

    5.播放音效

    用户接收的通知 都会展示在通知中心  如何打开通知中心:从屏幕顶部往下滑 就可以打开通知中心

    推送通知的呈现效果设置:

    1.显示横幅还是UIAlerView 取决于用户的设置

    2.用户也可以决定是否要开启以下4个功能:

    • 是否显示app图标数字
    • 播放音效
    • 锁屏显示
    • 是否显示在通知中心

    推送通知的使用细节:

    1. 发送推送通知时 如果程序正运行在前台 那么推送通知就不会被呈现出来
    2. 点击推送通知后 默认会自动打开发出推送通知的app
    3. 不管app打开还是关闭 推送通知照样能正常发出

    本地推送通知

    本地推送通知: 不需要联网就能发出的推送通知 不需要服务器的支持

    本地推送通知的使用场景: 常用来提醒用户完成一些任务 (如:买衣服,玩游戏 app软件的提醒用户)

    如何发出本地通知代码如下:

    以下代码适用于IOS7:

     

      //1.创建本地通知对象
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        
    //    NSDate *currentDate   = [NSDate date];
    //    notification.timeZone = [NSTimeZone defaultTimeZone]; // 使用本地时区
    //    notification.fireDate = [currentDate dateByAddingTimeInterval:5.0];
        
        //2.设置通知属性
    //    local.soundName = @"1.wav"; //播放音效 这个只有在真机上面才会有效
        notification.alertBody = @"客官,你好久没来了,进来看看,可好?";  //中间显示的内容
        
        //3.通知第一次发出的时间
        notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
        
        //4.启动通知
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];

     

    在IOS8中请在AppDelegate的:-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入如下代码即可:

        if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
            [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
        }
        else {
            [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];
        }

     

    如何判断用户是点击app图标启动程序 还是点击本地通知  启动程序

    点击本地推送通知,会自动打开app这里有2种情况:

    1. app并没有被关闭 一直隐藏在后台
    • 让app进入前台会调用AppDelegate的下面的方法(并非重新启动)

     

    /**
     *  当用户点击本地通知进入App的时候调用(注意这个时候app并没有被关闭)
     */
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

     

       2.app已经被关闭 (进程已经死了)

    •   启动app,启动完毕会调用AppDelegate下面的方法
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

     代码如下:

    appDelegate里面的代码:
    
    
    #import "ViewController.h"
    #import "AppDelegate.h"
    
    @interface AppDelegate ()
    /**label**/
    @property(nonatomic,weak)UILabel *label;
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
            [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
        }
        else {
            [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];
        }
        
        //创建label
        UILabel *label = [[UILabel alloc] init];
        label.backgroundColor = [UIColor redColor];
        label.frame = CGRectMake(0, 100, 100, 100);
        label.font = [UIFont systemFontOfSize:11];
        label.numberOfLines = 0;
        
        //拿到当前主窗口的view
        [[[self.window.rootViewController.childViewControllers firstObject] view] addSubview:label];
    
        //添加到窗口的跟控制器上面
    //    [self.window.rootViewController.view addSubview:label];
        
        //判断用户是点击本地通知启动的程序 还是直接点击app图标启动的程序
        UILocalNotification *note = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
        
        if (note) { //如果这个key有值  说明用户是点击本地通知启动的程序
            label.text =@"点击本地通知启动的程序";
            
            //拿到目标控制器
            ViewController *vc = [self.window.rootViewController.childViewControllers firstObject];
            //跳转到目标控制器
            [vc performSegueWithIdentifier:@"home2detail" sender:note];
            
            
        }else{ //用户直接点击app图标启动的程序
            label.text = @"点击app图标启动的程序";
        }
        self.label = label;
        
        return YES;
    }
    
    /**
     *  当用户点击本地通知进入App的时候调用以及通知发出的时候也会调用这个方法(注意这个时候app并没有被关闭)
     */
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
        self.label.text = @"点击通知再次回到前台";
        
        //判断应用程序的状态  如果是前台 直接退出  不跳转
        if (application.applicationState == UIApplicationStateActive)  return;
        
        // 如果应用程序在后台的时候才需要跳转
        
        //拿到目标控制器
        ViewController *vc = [self.window.rootViewController.childViewControllers firstObject];
        //跳转到目标控制器
        [vc performSegueWithIdentifier:@"home2detail" sender:notification];
        
    }
    
    @end
    模拟发送通知界面的代码
    
    
    #import "ViewController.h"
    #import "DetailViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    }
    - (IBAction)send {
        
        //1.创建本地通知对象
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        
        //2.设置通知属性
       //local.soundName = @"1.wav"; //播放音效 这个只有在真机上面才会有效
        notification.alertBody = @"客官,你好久没来了,进来看看,可好?";  //中间显示的内容
        notification.applicationIconBadgeNumber = 15; //设置app图标数字
        notification.alertAction =@"查看一下吧!"; //设置锁屏界面 最底部的小文字 (滑动来+ alertAction)
        
        //设置通知的额外信息
        notification.userInfo =  @{
                                @"title" : @"重大新闻",
                                @"time": @"2014-08-31",
                                @"content":@"这里真的很好 你可以多玩玩啊"
                                };
        
        //设置启动图片
        notification.alertLaunchImage = @"Default";
        
        //试着重复发出通知的时间间隔
    //    notification.repeatInterval = NSCalendarUnitMinute;
        
        //设置时区 为当前手机设置的时区
        notification.timeZone = [NSTimeZone defaultTimeZone];
        
        //3.通知第一次发出的时间
        notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
        
        //4.启动通知 在规定的时间发出调度通知
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];
        
        //直接发出通知
    //    [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
        
    }
    - (IBAction)cancle {
        
        //获得所有等待被发出(启动)的通知
        NSArray *notes = [UIApplication sharedApplication].scheduledLocalNotifications;
        NSLog(@"%@",notes);
        
        //取消所有通知
        [[UIApplication sharedApplication] cancelAllLocalNotifications];
    }
    
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UILocalNotification*)sender
    {
        
        //拿到目标控制器
        DetailViewController *desVc = segue.destinationViewController;
        desVc.content = sender.userInfo;
       
    }
    
    @end
    通知内容详情页代码:
    
    .h文件代码:
    #import <UIKit/UIKit.h>
    
    @interface DetailViewController : UIViewController
    
    /**通知内容**/
    @property(nonatomic,strong)NSDictionary *content;
    
    @end
    
    
    .m文件代码
    
    #import "DetailViewController.h"
    
    @interface DetailViewController ()
    @property (weak, nonatomic) IBOutlet UILabel *detailLabel;
    
    @end
    
    @implementation DetailViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.detailLabel.text = self.content[@"content"];
    }
    
    @end

     

     

      

    转载于:https://www.cnblogs.com/syios/p/4774217.html

    展开全文
  • iOS 推送通知

    2016-05-21 17:08:26
    iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解 什么是消息推送 举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息、微信信息等等,这就是常见的消息推送。 例如: ...


    iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解

    什么是消息推送

    举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息、微信信息等等,这就是常见的消息推送。

    例如:

    消息推送的类型:

    • 在屏幕顶部显示一块横幅(显示具体内容)
    • 在屏幕中间弹出一个UIAlertView(显示具体内容)
    • 在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
    • 更新app图标的数字(说明新内容的数量)
    • 播放音效(提醒作用)

    这是我们常见的推送消息的样式,我们可以在手机上自定义接收的消息如何展示。

    在一些软件中,如果用户不小心关闭了我们的推送服务,我们也可以这样提示用户怎么打开允许接收推送服务(iOS8以后)。

    注意:

    • 发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来

    • 点击推送通知后,默认会自动打开发出推送通知的app

    • 不管app打开还是关闭,推送通知都能如期发出

    消息推送和平常的从服务器获取数据有什么不同?

    • 当我们从服务器获取数据的时候,我们会主动向服务器发送消息,然后服务器才会给我们发送我们需要的信息;而消息推送是当我们不在聊天状态下,甚至是连QQ软件都没有打开的情况下,服务器主动向我们发送消息,告诉我们一些信息。

    当然了,消息推送和通知(NSNotification)可不一样,虽然它们的使用类名看起来有点相似。

    • NSNotification是抽象的,不可见的
    • 消息推送是可见(肉眼可见的)

    本地推送

    在iOS中,推送分为本地推送和远程推送,本地推送不需要网络(不需要服务器的支持),常见的应用场景例如:

    • 事件提醒类的软件,到了我们自定义的时间,就会弹出一些信息告诉我们该干什么了。

    • 记账类软件,会提醒我们的一些花销等等。


    我们先来学习一下本地推送

    相关使用的类(重要)

    • 创建本地推送通知对象
    UILocalNotification *ln = [[UILocalNotification alloc] init];
    • 设置本地推送通知属性
    //推送通知的触发时间(何时发出推送通知)
    @property(nonatomic,copy) NSDate *fireDate;
    
    //推送通知的具体内容
    @property(nonatomic,copy) NSString *alertBody;
    
    //在锁屏时显示的动作标题(完整标题:“滑动来” + alertAction)
    @property(nonatomic,copy) NSString *alertAction;
    
    //音效文件名
    @property(nonatomic,copy) NSString *soundName;
    
    //app图标数字
    @property(nonatomic) NSInteger applicationIconBadgeNumber;
    
    //每隔多久重复发一次推送通知
    @property(nonatomic) NSCalendarUnit repeatInterval;
    
    //点击推送通知打开app时显示的启动图片
    @property(nonatomic,copy) NSString *alertLaunchImage;
    
    //附加的额外信息
    @property(nonatomic,copy) NSDictionary *userInfo;
    
    //时区
    @property(nonatomic,copy) NSTimeZone *timeZone;
    (一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区)
    
    //调度本地推送通知(调度完毕后,推送通知会在特地时间fireDate发出)
    [[UIApplication sharedApplication] scheduleLocalNotification:ln];
    
    //获得被调度(定制)的所有本地推送通知
    @property(nonatomic,copy) NSArray *scheduledLocalNotifications;
    (已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除)
    
    //取消调度本地推送通知
    - (void)cancelLocalNotification:(UILocalNotification *)notification;
    - (void)cancelAllLocalNotifications;
    
    //立即发出本地推送通知
    - (void)presentLocalNotificationNow:(UILocalNotification *)notification;
    
    • 用户点击推送消息进入app时的调用方法
    
    //当用户点击本地推送通知,会自动打开app,这里有2种情况
    //app并没有关闭,一直隐藏在后台
    //让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
    
    //app已经被关闭(进程已死)
    //启动app,启动完毕会调用AppDelegate的下面方法
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
    //launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象
    //当点击通知进入app时,launchOptions参数才会有值,当正常启动app时,launchOptions为null
    

    注意:

    在iOS 8.0中,如果要使用本地通知,需要得到用户的许可
    在didFinishLaunchingWithOptions方法中添加如下代码:

    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
    
    [application registerUserNotificationSettings:settings];

    实例:

    
    //在需要的地方注册本地消息推送
    
        // 1.创建本地通知
        UILocalNotification *localNote = [[UILocalNotification alloc] init];
    
        // 2.设置本地通知的信息
        // 2.1.设置提示信息
        localNote.alertBody = @"吃饭了吗?";
        // 2.2.设置通知弹出的时间
        localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5.0];
        // 2.3.设置滑块显示的文字
        localNote.alertAction = @"快点";
        // 2.4.是否让上面的文字生效
        localNote.hasAction = NO;
        // 2.5.设置通知中心的标题
        localNote.alertTitle = @"你大哥";
        // 2.6.设置通知的声音
        localNote.soundName = @"buyao.wav";
        // 2.7.设置应用程序图标右上角的数字
        localNote.applicationIconBadgeNumber = 10;
    
        // 3.调度通知
        //调度前要先把原来的通知取消
        UIApplication *app = [UIApplication sharedApplication];
        [app cancelAllLocalNotifications];
        [app scheduleLocalNotification:localNote];
    

    在appdelegate类中实现相应的跳转方法

    #import "AppDelegate.h"
    
    #define IS_iOS8 ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0)
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        /*
         UIUserNotificationTypeNone    = 0,      不发出通知
         UIUserNotificationTypeBadge   = 1 << 0, 改变应用程序图标右上角的数字
         UIUserNotificationTypeSound   = 1 << 1, 播放音效
         UIUserNotificationTypeAlert   = 1 << 2, 是否运行显示横幅
         */
    
        [application setApplicationIconBadgeNumber:0];
    
        if (IS_iOS8) {
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];
            [application registerUserNotificationSettings:settings];
        }
    
        // 如果是正常启动应用程序,那么launchOptions参数是null
        // 如果是通过其他方式启动应用程序,那么launchOptions就有值,里面存储的是通知的内容
        if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
            // 当被杀死状态收到本地通知时执行的跳转代码
             [self jumpToSession];
        }
    
        return YES;
    }
    
    //程序没有关闭时,点击通知进入app才会调用,如果将程序完全退出,点击通知进入app时只会调用上面的方法,不会调用这个方法
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
        // 在这里写跳转代码
        // 如果是应用程序在前台,依然会收到通知,但是收到通知之后不应该跳转
        if (application.applicationState == UIApplicationStateActive) return;
    
        if (application.applicationState == UIApplicationStateInactive) {
            // 当应用在后台收到本地通知时执行的跳转代码
            [self jumpToSession];
        }
    }
    
    - (void)jumpToSession
    {
        UILabel *redView = [[UILabel alloc] init];
        redView.backgroundColor = [UIColor redColor];
        redView.frame = CGRectMake(0, 100, 300, 400);
        redView.numberOfLines = 0;
        // redView.text = [NSString stringWithFormat:@"%@", launchOptions];
        [self.window.rootViewController.view addSubview:redView];
    }
    
    @end
    

    远程推送

    先介绍一下iOS中远程推送的原理:

    我们先要明确一点,所有的iOS设备收到的远程推送消息都是通过苹果的服务器发出来的。我们自己公司的服务器或者第三方的推送服务器都是将要发送给我们的推送消息先推给苹果的服务器,然后再由苹果的服务器发送给我们。

    如下图:

    所以,我们的苹果设备在联网的情况下,都会默认和苹果的服务器保持一个长连接(这里不解释长连接的概念,你可以理解成是有一条线一直在两者之间联系着,为了保持服务器不断开和我们设备的联系,我们的设备默认每隔一段时间会向服务器发送心跳包(一个很小的文件),来告诉苹果服务器不要和我们的设备断开连接)。

    原理图讲解

    下面详细解释一下iOS中的远程推送原理

    上图中1-8的步骤就可以很好的解释远程推送的过程了,而客户端需要做的只有几个步骤:

    • 1:发送设备的UDID和
      应用的Bundle Identifier
      给APNs服务器

    • 2:经苹果加密生成一个
      deviceToken

    • 3:发送当前用户的deviceToken
      和用户的标志(比如id或者qq)到自己公司的服务器或者第三方推送服务器

    • 4:监听通知的点击事件

    其余的步骤由服务器端实现:

    • 4:自己的服务器或者第三方推送服务器将客户端发送过来的用户信息保存在自己的服务器中

    • 5:有人发送消息的时候,从服务器中(根据deviceToken)查询要发给谁

    • 6:查询到要发送给某人以后,将信息发送给苹果服务器

    • 7:苹果服务器根据得到的deviceToken和信息,查到要接受信息的设备和app,将信息发送给用户。

    调试iOS的远程推送功能, 必备条件:

    1.真机

    2.调试推送需要的证书文件
    1> aps_development.cer : 某台电脑就能调试某个app的推送服务
    2> iphone5_qq.mobileprovision : 某台电脑就能利用某台设备调试某个程序

    三.发布具有推送服务的app,需要的证书文件
    1> aps_production.cer : 如果发布的程序中包含了推送服务,就必须安装这个证书
    2> qq.mobileprovision : 某台电脑就能发布某个程序

    实际操作

    下面就开始真正的使用一下远程推送功能吧。

    证书配置01 – 创建App ID

    配置明确的App ID

    大概步骤如下:

    先选择明确的App ID

    配置远程推送的调试证书


    配置远程推送的发布证书(使用第二种方法配置)

    新建项目,将Bundle ID改成和上面配置的成相同名字。

    如果还是不行,检查这里

    将配置好的证书下载后安装。

    接下来就可以开始处理远程推送的消息了:

    • 1、向苹果注册我们的设备,并获取到deviceToken

    注意:
    在iOS7和iOS8中的注册方法不一样

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        // 请求获取DeviceToken
        if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
            // 1.获取发送通知的权限
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
            [application registerUserNotificationSettings:settings];
    
            // 2.注册远程通知
            [application registerForRemoteNotifications];
        } else {
            [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
        }
    
        return YES;
    }
    
    //获取到deviceToken
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    {
        NSLog(@"%@", deviceToken);
    }
    • 2、处理远程通知的消息

    这里有两个方法,注意两者的区别,更具需要调用

    //这个方法可以处理当用户点击消息进入前台做一些操作
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
        NSLog(@"%@", userInfo);
    }
    
    //这个方法可以实现在用户手机收到消息就可以在后台进行一些操作,例如更新UI
    
    //不过,这个方法要先设置后台模式,方法如下:
    /*
     1.开启后台模式
     2.调用completionHandler,告诉系统你现在是否有新的数据更新
     3.userInfo添加一个字段:"content-available" : "1" : 只要添加了该字段,接受到通知都会在后台运行
     */
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    {
        UIView *redView = [[UIView alloc] init];
        redView.frame = CGRectMake(100, 100, 100, 100);
        redView.backgroundColor = [UIColor redColor];
        [self.window.rootViewController.view addSubview:redView];
    
        completionHandler(UIBackgroundFetchResultFailed);
    }
    

    添加后台模式方法:

    测试工具介绍

    下面介绍一种测试远程通知的工具PushMeBaby

    • PushMeBaby是一款用来测试ANPs的开源Mac项目
    • 它充当了服务器的作用,用法非常简单
    • 它负责将内容提交给苹果的APNs服务器,苹果的APNs服务器再将内容推送给用户的设备

    使用步骤:

    • 注释掉不要的错误

    • 填写必要信息

      • deviceToken:用于找到设备的令牌

      • payload:推送的内容

    • 将推送的调试证书改为名apns.cer,添加到PushMeBaby项目中

    • command + R启动程序,然后点击Push
      接下来就可以在设备上接收到远程推送通知

    常用的第三方推送(极光推送)

    什么是JPush

    一套远程推送解决方案,支持android和iOS两个平台
    它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量、开发复杂度

    更多的信息,可以参考JPush官方网站:https://www.jpush.cn

    集成iOS SDK的步骤可以参考
    http://docs.jpush.cn/pages/viewpage.action?pageId=2621727



    展开全文
  • 推送通知 什么是推送通知,有什么作用?概念 向用户推送一条信息来通知用户某件事情 作用 可以在APP退到后台,或者关闭时;继续推送一条消息告诉用户某件事情 推送通知的分类本地推送通知“本地”可以理解为”不...

    ##一 推送通知
    - 什么是推送通知,有什么作用?
    - 概念
    - 向用户推送一条信息来通知用户某件事情
    - 作用
    - 可以在APP退到后台,或者关闭时;继续推送一条消息告诉用户某件事情

    • 推送通知的分类

      • 本地推送通知

        • “本地”可以理解为”不联网”;即使没有网络情况下,也可以推送通知消息
        • 通知发送方: 开发人员负责在APP内发送
        • 应用场景: 确定知道未来某个时间点应该提醒用户什么
      • 远程推送通知

        • 与“本地”相对,表示,必须在联网情况下才会向用户推送通知消息
          远程推送服务,又称为APNs(Apple Push Notification Services)
        • 通知发送方: 服务器
        • 应用场景:
          • 1.不确定未来某个时间点应该提醒用户什么,临时性的
          • 2.当APP彻底退出时也想继续让用户获取一些最新消息
    • 推送通知的呈现效果总结

      • 在屏幕顶部显示一块横幅(显示具体内容)
      • 在屏幕中间弹出一个UIAlertView(显示具体内容)
      • 在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
      • 更新app图标的数字(说明新内容的数量)
      • 播放音效(提醒作用)

    注意细节:发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来,不管app打开还是关闭,推送通知都能如期发出

    二 本地推送通知

    • 本地通知的简单实现
     // 1. 创建一个本地通知
       UILocalNotification *ln = [[UILocalNotification alloc] init];
     // 2 设定通知发送时间
       ln.fireDate = [NSDate dateWithTimeIntervalSinceNow:3];
     // 3 设置通知内容
       ln.alertBody = @"顺子要不要?";
    • 设置本地推送通知属性
    // 推送通知的触发时间(何时发出推送通知) 
    @property(nonatomic,copy) NSDate *fireDate; 
    // 推送通知的具体内容 
    @property(nonatomic,copy) NSString *alertBody; 
    // 在锁屏时显示的动作标题(完整标题:“滑动来” + alertAction)
    @property(nonatomic,copy) NSString *alertAction; 
    // 音效文件名 
    @property(nonatomic,copy) NSString *soundName; 
    // app图标数字 
    @property(nonatomic) NSInteger applicationIconBadgeNumber;
    • 开始推送通知

      • 根据fireDate设定的时间进行推送
        [[UIApplication sharedApplication] scheduleLocalNotification:ln];
      • 立即推送
        presentLocalNotificationNow:(UILocalNotification *)notification;
    • 监听用户点击通知

      • app处于前台
        • 此时不会弹框通知用户通知的到达,但是还是会调用对应的代理方法
      • app并没有关闭,一直隐藏在后台时

        • 此时用户点击通知信息后,会让app进入前台,并会调用AppDelegate的下面方法application: didReceiveLocalNotification:
      • app已经被关闭(进程已死)

        • 此时用户点击通知信息后,会启动app,启动完毕会调用AppDelegate的下面方法
          - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
          launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象  
    • 设置本地通知快捷项
    - (void)registerAuthor
    { 
        // 创建一个快捷操作组 NSSet<UIUserNotificationCategory *>
        UIMutableUserNotificationCategory *cate = [[UIMutableUserNotificationCategory alloc] init];
        // 用来多个操作组之间的识别
        cate.identifier = @"select";
    
        // 设置操作组的操作行为 NSArray<UIUserNotificationAction *>
    
        // 创建一个操作项
        UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init];
        // 设置操作标识
        action1.identifier = @"king";
        // 设置行为名称
        action1.title = @"王炸";
        // 设置行为的执行模式
        action1.activationMode = UIUserNotificationActivationModeForeground;
    
        // 创建一个操作项
        UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];
        // 设置操作标识
        action2.identifier = @"pass";
        // 设置行为名称
        action2.title = @"要不起";
        // 设置行为的执行模式
        action2.activationMode = UIUserNotificationActivationModeBackground;
    
        NSArray *actions = @[action1, action2];
        [cate setActions:actions forContext:UIUserNotificationActionContextMinimal];
    
        NSSet *categories = [NSSet setWithObjects:cate, nil];
        // 创建通知设置对象 
        UIUserNotificationSettings *set = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:categories];
        // 注册通知设置
        [[UIApplication sharedApplication] registerUserNotificationSettings:set];    
    }
    • 额外设置
    // 每隔多久重复发一次推送通知 
    @property(nonatomic) NSCalendarUnit repeatInterval; 
    // 点击推送通知打开app时显示的启动图片 
    @property(nonatomic,copy) NSString *alertLaunchImage; 
    // 附加的额外信息 
    @property(nonatomic,copy) NSDictionary *userInfo; 
    // 时区  (一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区)
    @property(nonatomic,copy) NSTimeZone *timeZone;
    • 其他操作

      • 获得被调度(定制)的所有本地推送通知
        @property(nonatomic,copy) NSArray scheduledLocalNotifications;
        • 已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除
      • 取消调度本地推送通知
        - (void)cancelLocalNotification:(UILocalNotification )notification;
        - (void)cancelAllLocalNotifications;
        
    • 注意事项
      • 在iOS 8.0+,如果要使用本地通知,需要得到用户的许可
        在didFinishLaunchingWithOptions方法中添加如下代码
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil]; 
    [application registerUserNotificationSettings:settings];

    三 远程通知

    • 什么是远程推送通知
      • 顾名思义,就是从远程服务器推送给客户端的通知(需要联网)
      • 远程推送服务,又称为APNs(Apple Push Notification Services)

    不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通知

    • 所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接
    • 什么是长连接
      • 只要联网了,就一直建立连接
    • 长连接的作用

      • 时间校准
      • 系统升级
      • 查找我的iPhone
      • …..
    • 远程推送步骤

      • 一.开发iOS程序的推送功能, iOS端需要做的事
        • 1.请求苹果获得deviceToken
        • 2.得到苹果返回的deviceToken,发送deviceToken给公司的服务器
        • 3.监听用户对通知的点击
      • 二.调试iOS的远程推送功能, 必备条件:
        • 1.真机
        • 2.调试推送需要的证书文件
          • 1> aps_development.cer : 某台电脑就能调试某个app的推送服务
          • 2> iphone5_qq.mobileprovision : 某台电脑就能利用某台设备调试某个程序
      • 三.发布具有推送服务的app
        • 1> aps_production.cer : 如果发布的程序中包含了推送服务,就必须安装这个证书
        • 2> qq.mobileprovision : 某台电脑就能发布某个程序
    • 远程推送应用配置过程(详细过程可参考真机调试)

      • 1.创建支持远程推送功能的App ID
      • 2.创建调试证书,并选中刚刚创建的App ID
      • 3.下载CER文件,并导入钥匙串管理
      • 4.创建发布证书,并选中刚刚创建的App ID
      • 5.下载CER文件,并导入钥匙串管理
      • 6.检查App ID,确认证书已经指定
      • 7.生成描述文件
    格式: {"aps":{"alert":"This is some fancy message.","badge":1,"sound":"default"}}
    • 远程推送应用程序开发过程

      • 1.新建应用程序
      • 2.指定AppID,在developer.apple.com上设置的AppID
    • 请求通知授权,获取deviceToken

      • 注意:只有真机可以进行调试,所以需要配置(调试证书,远程推送测试证书等)
      • 系统版本ios8之前和之后
    // 请求获取deviceToken   
      if (isIOS(8.0)) {
         // 请求权限
         UIUserNotificationSettings *set = [UIUserNotificationSettings settingsForTypes:7 categories:nil];
         [[UIApplication sharedApplication] registerUserNotificationSettings:set];
    
         // 请求获取deviceToken(自动根据设备UDID, bundleID, 发送请求, 获取deviceToken)
         [[UIApplication sharedApplication] registerForRemoteNotifications];
        }else {
    
         [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeNewsstandContentAvailability)];
        }
    // 当得到苹果的APNs服务器返回的DeviceToken就会被调用
    // 7040f7d5 5a974598 c5cf31b5 3e340b39 68affd25 122f0ce1 3f315226 396c2e5b
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
        NSLog(@"deviceToken是:%@", deviceToken);
    }
    /**
     *  接收到远程通知, 并且
     *  在前台,
     *  在后台, 点击通知
     *  锁屏, 滑动通知,
     *  app, 被彻底退出, 不执行这个方法, 应该 didFinishLaunchingWithOptions
     *  @param application 应用程序
     *  @param userInfo    额外信息
     */
    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
        NSLog(@"接收到通知");
    }

    四 第三方推送


    • 推送通知总结
      • 推送通知权限
        • iOS8.0之前直接发送就可以
        • iOS8.0之后,需要请求授权,注册通知设置项
      • 通知显示要求
        • 当app处于后台, 或者被彻底关闭, 以及锁屏状态下, 通知都可以被展示
        • 如果app处于前台, 那么通知就不会被展现出来

    五 应用间跳转

    • 什么是应用间跳转,应用场景

      • 1.使用第三方用户登录,需要用户授权,还需要”返回到调用的程序,同时返回授权的用户名”
      • 2.应用程序推广,网易彩票,设置-推荐应用-有很多应用程序图标如果本机已经安装过,会直接跳转到另外一个应用程序
        软件的广告,推广结果,后续会有一些列的金钱上的结算
      • 3.支付宝,第三方支付,淘宝,电话费充值。
    • 要打开本机上的其他应用程序,需要设置schemes,自定义的协议头

      • URL : 统一资源定位符
      • scheme(协议头) : 决定通过什么方式查找资源 http:// ftp:// tel:// file://
      • path(路径) : 资源路径 www.baidu.com 192.168.1.1/资源 110 /User/Desktop

    注意: URL可以没有路径,但是必须有协议头
    在跳转到某一个URL之前最好进行判断,是否可以打开

    • 默认情况下应用程序是没有自己的URL的,如果想要拥有自己的URL,需要设置URL
      • 项目–>info–>URL Types–>URL Scheme
        这里写图片描述
    • 要打开本机上的其他应用程序,需要设置schemes,自定义的协议头,可以打开其他的应用程序
      • 其他应用程序调用: application openURL:url
    - (IBAction)openWangyi:(id)sender
    {
        // 跳转到其他应用程序
        // schemes: 网易的scheme wangyi
        NSURL *url = [NSURL URLWithString:@"wangyi://view?newsid=201410130001"];
    
        // 判断本机是否安装了目标程序
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            [[UIApplication sharedApplication] openURL:url];
        } else {
            NSLog(@"没有安装,可以再给定下载地址,前往");
        }
    }

    注意事项:(iOS9.0+需要配置url白名单):
    在info.plist文件中添加LSApplicationQueriesSchemes 字段 ,是数组类型

    • 如果要返回调用的应用程序,需要知道调用我们的应用程序的scheme
    /** 只要是由其他应用程序打开的,就会调用此方法 */
    /** URL 就是其他应用程序,打开当前程序使用的URL */
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    
    /**
     openURL 是打开当前应用程序的url
     sourceApplication 是当开当前应用程序的源程序的BundleId
     提示:一旦重写了新方法,旧方法就不再被执行
     但是:很多第三方框架,都建议两个方法全都写
     */
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    • 经验: 常用APP对应的scheme
    weixin://dl/scan 扫一扫
    weixin://dl/moments 朋友圈
    weixin://dl/settings 设置
    weixin://dl/notifications 消息通知设置
    有道 yddict://
    随手记 fdmoney://
    Evernote evernote://
    QQ同步助手 qqpim://
    QQ mqq://
    淘宝taobao://
    点评dianping:// dianping://search
    微博 sinaweibo://
    名片全能王camcard://
    weico微博weico://
    支付宝alipay://
    豆瓣fm:doubanradio://
    微盘 sinavdisk://
    美团 imeituan://
    京冬openapp.jdmoble://
    我查查 wcc://
    有道词典yddictproapp://
    知乎zhihu://
    优酷 youku://

    六 社交分享

    • 什么是社交分析, 有什么作用?

      • 通过用户的分享,让更多的人去了解和使用这个App
      • 目前移动互联网应用程序推广的最重要手段之一
      • 属于口碑营销的范畴,经典成功案例是《疯狂猜图》
    • 如何实现社交分享

    • 利用iOS自带的Social.framework
    • 利用第三方的分享框架

    • 系统自带社交分享实现

      • 导入Social.framework
      • 代码实现
    // 1 .判断服务是否可用 
    [SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo] 
    // 2 .弹出分享内容输入界面 
    SLComposeViewController *cc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; [self presentViewController:cc animated:YES completion:nil]; 
    // 3 .额外设置 
    [cc setInitialText:@"测试文字"];  // 初始化文字 
    [cc addImage:[UIImage imageNamed:@"lufy"]];  // 配图
    • 第三方SDK实现(友盟分享) http://www.umeng.com/
      • 申请账号,创建应用
      • 下载SDK
      • 参照集成文档
    展开全文
  • 苹果推送通知服务

    千次阅读 2014-03-15 10:17:51
    推送通知的核心功能是苹果推送通知服务(简称APNs),它是iOS和OS X设备传输信息的一个可靠的、高效的服务。每台设备将一个可信任和加密的IP和该服务建立连接,通过这个连接接收通知。当应用程序没有运行时,这时候...
  • 推送通知策略分析

    2017-06-22 15:21:04
    导语: Slack 里负责搜索与人工智能的领导 Noah Weiss 的经验分享。...智能手机的发展已经有近十年时间了,而在移动设备中,推送通知的潜力不可小觑。在进入 Slack 之前,Weiss 曾在 Foursquare 工作。Weiss
  • ios推送通知

    2019-09-25 21:36:34
    推送通知,也被叫做远程通知,是在iOS3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示消息或下载数据的时候,通知是由...
  • IOS推送通知的实现步骤

    千次阅读 2013-12-28 02:19:03
    关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示消息或下载...
  • 想要用推送通知来一齐打开所有对象手机的特定APP。 有下列几种方案: ①APP1未启动,server发送APP1的推送通知,接收后自动启动APP1主进程(不需要人工操作)。 ②APP1未启动,server发送APP1的推送通知,...
  • 本文由泰然教程组新人1V1计划出品, 翻译人员:晓丫 &小样,...这是由iOS教程组成员Matthijs Hollemans撰写的一篇有关推送通知的教程,Matthijs Hollemans是一位有着丰富经验的iOS开发者和设计者。 在iOS系统里,
  • 其中的原因有很多,但是关于QQ推送太过杂乱是很多人的心病,所以今天特地来教大家各类推送在哪里可以关闭。 一、辅助功能 在QQ聊天中会出现很多花哨的画面,一些会员的特权:红名、铭牌、闪字,又或者各类的怼图...
  • 推送通知流程

    2014-12-24 11:59:33
    因为项目的需求,需要实现消息推送的功能,所以最近调研了很多有关消息推送的消息。 1、需要了解公钥和私钥 2、了解certificate、appid、Provisioning等的作用。 3.参考了网上不少资料,推送的整个过程参考...
  • IOS推送通知

    2014-12-11 11:45:37
     最近在研究ios的推送问题,遇到了一些问题,最终整理了一下。放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释。如下图   Provider就是我们自己程序的后台...
  • 如何设计好一条推送通知

    千次阅读 2016-04-14 16:43:24
    你注意过么,每天从不同的 App 上收到的大量的推送通知与提醒,这些通知里有多少你真的有兴趣?
  • 这个问题你一定想过,在移动用户体验设计领域中,如何设计好一条简单的推送通知。 你注意过么,每天从不同的 App 上收到的大量的推送通知与提醒,这些通知里有多少你真的有兴趣?每天,用户对各种没用的通知...
  • iOS -- 推送通知

    2014-06-25 15:49:53
    IOS推送通知的实现步骤 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示...
  • 实现Notification的通知栏常驻.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • iOS推送通知

    千次阅读 2013-01-01 02:55:08
    这是由iOS教程组成员Matthijs Hollemans撰写的一篇有关推送通知的教程,Matthijs Hollemans是一位有着丰富经验的iOS开发者和设计者。 在iOS系统里,应用程序在后台运行的时候有很多事情都做不了(译者注:由于沙盒...
  • ios开发-推送通知

    2012-12-13 09:35:58
    关于推送通知   推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示消息或...
  • 关于推送通知 来源:http://blog.csdn.net/enuola/article/details/8627283 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部...
  • IOS 推送通知和消息 php做推送服务端

    千次阅读 2013-04-11 22:43:12
    IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括:   Provider是指某个iPhone...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,060
精华内容 6,424
关键字:

关闭软件推送通知