zoukankan      html  css  js  c++  java
  • IOS开发之推送

    /*  推送

     

    分类

    • 1、远程推送(Remote Notification)

     

    • 2、本地推送 (Local Notification)    

      作用

    可以让APP不在前台,告知用户 APP内部发生了什么事

    效果

    1、没有效果

    2、在屏幕顶部 显示一块横幅(显示具体的内容)

    3、在屏幕的中间弹出一个AlertController(也是显示具体内容)

    4、在锁屏的时候,显示一块横幅

    5、可以更改APP上面显示的提醒数字

     

    - 播放音效

    - 推送通知的使用细节

    注意:发送推送通知的时候,如果APP在前台运行,那么推送的通知不会被呈现出来

         在发送通知之后,无论APP是打开,还是关闭,推送都能如期发出,但是用户 不一定能如期去接收

     

     */

    • 本地推送(本地通知)

    在iOS8之后,以前的本地推送写法可能会出错,接收不到推送的信息,

    如果出现以下信息:

    1 Attempting to schedule a local notification
    2 with an alert but haven't received permission from the user to display alerts
    3 with a sound but haven't received permission from the user to play sounds

    说明在IOS8下没有注册,所以需要额外添加对IOS8的注册方法,API中有下面这个方法:

    // Registering UIUserNotificationSettings more than once results in previous settings being overwritten.
    - (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings NS_AVAILABLE_IOS(8_0);

    这个方法是8.0之后才能使用的,所以需要判断一下系统的版本。

    第一步:注册本地通知:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        

        /*

         UIUserNotificationTypeNone    = 0,      无类型(不给用户发通知)

         UIUserNotificationTypeBadge   = 1 << 0, 是否可以改变应用图标右上角的提示数字

         UIUserNotificationTypeSound   = 1 << 1, 该通知是否会有声音

         UIUserNotificationTypeAlert   = 1 << 2, 是否有弹出提示

         */

        if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {

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

            [application registerUserNotificationSettings:settings];

        }

        

        if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {

            // 跳转

            UILabel *label = [[UILabel alloc] init];

            label.frame = CGRectMake(0, 300, 300, 300);

            label.backgroundColor = [UIColor redColor];

            label.text = [NSString stringWithFormat:@"%@", launchOptions];

            label.font = [UIFont systemFontOfSize:14];

            label.numberOfLines = 0;

            [self.window.rootViewController.view addSubview:label];

        }

        

        return YES;

    }

    /**
     *  点击通知打开应用的时候会执行该方法
     *  应用在前台的时候,收到通知也会执行该方法
     *
     *  @param notification 通知
     */
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
        UILabel *label = [[UILabel alloc] init];
        label.frame = CGRectMake(0, 0, 300, 300);
        label.backgroundColor = [UIColor colorWithRed:0.871 green:1.000 blue:0.797 alpha:1.000];
        label.text = [NSString stringWithFormat:@"%@", notification];
        label.font = [UIFont systemFontOfSize:14];
        label.numberOfLines = 0;
        [self.window.rootViewController.view addSubview:label];
        //    if (application.applicationState == UIApplicationStateBackground) {
        //
        //    }
    }

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

    {

        return YES;

    }

    这里我们添加两个方法,来进行推送消息的操作;

    /**
     *  点击按钮后添加本地通知
     */
    - (IBAction)addLocalNote;
    /**
     *  移除通知(不常用)
     */
    - (IBAction)removeLocalNote;

    实现方法(点击按钮之后添加本地通知):

    - (IBAction)addLocalNote {
        
        /*
         @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);
         @property(nonatomic,copy) NSString *alertBody;
         @property(nonatomic) BOOL hasAction;
         @property(nonatomic,copy) NSString *alertAction;
         @property(nonatomic,copy) NSString *alertLaunchImage;
         @property(nonatomic,copy) NSString *soundName;      UILocalNotificationDefaultSoundName
         @property(nonatomic) NSInteger applicationIconBadgeNumber;
         
         @property(nonatomic,copy) NSDictionary *userInfo;
         */
        // 1.创建一个本地通知
        UILocalNotification *localNote = [[UILocalNotification alloc] init];
        // 1.1.设置通知发出的时间
        localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
        // 1.2.设置通知发出的内容
        localNote.alertBody = @"我是一条推送消息";
        // 1.3.是否弹出提示框
        localNote.hasAction = YES;
        // 1.4.设置提示框
        localNote.alertAction = @"赶紧查看";
        // 1.5.设置启动的图片
        localNote.alertLaunchImage = @"backk.jpg";
        // 1.6.设置启动的音效
        localNote.soundName = UILocalNotificationDefaultSoundName;
        // 1.7.设置应用图标提醒的数字
        localNote.applicationIconBadgeNumber = 666;
        
        // 1.8.如果想将通知的信息传递过去,必须使用userInfo属性
        localNote.userInfo = @{@"msg" : @"吃饭了吗", @"date" : localNote.fireDate};
        // 2.调度通知
        [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
        
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
        
        
        
    
        
    }
    
    - (IBAction)removeLocalNote {
        [[UIApplication sharedApplication] cancelAllLocalNotifications];
        //    [UIApplication sharedApplication] cancelLocalNotification:(UILocalNotification *)
    }

    注意;在此也需要在真机上操作,因为模拟器,不显示。。。。。。

  • 相关阅读:
    串行化数据读取类(WebService下DataSet的高性能替代类)源代码
    如何在Access2007中打开加密的Access2003数据库
    业务流程不是需求(ZT)
    XML文件的DOCTYPE定义(转)
    别让Hibernate偷走了您的身份(转)
    有关Struts标签<html:cancel>使用的一点提示
    Silverlight下实现Windows8风格的进度条
    DotNetMock单元测试的利器
    进入ubuntu终端的快捷键
    花生壳域名建站,内网能访问,外网不能访问的解决办法
  • 原文地址:https://www.cnblogs.com/Biaoac/p/5329314.html
Copyright © 2011-2022 走看看