Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87974
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 157
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-24 16:42
个人简介

已经工作许多年了。

文章分类

全部博文(21)

文章存档

2017年(10)

2015年(3)

2013年(8)

我的朋友

分类: iOS平台

2013-09-05 10:09:43

在iphone锁机的状态下分3种情况:

1) 你的app没有运行。这时如果来了push message,

解锁后,就会自动运行该app。执行到application:didFinishLaunchingWithOptions:方法时notification info包含在参数launchOptions里

2) 你的app运行在background。这时如果来了push message,


解锁后,自动切换该app,并以notification info作为参数调用application:didReceiveRemoteNotification:方法


3) 你的app运行在foreground。这时如果来了push message,



解锁后,会以notification info作为参数调用application:didReceiveRemoteNotification:方法




在iphone不是锁机的状态下分3种情况


1) 你的app没有运行。这时如果来了push message,


> 如果你click "Launch" in alert notification window,或是在notification area里click 与你的app相关的notification,那么就会运行该app,执行到application:didFinishLaunchingWithOptions:方法时notification info包含在参数launchOptions里

> 如果你click "Close" in alert notification window,或是没有在notification area里click 与你的app相关的notification,而是直接click app icon来打开app,执行到application:didFinishLaunchingWithOptions:方法时notification info并不会包含在参数launchOptions里


2) 你的app运行在background。这时如果来了push message,

> 如果你click "Launch" in alert notification window,或是在notification area里click 与你的app相关的notification,那么就会切换到app,并以notification info作为参数调用application:didReceiveRemoteNotification:方法

> 如果你click "Close" in alert notification window,或是没有在notification area里click 与你的app相关的notification,而是直接click app icon来打开app,则不会调用application:didReceiveRemoteNotification:方法

3) 你的app运行在foreground。这时如果来了push message,

Nothing happens on the screen and no sound is played,只会通过delegate来以notification info作为参数来调用application:didReceiveRemoteNotification:方法


另外,在不是锁机,当push message来的时候,


1)若之前app是没有运行的,则执行到application:didFinishLaunchingWithOptions:方法时notification info并不会包含在参数launchOptions里。

2)若之前app有在背景


注意:

目前好像无法通过代码来控制你的app的notification状态的开启和关闭,user只能够在settings > notification里手动设置。而且你也无法在app里获取当然你的app的notificaiton的状态是开启还是关闭。


现在mobile cap app有一个需求是:若user不想每个push message都收到,而是只收取每天下午5点的schedule push message。那么不能够通过disable整个notification,而应该在app设置一个选项来供user选择是否只收5点的push message(by default is NO),当user修改该选项的值时,必须要能上网,因为修改该选项应该send request to server来修改存储在server的对应user的这个选项的值。server在push message时要判断该值



收到push notification时,它会存储在iPhone顶部的notification area。当你再次进入app后,那些属于该app的notification不会从notification area里删除。怎样才能删除它
解决方法是:在application:didFinishLaunchingWithOptions:方法,application:didReceiveRemoteNotification:方法以及那些把app从后台调到前台trigger的方法(因为如果不经notification切换app,就不会调用didReceiveRemoteNotification方法)里适当的加上一行代码来设置badge number=0
  1. [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];  
就会删除notification area里属于该app的所有notifications。

注意,调用了上面那行之后,即使再设置badge number不为0,
  1. [[UIApplication sharedApplication] setApplicationIconBadgeNumber:3];  
也会清除所有notifications
阅读(3399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~