iOS--本地通知快捷回复方式

苹果在iOS8之后有了全新的通知机制,当我们收到推送的消息时,或者锁屏的时候,让用户快捷的对通知进行操作,实现的效果图如下:

下面我们就来实现这个效果:

首先在页面上添加一个按钮,点击按钮发送本地通知,

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(100, 100, 100, 100);
    btn.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:btn];

    [btn addTarget:self action:@selector(btnAct:) forControlEvents:UIControlEventTouchUpInside];
    

按钮实现方法:

- (void)btnAct:(UIButton *)btn{

    // 1. 创建消息上要添加的动作,以按钮的形式显示
    // 1.1 接受按钮
    UIMutableUserNotificationAction *acceptAction = [UIMutableUserNotificationAction new];
    acceptAction.identifier = @"acceptAction"; // 添加标识
    acceptAction.title = @"接受"; // 设置按钮上显示的文字
    acceptAction.activationMode = UIUserNotificationActivationModeForeground; // 当点击的时候启动程序

    // 1.2 拒绝按钮
    UIMutableUserNotificationAction *rejectAction = [UIMutableUserNotificationAction new];
    rejectAction.identifier = @"rejectAction";
    rejectAction.title = @"拒绝";
    rejectAction.activationMode = UIUserNotificationActivationModeBackground; // 当点击的时候不启动程序
    rejectAction.authenticationRequired = YES; // 需要解锁才能处理,如果 rejectAction.activationMode = UIUserNotificationActivationModeForeground; 那么这个属性将被忽略
    rejectAction.destructive = YES; // 按钮事件是否是不可逆转的

    // 2. 创建动作的类别集合
    UIMutableUserNotificationCategory *categorys = [UIMutableUserNotificationCategory new];
    categorys.identifier = @"alert"; // 动作集合的标识
    [categorys setActions:@[acceptAction, rejectAction]
               forContext:UIUserNotificationActionContextMinimal]; // 把两个按钮添加到动作的集合中,并设置上下文样式

    // 3. 创建UIUserNotificationSettings,并设置消息的显示类型
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:[NSSet setWithObjects:categorys, nil]];

    // 4. 注册通知
    [[UIApplication sharedApplication] registerForRemoteNotifications];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

    // 我们使用本地通知为例,介绍如何显示出通知栏
    UILocalNotification *notification = [UILocalNotification new];

    if (notification != nil) {
        notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:2]; // 触发时间
        notification.alertAction = @"alertAction"; // 定义查看通知的操作名
        notification.hasAction = YES;
        notification.alertBody = @"测试推送的快捷回复(通知的正文内容:武哥最帅)";
        notification.soundName = UILocalNotificationDefaultSoundName; // 通知的背景声
        notification.applicationIconBadgeNumber = 1; // 强迫症们最讨厌的图标左上角那个小数字
        notification.category = @"alert";
        notification.userInfo = @{@"key1": @"value1", @"key2": @"value2"}; // 给通知绑定一些处理通知时需要的额外的信息

        // 根据触发事件的配置展示通知消息
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];
        // 立即发送通知到手机
        // [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
    }

}

然后我们需要在AppleDelegate协议方法里面做其他的事情:

// 成功注册通知后,会有回调方法,方法写在AppDelegate里
#pragma mark - 成功注册通知后会调用此方法
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    // 成功注册registerUserNotificationSetting: 后,回调方法
    NSLog(@"成功注册%@", notificationSettings);
}

#pragma mark - 收到本地推送后调用的方法
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    // 收到本地消息后调用的方法
    NSLog(@"收到本地消息后调用的方法%@", notification);

    // 图标上的数字减1
    application.applicationIconBadgeNumber -= 1;
}

#pragma mark - 通知事件处理的回调方法
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler
{
    // 在非App页面收到本地消息,下拉消息会有快捷回复的按钮,点击后调用的方法,根据identifier来判断点击的是哪个按钮,notification为消息内容
    NSLog(@"%@ --- %@", identifier, notification);

    if ([identifier isEqualToString:@"acceptAction"]) {

        NSLog(@"点击了接收按钮");
        FirstViewController *firstVc = [[FirstViewController alloc]init];

        UINavigationController *naVc = [[UINavigationController alloc]initWithRootViewController:firstVc];

        self.window.rootViewController = naVc;

    }else{

        NSLog(@"点击拒绝的按钮");
    }

    // 处理完消息后,最后一定要调用这个代码块
    completionHandler();
}

