本地推送

简介: <p style="margin-top:0px; margin-bottom:0px; font-size:11px; line-height:normal; font-family:Menlo; color:rgb(209,47,27)"> <span style="color:#78492a">#import </span>"BaseViewController.h"</p> <

#import "BaseViewController.h"


@interface NotificagtionViewController : BaseViewController


// 设置本地通知

+ (void)registerLocalNotification:(NSInteger)alertTime;

+ (void)cancelLocalNotificationWithKey:(NSString *)key;



@property (weak, nonatomic) IBOutlet UIButton *mybutton;


@property (weak, nonatomic) IBOutlet UITextField *mytext;


@end





#import "NotificagtionViewController.h"


@interface NotificagtionViewController ()<UITextFieldDelegate>


@end


@implementation NotificagtionViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    

    

    // Do any additional setup after loading the view.

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


- (BOOL)textFieldShouldReturn:(UITextField *)textField{

    [self.view endEditing: YES];

    return  YES;

}


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

    [self.view endEditing: YES];

}



// 设置本地通知

+ (void)registerLocalNotification:(NSInteger)alertTime {

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

    // 设置触发通知的时间

    NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];

    NSLog(@"fireDate=%@",fireDate);

    

    notification.fireDate = fireDate;

    // 时区

    notification.timeZone = [NSTimeZone defaultTimeZone];

    // 设置重复的间隔

    notification.repeatInterval = kCFCalendarUnitSecond;

    

    // 通知内容

    notification.alertBody @"adfdsafsagsdfsebsd";

    notification.applicationIconBadgeNumber = 1;

    // 通知被触发时播放的声音

    notification.soundName = UILocalNotificationDefaultSoundName;

    // 通知参数

    NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"开始学习iOS开发了" forKey:@"key"];

    notification.userInfo = userDict;

    

    // ios8后,需要添加这个注册,才能得到授权

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {

        UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;

        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type

                                                                                 categories:nil];

        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

        // 通知重复提示的单位,可以是天、周、月

        notification.repeatInterval = NSCalendarUnitDay;

    } else {

        // 通知重复提示的单位,可以是天、周、月

        notification.repeatInterval = NSDayCalendarUnit;

    }

    

    // 执行通知注册

    [[UIApplication sharedApplication] scheduleLocalNotification:notification];

}



- (IBAction)gopush:(UIButton *)sender {

    [NotificagtionViewController registerLocalNotification:3];// 3秒后

}


// 取消某个本地推送通知

+ (void)cancelLocalNotificationWithKey:(NSString *)key {

    // 获取所有本地通知数组

    NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;

    

    for (UILocalNotification *notification in localNotifications) {

        NSDictionary *userInfo = notification.userInfo;

        if (userInfo) {

            // 根据设置通知参数时指定的key来获取通知参数

            NSString *info = userInfo[key];

            

            // 如果找到需要取消的通知,则取消

            if (info != nil) {

                [[UIApplication sharedApplication] cancelLocalNotification:notification];

                break;

            }

        }

    }

}



@interface AppDelegate ()


// 本地通知回调函数,当应用程序在前台时调用

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

    NSLog(@"noti:%@",notification);

    

    // 这里真实需要处理交互的地方

    // 获取通知所带的数据

    NSString *notMess = [notification.userInfo objectForKey:@"key"];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知(前台)"

                                                    message:notMess

                                                   delegate:nil

                                          cancelButtonTitle:@"OK"

                                          otherButtonTitles:nil];

    [alert show];

    

    // 更新显示的徽章个数

    NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;

    badge--;

    badge = badge >= 0 ? badge : 0;

    [UIApplication sharedApplication].applicationIconBadgeNumber = badge;

    

    // 在不需要再推送时,可以取消推送

    [NotificagtionViewController cancelLocalNotificationWithKey:@"key"];

}







目录
相关文章
|
Java 关系型数据库 MySQL
基于springboot的数码论坛系统设计与实现
基于springboot的数码论坛系统设计与实现
|
缓存 JavaScript 前端开发
前端工程化:优化JS加载速度
在现代Web应用中,JavaScript已成为必不可少的一部分,但是随着业务复杂度的增加,JS文件的体积也越来越大,导致网页加载速度变慢,影响用户体验。本文将介绍前端工程化的优化策略,以提高JS文件的加载速度。
181 2
|
存储 JSON 数据挖掘
PlistEdit Pro
PlistEdit Pro 是一款为 macOS 设计的属性列表(Plist)编辑器,它可以帮助用户直观且方便地查看、编辑和管理 Plist 文件。Plist 文件是 macOS 和 iOS 操作系统中许多应用程序和系统功能使用的配置文件格式,通常包含键值对、数组和字典等数据结构。
451 0
|
JSON 小程序 JavaScript
【微信小程序】——Mobx全局数据共享和分包
【微信小程序】——Mobx全局数据共享和分包
【微信小程序】——Mobx全局数据共享和分包
|
JavaScript
vue实现几秒后跳转新页面demo示例(整理)
vue实现几秒后跳转新页面demo示例(整理)
|
Linux Shell
打印文件或目录的数量
打印文件或目录的数量
95 1
|
JSON Java 应用服务中间件
GIS开发:nginx发布常用数据
GIS开发:nginx发布常用数据
527 0
|
消息中间件 NoSQL 数据可视化
【Redis基础知识 十三】Jedis的使用
【Redis基础知识 十三】Jedis的使用
242 0
|
JSON JavaScript 前端开发
javascript 模态框实现 -- HTML dialog 元素
在前端开发中模态框(对话框、弹出框)是很常见的场景,这篇文章介绍 javascript 多种实现模态框的方式之一,使用原生的 HTML dialog 元素实现。
3365 1
javascript 模态框实现 -- HTML dialog 元素
|
前端开发
React工作19:react设置默认值
React工作19:react设置默认值
306 0