本地推送

简介: <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"];

}







目录
相关文章
|
8月前
|
开发工具 git 开发者
|
8月前
|
开发工具 git
gitee提交代码Commit和Push时窗口不小心关了,怎么继续推送提交?
gitee提交代码Commit和Push时窗口不小心关了,怎么继续推送提交?
66 0
|
Shell 开发工具 git
Git推送大文件失败?你晓得如何解决嘛?
Git推送大文件失败?你晓得如何解决嘛?
|
7月前
|
Shell 网络安全 开发工具
git实现服务器自动push拉取代码--webhooks
git实现服务器自动push拉取代码--webhooks
596 1
|
6月前
|
开发工具 git
vscode 将已修改代码提交推送git时一直转圈也没有反馈
vscode 将已修改代码提交推送git时一直转圈也没有反馈
691 0
|
8月前
|
开发工具 C语言 数据安全/隐私保护
git提交代码到远端仓库的方法详解
git提交代码到远端仓库的方法详解
|
缓存 网络安全 开发工具
极简并优雅的在IDEA使用Git远程拉取项目和本地推送项目
极简并优雅的在IDEA使用Git远程拉取项目和本地推送项目
1055 0
|
iOS开发 开发者
远程推送
远程推送
273 0
远程推送
|
存储 网络安全 开发工具
将本地的Git仓库推送到远程仓库的两种方式
https协议仓库地址:https://github.com/用户名/仓库名.git ssh协议仓库地址:git@github.com/用户名/仓库名.git 如何利用远程仓库地址向远程仓库中推送内容?
1831 0