您的位置:首页 > 移动开发 > IOS开发

[iuud8]ios不同版本下推送本地通知

2016-04-13 17:33 387 查看
“推送很重要,无论是本地还是服务器”。虽然我看不出来,但毕竟产品经理强烈那么说,那就当他很重要好了。。。。

本地推送之前首先需要申请权限,在ios8以后与ios8以后是两套不同的API

//推送
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)
{
if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes] == UIRemoteNotificationTypeNone) {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeSound];
}
}
else
{
if ([[UIApplication sharedApplication]currentUserNotificationSettings].types==UIUserNotificationTypeNone) {
[[UIApplication sharedApplication]registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
}

把这段话注册到
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
函数中去,这样,在程序第一次启动的时候,如果没有通知权限,就是弹出提示,向用户来请求权限;

以上就是请求权限的不同版本处理!!!

发送推送的时候就不需要在区别系统版本了,可以一套代码解决

//定义本地通知对象
UILocalNotification *notification=[[UILocalNotification alloc]init];

//设置调用时间
NSDate *now = [NSDate date];
notification.fireDate=[now dateByAddingTimeInterval:10.0];//通知触发的时间,10s以后
//使用本地时区
notification.timeZone=[NSTimeZone defaultTimeZone];
//通知重复次数
notification.repeatInterval=1;
//设置通知属性
notification.alertBody=@"殿下,您的体力回满了。"; //通知主体
notification.applicationIconBadgeNumber=1;//应用程序图标右上角显示的消息数
notification.alertAction=@"打开应用"; //待机界面的滑动动作提示
// notification.alertLaunchImage=@"Default";//通过点击通知打开应用时的启动图片,这里使用程序启动图片
notification.soundName= UILocalNotificationDefaultSoundName;//通知声音
notification.applicationIconBadgeNumber = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]+1;

//设置用户信息
//add key 给这个通知增加key 便于半路取消。nfkey这个key是我自己随便起的。
// 假如你的通知不会在还没到时间的时候手动取消 那下面的两行代码你可以不用写了。
NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:100],@"nf_powerFull",nil];
[notification setUserInfo:dict];

//调用通知
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

[notification release];


很简单的代码;两点需要注意的
notification.applicationIconBadgeNumber就是应用图标上右上角那个小红点,表示收到的推送数量,因为,我们在启动游戏或者从后台激活游戏的时候,需要重新设置它为0
[[UIApplication sharedApplication]setApplicationIconBadgeNumber:0];

第二点:
[notification setUserInfo:dict];如果还没开始推送的时候,用户就主动点开应用了,此时如果想主动取消该条推送的话就该用到这条设置的属性了
NSArray *narry=[[UIApplication sharedApplication] scheduledLocalNotifications];
NSUInteger acount=[narry count];
if (acount<1) {
return;
}
for (int i=0; i<acount; i++) {
UILocalNotification *myUILocalNotification = [narry objectAtIndex:i];
NSDictionary *userInfo = myUILocalNotification.userInfo;
NSNumber *obj = [userInfo objectForKey:@"nf_powerFull"];
int mytag=[obj intValue];
if (mytag==100) {
[[UIApplication sharedApplication] cancelLocalNotification:myUILocalNotification];
return;
}
}
这样,我们就可以移除指定的一条推送。当然还有一种简单粗暴的方法:
[[UIApplication sharedApplication] cancelAllLocalNotifications];

直接移除掉所有的本地推送。

以上!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 本地推送 ios