您好, , 海量一手媒体资源,专业、正规、高效,为企业提供一站式营销推广服务!
温馨提示
运营小帮手
一站式互联网营销服务平台
  全国免费咨询热线
0755-23071973
运营小帮手
软文发稿
PC端 选择媒体
更方便、更快捷!
查看媒体价格
软文发布、软文代写、百科制作、问答营销、微信营销、微信营销
查看媒体价格
当前位置: 运营小帮手首页 > 新闻中心 > 文章正文

iOS本地推送通知

这个是很久之前在CSDN上发布过的文章了,现在整理放到新的个人博客上。本篇文章是讲如何操作本地推送,若使用过程中出现任何问题,可以加群提出或者在评论中提出。

iOS版本兼容

在iOS8之后,以前的本地推送写法可能会出错,接收不到推送的信息, 如果出现以下信息:

  1. Attempting to schedule a local notification

  2. with an alert but haven’t received permission from the user to display alerts

  3. with a sound but haven’t received permission from the user to play sounds

说明在iOS8下没有注册,所以需要额外添加对IOS8的注册方法,API中有下面这个方法:

//RegisteringUIUserNotificationSettingsmorethanonceresultsinprevioussettingsbeingoverwritten.
-(void)registerUserNotificationSettings:(UIUserNotificationSettings*)notificationSettingsNS_AVAILABLE_IOS(8_0);

这个方法是8.0之后才能使用的,所以需要判断一下系统的版本。

本地通知三步法

  • 第一步:注册本地通知

  • 第二步:处理通知回调

  • 第三步:取消某个推送或者全部推送

注册本地通知

//设置本地通知
+(void)registerLocalNotification:(NSInteger)alertTime{
UILocalNotification*notification=[[UILocalNotificationalloc]init];
//设置触发通知的时间
NSDate*fireDate=[NSDatedateWithTimeIntervalSinceNow:alertTime];
NSLog(@"fireDate=%@",fireDate);

notification.fireDate=fireDate;
//时区
notification.timeZone=[NSTimeZonedefaultTimeZone];
//设置重复的间隔
notification.repeatInterval=kCFCalendarUnitSecond;

//通知内容
notification.alertBody=@"该起床了...";
notification.applicationIconBadgeNumber=1;
//通知被触发时播放的声音
notification.soundName=UILocalNotificationDefaultSoundName;
//通知参数
NSDictionary*userDict=[NSDictionarydictionaryWithObject:@"开始学习iOS开发了"forKey:@"key"];
notification.userInfo=userDict;

//ios8后,需要添加这个注册,才能得到授权
if([[UIApplicationsharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]){
UIUserNotificationTypetype=UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound;
UIUserNotificationSettings*settings=[UIUserNotificationSettingssettingsForTypes:type
categories:nil];
[[UIApplicationsharedApplication]registerUserNotificationSettings:settings];
//通知重复提示的单位,可以是天、周、月
notification.repeatInterval=NSCalendarUnitDay;
}else{
//通知重复提示的单位,可以是天、周、月
notification.repeatInterval=NSDayCalendarUnit;
}

//执行通知注册
[[UIApplicationsharedApplication]scheduleLocalNotification:notification];
}

处理通知回调

处理通知回调,这个是在appdelegate中的代理方法回调:

//本地通知回调函数,当应用程序在前台时调用
-(void)application:(UIApplication*)applicationdidReceiveLocalNotification:(UILocalNotification*)notification{
NSLog(@"noti:%@",notification);

//这里真实需要处理交互的地方
//获取通知所带的数据
NSString*notMess=[notification.userInfoobjectForKey:@"key"];
UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"本地通知(前台)"
message:notMess
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertshow];

//更新显示的徽章个数
NSIntegerbadge=[UIApplicationsharedApplication].applicationIconBadgeNumber;
badge--;
badge=badge>=0?badge:0;
[UIApplicationsharedApplication].applicationIconBadgeNumber=badge;

//在不需要再推送时,可以取消推送
[HomeViewControllercancelLocalNotificationWithKey:@"key"];
}

取消某个推送

//取消某个本地推送通知
+(void)cancelLocalNotificationWithKey:(NSString*)key{
//获取所有本地通知数组
NSArray*localNotifications=[UIApplicationsharedApplication].scheduledLocalNotifications;

for(UILocalNotification*notificationinlocalNotifications){
NSDictionary*userInfo=notification.userInfo;
if(userInfo){
//根据设置通知参数时指定的key来获取通知参数
NSString*info=userInfo[key];

//如果找到需要取消的通知,则取消
if(info!=nil){
[[UIApplicationsharedApplication]cancelLocalNotification:notification];
break;
}
}
}
}

源代码

大家可以到我的GITHUB下载Demo,地址为:https://github.com/CoderJackyHuang/LocalPush

推荐阅读

segmentfault上有一篇细说iOS消息推送讲得挺详细的,这是讲解APNS的文章,还有360doc里的一篇iOS推送小结文章讲得也不错!

关键词:

猜您可能需要的服务: