美文网首页
push代理失效——热启动和冷启动表现不一致

push代理失效——热启动和冷启动表现不一致

作者: 三千烦恼风_eefa | 来源:发表于2020-05-08 21:07 被阅读0次

    冷启动:指app被后台杀死后,在这个状态打开app,这种启动方式叫做冷启动。

    热启动:指app没有被后台杀死,仍然在后台运行,通常我们再次去打开这个app,这种启动方式叫热启动。

    冷启动流程:
    一般而言,大家把iOS冷启动的过程定义为:从用户点击App图标开始到appDelegate didFinishLaunching方法执行完成为止。这个过程主要分为两个阶段:

    T1:main()函数之前,即操作系统加载App可执行文件到内存,然后执行一系列的加载&链接等工作,最后执行至App的main()函数。
    T2:main()函数之后,即从main()开始,到appDelegate的didFinishLaunchingWithOptions方法执行完毕。

    背景:
    因为调整了消息权限通知的位置,将消息注册的方法:


    image.png

    从appDelegate移动到TabBarController中,但是center.delegat指定的是TabBarController,没有指定 [TBClientAppDelegate getAppDelegate],(刚开始注册和代理方法都在appDelegate中

    导致问题:
    (热启动)点击push的通知,原本会调起app并刷新首页,导致接受推送通知的application:didReceiveRemoteNotification:不执行;

    (冷启动)点击push通知,却执行了,因为冷启动走的是didFinishLaunchingWithOptions,传入的参数都在launchOptions中

    iOS 程序启动时总会调用[application:didFinishLaunchingWithOptions:],其中第二个参数launchOptions为NSDictionary类型的对象,里面存储有此程序启动的原因。

    1 若用户直接启动,lauchOptions内无数据;
    2 若由其他应用程序通过openURL:启动,则UIApplicationLaunchOptionsURLKey对应的对象为启动URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey对应启动的源应用程序的bundle ID (NSString);
    3 若由本地通知启动,则UIApplicationLaunchOptionsLocalNotificationKey对应的是为启动应用程序的的本地通知对象(UILocalNotification);
    4 若由远程通知启动,则UIApplicationLaunchOptionsRemoteNotificationKey对应的是启动应用程序的的远程通知信息userInfo(NSDictionary);
    5 其他key还有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
    6 UIApplicationLaunchOptionsNewsstandDownloadsKey。
    
    ①.当程序处于关闭状态收到推送消息时,点击图标会调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 这个方法,那么消息给通过launchOptions这个参数获取到。
    
    ②.当程序处于前台工作时,这时候若收到消息推送,会调用- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法
    
    ③.当程序处于后台运行时,这时候若收到消息推送,如果点击消息或者点击消息图标时,也会调用- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法
    
    ④.当程序处于后台运行时,这时候若收到消息推送,如果点击桌面应用图标,则不会调用didFinishLaunchingWithOptions和didReceiveRemoteNotification方法,所以无法获取消息
    

    原文:https://www.cnblogs.com/DanteBarnett/p/5421059.html

    相关文章

      网友评论

          本文标题:push代理失效——热启动和冷启动表现不一致

          本文链接:https://www.haomeiwen.com/subject/fnbqnhtx.html