已经工作许多年了。
分类: 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:方法
解锁后,会以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:方法。
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时要判断该值