这样就实现了...

时间: 2024-10-10 18:29:37

iOS--本地通知快捷回复方式的相关文章

IOS 本地通知

在苹果的Mac OSX 和IOS开发的API中有三个不同的"通知",包括:广播通知,本地通知和推送通知. 本地通知只是应用所在设备上给用户通知,而推送通知是远程通知,他是由远程服务器推送过来的 本节主要是讲的本地通知,虽然本地通知并没有任何的网络通信,但是他在编程方面与后面要介绍的推送通知非常相似.我们的例子中有三个按钮,"计划通知开始"按钮开启计划通知,他在10秒钟后到达."停止所有计划通知"按钮式停止和取消已经开始的计划通知."立刻

IOS 本地通知UILocalNotification

//发送通知    UILocalNotification *notification=[[UILocalNotification alloc] init];       if (notification!=nil) {         NSDate *now=[NSDate new];         notification.fireDate=[now dateByAddingTimeInterval:10];//10秒后通知        notification.repeatInterv

xamarin.ios 本地通知推送

由于ios10版本以后UILocalNotification被标为弃用了,所以要添加新的本地通知推送功能,下面提供一些代码参考. 一.先在AppDelegate.cs上注册本地通知推送功能. 1 public override bool FinishedLaunching(UIApplication app, NSDictionary options) 2 { 3 global::Xamarin.Forms.Forms.Init(); 4 global::ZXing.Net.Mobile.For

iOS本地通知UILocalNotification

1.本地通知的定义和使用: 本地通知是UILocalNotification的实例,主要有三类属性: scheduled time,时间周期,用来指定iOS系统发送通知的日期和时间: notification type,通知类型,包括警告信息.动作按钮的标题.应用图标上的badge(数字标记)和播放的声音: 自定义数据,本地通知可以包含一个dictionary类型的本地数据. 对本地通知的数量限制,iOS最多允许最近本地通知数量是64个,超过限制的本地通知将被iOS忽略.  代码如下 复制代码

iOS本地通知:UILocalNotification

最近在做一个电商的APP,话说今年电商很火啊. 用到了本地通知,特此整理一下 添加一个本地通知到系统中,代码如下: // 初始化本地通知对象 UILocalNotification *notification = [[UILocalNotification alloc] init]; if (notification) { // 设置通知的提醒时间 NSDate *currentDate = [NSDate date]; notification.timeZone = [NSTimeZone d

IOS 本地通知 UILocalNotification

1.增加一个本地推送 //设置20秒之后  NSDate *date = [NSDate dateWithTimeIntervalSinceNow:20];     //chuagjian一个本地推送     UILocalNotification *noti = [[[UILocalNotification alloc] init] autorelease];     if (noti) {         //设置推送时间         noti.fireDate = date;     

iOS 本地通知存放是否共用

做本地通知时,想的问题:读取本地通知数组会不会读取到别的软件的通知,或者说本地通知,是不是存放在手机里同一位置. 按理来说是存放在各自的沙盒里面,互不相关. 但写了个小代码测试一下 这两个代码   除了名字不一样   功能完全一样 上面的按钮,点击会增加一条本地推送. 下面的按钮,标题显示本地推送的个数 在其中一个中加入四条本地通知 另一边个数仍然为0 那么结果出来了,本地通知互不干扰.

iOS(本地通知与远程通知)

iOS 推送通知有两种:本地推送.远程推送. 本地推送 :  在不需要联网的情况下,由APP发出推送,常用于某一时刻的通知,如闹钟.本地通送有局限性在于当APP处于后台或者退出时就无法发出通知. 远程推送:   APNs和第三方推送,第三方推送最终也需要APNs转发, 本地推送实现 注册通知: float sysVer = [[UIDevice currentDevice].systemVersion floatValue]; if (sysVer < 10) { //设置通知类型 弹框.脚标.

iOS本地通知

今天项目中用到了消息推送第一次做这方方面的内容先记录下来. 这个项目采用的时第三方的极光推送按照极光的文档配置好后, 当有推送时会在以下方法中收到服务器的推送通知,以及推送消息内容. - (void)networkDidReceiveMessage:(NSNotification *)notification { NSDictionary *userInfo = [notification userInfo]; NSDictionary *extras = userInfo[@"extras&q