iOS几种设计模式 -通知简介

iOS几种设计模式之-通知

这里要讲的通知并不是NSNotification,而是用于基于行为的通知UILocalNotification(本地通知)和远程通知,主要用来当程序在后台运行时,通过本地或者远程通知传送给用户。至于NSNotification一般用来在不同页面传值或者响应事件,在后边的博客中会讲到的。

1.本地通知

本地通知(local notification),用于基于行为的通知,比如有关日历提醒一类的应用。同时如果应用程序不在前台运行,本地通知也是一个很有用的机制。比如,一个应用,在后台运行,向应用的服务器端获取消息,当消息到达时,比如下载更新版本的提示消息,通过本地通知机制通知用户。

本地通知时UILocalNotification的实例,主要有三类属性:

1.scheduled time 时间周期,用来指定iOS系统发送通知的日期和时间;

2.notification type ,通知类型,包括警告信息,动作按钮的标题,应用图标上的badge(数字标记)和播放的声音;

3.自定义数据,本地通知可以包含一个dictionary类型的本地数据

注意:iOS最多允许最近本地通知数量是64个,超过限制的本地通知将被忽略。

1.1 iOS的四种通知类型

1.横幅(Banner) 横幅通知是在iOS5中出现的新特性,是显示在屏幕顶部的横条,几秒钟会自动消失。一条横幅通知会显示程序的小图标,程序的名字和通知的内容。小图标可以帮助用户一眼就看清楚是哪一个程序在提醒他们。

2.提醒(Alert) 提醒通知不会自动消失,需要用户与之交互才能关闭。设计师需要设计通知的具体内容,有时还要action button设计title。整个提醒通知的背景样式,包括里面的按钮的样式都是不可变的,所以设计师和开发者就不要发挥创意了。Android由于其开放性,我们是可以自己设计控件的,而iOS这样做可能是为了保持UI风格的一致性。

3.标记(Badge)

标记通知是显示在程序图标的右上角的红色椭圆形标记,里面显示的数字表示需要用户处理的通知的数量。同样地,标记地颜色和形状、大小也是不可更改地。app store中有更新地应用程序的数量,mail中收到的未读邮件的数量都是用标记通知用户的。

4.声音(Sound)

声音提示也是iOS的一种通知方式,支持自定义,可以与前面的三种通知类型搭配使用。

1.2 本地通知Demo

//当应用程序在后台运行的时候, 本地通弹出, 当用户点击通知框上的Action按纽的时候, 这个委托方法将会被调用

(void)application:(UIApplication )application didReceiveLocalNotification:(UILocalNotification )notification
{ 
NSDictionary *usrInfo = notification.userInfo; 
NSLog(@"%@",[usrInfo objectForKey:@"From"]); 
}

//viewController的viewDidLoad方法

(void)viewDidLoad { 
[super viewDidLoad];
UILocalNotificationlocalNotification = [[UILocalNotification alloc] init]; 
NSDatenowDate = [NSDate new]; 
//设置通知的响应时间 
localNotification.fireDate = [nowDate dateByAddingTimeInterval:5]; localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
localNotification.alertBody = @"六点半开始上课"; 
localNotification.alertAction = @"知道了"; 
//通知声音为自己本地下载好的声音 
localNotification.soundName = @"msgcome.wav"; 
localNotification.applicationIconBadgeNumber = 2; 
NSDictionary *usrInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"From",@"Value", nil]; 
localNotification.userInfo = usrInfo;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

}

当运行程序后,按home健返回到主界面,这个时候程序在后台运行,几秒钟后可以收到通知提醒。

2.远程推送通知

1.应用程序的推送通知机制:

该应用的远程服务(provider)先发出一条通知给苹果的推送通知服务(Apple Push Notification service,APNS),苹果的通知服务器再把这个通知推送给所以安装了这个应用的iOS设备。

2.通知类型

如果要使用推送通知,必须先在苹果的推送通知服务里注册你要使用哪几种类型的通知。

注:必须在真机上才能测试和运行,同时需要安装远程推送证书,这个大家需要注意,不然X-code一直会报错。

3.具体过程:

1.app首先向手机注册远程通知,自己可以确定注册通知的类型。

2.device向APNS发送一个连接请求,目的是请求到一个device token,APNS收到请求后,返还给device一个device token。

3.device把token发送给provider(服务器),服务器把通知传送给APNS,通过远程服务再把这个通知推送给所有安装了这个应用的iOS设备。

注意:测试只能在真机上测试,并且需要一个远程推送通知证书,没有证书是不能推送的,在编译的时候就会报错。

4.一个简单的demo
第一步

在appdelegate中

    //注册通知 

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

[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound ]; 

return YES;

 } 

//注册成功之后,回调此方法

- (void)application:(UIApplication )application didRegisterForRemoteNotificationsWithDeviceToken:(NSData)deviceToken {

 NSLog(@"%@",deviceToken); 

} 

//失败后回调此方法,我们把失败的内容打印出来

- (void)application:(UIApplication )application didFailToRegisterForRemoteNotificationsWithError:(NSError)error {

 NSLog(@"%@",error);

 } 

//收到远程通知之后,会回调此方法

(void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo { 

NSLog(@"%s",func); 

}

第二步

创建远程推送证书以及本地配置文件,这个操作网上有很多教程,大家可以自己去看看。

第三步

在取到deviceToken后,需要把这个deviceToken发送给provider,也就是一个服务器,这里我给大家推荐一个用OC写的第三方provider,我把它放在了gitHub上进行了托管,大家可以去这个链接上下载。

去这个链接去下载:链接

或者直接在命令行中输入:

git clone https://github.com/papercai/RemotePushProvider.git


运行起来之后,输入取到的deviceToken,就可以收到APNS发送来的通知,可以是铃声或者程序右上方红色的数字或者横幅和标记等。

3.需要注意的几点

1.保证标记的内容时最新的

2.对同一事件不要发出多个通知

3.通知内容不用包含应用程序的名称

4.关注于信息的表达,而不是用户的操作。避免提示用户去点哪一个按钮或者如何打开app

5.简短,最好不要超过两行。

6.使用句式大写和合适的标点符号,结尾一般使用句号。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值