ios推送通知之本地推送
来源:互联网 发布:c语言从右至左的运算符 编辑:程序博客网 时间:2024/04/30 02:50
本地推送,ios8和以往ios7有些变化,多了一些注册相关的步骤。如下:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; [application registerUserNotificationSettings:settings]; }
如果是ios7就不用上面的代码了
其中UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound是枚举变量,表示要推送的是图标右上角显示的消息数量,手机下拉通知栏的消息,推送的声音。具体的一些变量用法可以自行在xcode里浏览。
简单做个例子:
首先介绍一个方法好让后面的部分理解
推送的程序写在在程序启动时的一个方法中执行的 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions
在这个方法中值得注意的一点是launchOptions这个变量,如你们可见,它是一个NSDictionary*类型的变量,重点就是这里。如果我们正常启动程那么launchOptions是空值,在这里正常启动就是点击应用图标或者xcode run进入的意思。如果是其他方式进入,launchOptions就不为空,具体什么情况进入的,就赋值为不同的值。
- 在控制器中新建一个button ,作用是发送一个通知。button连线到这个方法里
- (IBAction)addLocalNote:(id)sender { // 1.创建一个本地通知相关属性可以自定义设置 UILocalNotification *localNote = [[UILocalNotification alloc] init]; // 2.设置本地通知的一些属性(通知发出的时间/通知的内容) // 2.1.设置通知发出的时间 localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5.0]; // 2.2.设置通知的内容 localNote.alertBody = @"吃饭了吗?"; // 2.3.设置锁屏界面的文字 localNote.alertAction = @"查看具体的消息"; // 2.4.设置锁屏界面alertAction是否有效 localNote.hasAction = YES; // 2.5.设置通过点击通知打开APP的时候的启动图片(无论字符串设置成什么内容,都是显示应用程序的启动图片) localNote.alertLaunchImage = @"111"; // 2.6.设置通知中心通知的标题 localNote.alertTitle = @"222222222222"; // 2.7.设置音效 localNote.soundName = @"buyao.wav"; // 2.8.设置应用程序图标右上角的数字 localNote.applicationIconBadgeNumber = 1; // 2.9.设置通知之后的属性 localNote.userInfo = @{@"name" : @"张三", @"toName" : @"李四"}; // 3.调度通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNote];}
- 通知会在这个方法中接受到- (void)application:(UIApplication )application didReceiveLocalNotification:(UILocalNotification )notification。
在这个方法中我没写下如下代码
if (application.applicationState == UIApplicationStateActive) return; if (application.applicationState == UIApplicationStateInactive) { // 当应用在后台收到本地通知时执行的跳转代码 UILabel *redView = [[UILabel alloc] init]; redView.backgroundColor = [UIColor redColor]; redView.frame = CGRectMake(0, 100, 300, 400); redView.numberOfLines = 0; // redView.text = [NSString stringWithFormat:@"%@", launchOptions]; [self.window.rootViewController.view addSubview:redView]; //同时打印之前设置的信息 NSLog(@"%@", notification);
nslog打印了之前button里面设置的东西。
其中UIApplicationStateActive表示程序在前台,UIApplicationStateInactive表示程序即将进入时的状态。上面的判断的用意就是如果程序在前台就不用显示通知。但是下拉通知栏中还是显示。如果程序运行在后台的话,手机就会弹出通知,当我们点击通知,便会进入程序。然后视图中便会创建一个redView(看上述代码)。
但是如果我们点击了按钮然后马上把程序被杀死了,通知还会继续吗,答案是当然的。大家应该没有忘记刚开始的lauchOPtions这个变量吧,我们在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中加入如下代码
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) { // 当被杀死状态收到本地通知时执行的跳转代码 // [self jumpToSession]; UILabel *redView = [[UILabel alloc] init]; redView.backgroundColor = [UIColor redColor]; redView.frame = CGRectMake(0, 100, 300, 400); redView.numberOfLines = 0; redView.text = [NSString stringWithFormat:@"%@", launchOptions]; [self.window.rootViewController.view addSubview:redView]; UIView *jj=[[UIView alloc] initWithFrame:CGRectMake(0, 200, 100, 100)]; jj.backgroundColor=[UIColor yellowColor]; [self.window.rootViewController.view addSubview:jj]; }
之所以将打印信息写在label中是因为当程序被杀死的那一刻,xcode就不能调试了,只是程序自己在跑。所以为了方便就把信息写在label中方便查看button按钮传递过来的数据。
- ios推送通知之本地推送
- IOS本地推送通知
- IOS 本地推送通知
- iOS 本地推送通知
- iOS推送 之 本地通知UILocalNotification
- ios (推送)之本地推送
- ios (推送)之本地推送
- iOS推送之本地推送
- ios推送之本地推送
- 推送通知-本地推送
- IOS 本地推送通知方法
- ios推送:本地通知UILocalNotification
- ios推送:本地通知UILocalNotification
- ios推送:本地通知UILocalNotification
- ios推送:本地通知UILocalNotification
- ios推送:本地通知UILocalNotification
- iOS 本地推送通知 UILocalNotification
- ios推送:本地通知UILocalNotification
- 可拖动按钮
- 人月神话读后感
- 周记——20150831
- 反转链表
- Memory coherence
- ios推送通知之本地推送
- sprintf小记
- 黑马程序员——41,打印流,合并流,对象序列化,管道流,RandomAccessFile
- 【Nginx】基于TCP的反向代理
- 面向对象的多态性(3)
- Eclipse启动Tomcat错误
- CH13
- 关于ListView循环播放的一些事情
- php soap https 登录 复杂请求 上海资信 金融p2p Error cannot find parameter <faultstring>Function ' not found