注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梦幻雪冰

技在手,能在身,思在脑,从容过生活——陈能堡

 
 
 

日志

 
 

【转载】iOS本地通知小结  

2014-12-24 22:54:06|  分类: iOS专题 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自红Q《iOS本地通知小结》
关于iOS通知这一块,以前一直被我忽略,到底什么原因导致我忽略它呢?我想通过下面这张图来解释一下。  
                                           iOS本地通知小结 - 红Q - Gods girl
通过上图大家有没有注意到iOS模拟器和iphone的区别?模拟器的功能是相对较少的,可以设置的选项也相对的少了很多。我想说明的是模拟器并没有接受通知的功能,也没有对通知事项的设置功能。因此,学iOS开发的同学要明确的是要想做通知的测试必须用真机测试,由于教学当中设备的限制,所以这块经常演示一下就一带而过,由于这方面的缺失,所以想通过博客的形式来和大家分享一下我的使用心得。
要事先说明一下,iOS的通知包括本地通知和远程推送,来达到提醒用户做关注某些动态或者去完成某些任务。本地通知和远程通知在实现上是不一样的,本地通知相对简单,所以,我先来做一下本地通知的分享,下一篇继续分享远程推送。
首先,来看一下iPhone本地通知的效果
iOS本地通知小结 - 红Q - Gods girl
 
iOS本地通知小结 - 红Q - Gods girl
本地通知和日常生活中我们设定闹钟提醒我们起床是一个道理的。我们需要设置闹钟什么时候闹铃,闹铃的提醒内容是“赶快起床,不然上班迟到了”,闹铃只响一次还是每隔10分钟响一次,这些是基本的设置项目,类似闹钟的提醒设置,本地通知的设置也是一样。接着,我们来看看实现本地通知我们要认识的几个类,和一个代理事件。
UILocalNotification 这是一个本地通知的类。我们可以在Xcode中,按command 并单击这个类名进入UILocalNotification.h去查看它拥有的属性,通过设置它的属性,我们可以达到和设置闹钟闹铃一样的效果。
UIApplication 这是一个app应用类,通过这个类我们可以获得当前我们创建的app,它就像是一个闹钟一样,可以有序的安排所有提醒事项。比如说我们设置闹钟7点叫我起床,8点提醒我吃早饭,9点提醒我开始上班。闹钟就会分别在7点,8点,9点准时的闹铃提醒我。app也可以做到同样的效果,准时的触发所有的本地通知。
到此为止,我们还需要了解一个UIApplicationDelegate代理方法:didReceiveLocalNotification。当闹铃响的时候,我们要去处理一下闹铃响的这个事件,去看看闹铃,闹铃应该会显示提醒的内容,接着我们可以选择关掉闹铃或者让它过几分钟再次提醒之类的操作。而我提到的这个代理方法也是要达到这样的处理效果。当用户点击本地通知iPhone自动进入应用,此时这个代理方法就会被调用,我们可以在里面实现一些用户响应事件的处理,比如说开始学习某单元的课程,开始玩游戏……
最后,我想和大家一起共享一下本地通知的代码和一些使用注意事项:


//  AppDelegate.m


//  Test本地通知


#import "AppDelegate.h"


@implementation AppDelegate


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


{


    // Override point for customization after application launch.


    // 创建一个本地推送


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


    //设置60秒后(1分钟)

    NSDate * pushDate = [NSDate dateWithTimeIntervalSinceNow:60];


    if (notification != nil) {


        // 设置推送时间(1分钟后)

        notification.fireDate = pushDate;


        // 设置时区

notification.timeZone = [NSTimeZone defaultTimeZone];


        // 设置重复间隔

        notification.repeatInterval = kCFCalendarUnitMinute;


        // 推送声音

        notification.soundName = UILocalNotificationDefaultSoundName;


        // 推送内容

        notification.alertBody = @"推送内容hello啊,吃饭了吗";

        notification.alertAction = @"ok";


        //显示在icon上的红色圈中的计数总共有几条通知。

        notification.applicationIconBadgeNumber = 1;


        //设置userinfo 方便在之后需要撤销的时候使用

        NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"];

        notification.userInfo = info;


        //添加推送到UIApplication(类似于给闹钟添加闹铃事件)。

        UIApplication *app = [UIApplication sharedApplication];

        [app scheduleLocalNotification:notification];


    }


    return YES;


}


//通过通知消息点开应用后要做的处理事件

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

{


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知弹窗提示" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];


    [alert show];


    // 图标上的数字减1

//application.applicationIconBadgeNumber -= 1;


}


//我们可以手动的去设置开/关应用的所有通知,也可以通过代码的形式在某个合适的时候移除某个通知或所有通知,为了代码展示的方便起见我直接在应用被关掉的代理中实现。

- (void)applicationWillTerminate:(UIApplication *)application

{


    // 获得 UIApplication

    UIApplication *app = [UIApplication sharedApplication];


    //获取本地推送数组

    NSArray *localArray = [app scheduledLocalNotifications];


    //声明本地通知对象

    UILocalNotification *localNotification;


    if (localArray) {


        for (UILocalNotification *noti in localArray) {


            NSDictionary *dict = noti.userInfo;


            if (dict) {


                NSString *inKey = [dict objectForKey:@"key"];


                if ([inKey isEqualToString:@"对应的key"]) {


                    if (localNotification){


                        localNotification = nil;


                    }


                    localNotification = noti;


                    break;


                }


            }


        }

      //判断是否找到已经存在的相同key的推送

        if (!localNotification) {


            //不存在初始化

          localNotification = [[UILocalNotification alloc] init];


        }

        if (localNotification) {


            //取消推送

            [app cancelLocalNotification:localNotification];

            return;

        }  

    }

}

@end


注意事项:当应用第一次运行在真机上,会询问用户是否接收该应用的通知提醒,一定要点击确定,才能接收到通知。因为一般情况下下载一个应用时,笨笨的我是不会接收通知的,所以本能的拒绝通知提醒,拒绝了之后还傻乎乎的疑问:为什么,为什么没有通知。检查了半天,才反应过来,我自己关闭了通知提醒。所以,又屁颠屁颠的去找iPhone的
->设置->通知->对应的应用,点击应用,进入打开通知。
应用本地通知可以做些什么呢?通常做些日历,或者记事本的提醒业务,或者直接实现一个闹钟。通过上述的demo学习,希望大家更有创意的提出设想,并且应用本地通知实现一些有意思的功能。记得,一定要和我分享哈。
  评论这张
 
阅读(18)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017