iOS开发——Push Notification(二)

说好的(二)是用来介绍push证书的制作流程的,不过一直没有时间,所以这次趁着一个关于语音呼叫的项目刚刚出了push的坑,所以用小篇幅记录一下iOS成功收到push之后会发生什么事儿。

在收到了消息后,此时,app状态+后续操作 进入程序,可以大致分成下面四种:

  1. 程序完全没有启动+点击push消息;
  2. 程序在后台运行,即处在didEnterBackground的生命周期中+点击push消息;
  3. 程序正在前台运行+点击push消息。
  4. 无论处在何种状态+点击桌面图标。
锁屏状态,都一样。
貌似就这几种情况,其中第四种没有把app状态分出来,只把后续操作“点击桌面”分为一个类。

情况1
程序完全没有启动,此时启动程序还是要首先直接调用AppDelegate中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

其中,launchOptions带有启动信息,用它就能判断是否是通过点击push消息启动的程序,具体处理就是如下:

//程序在未启动时通过点击push消息的方式进入程序
    if (launchOptions) {
        NSDictionary* pushNotificationKey = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (pushNotificationKey) {
           //our code;
        }
    }


情况2

    程序在后台,比如刚刚按过home,或者其他程序正在Active,这时点击push消息,就不会进入didFinishLaunching中,而是调用

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo代理函数

其中,有好多资料说程序处于“运行”时点击push也会调用这个代理函数,不知道这个“运行”是否指的是Active状态,但是我在active状态是收不到push的,不过确实在上面这个函数中可以进行一下判断:点击push时程序处于active还是inactive,如下:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    
    NSLog(@"Remote notification UserInfo : %@",userInfo);
    application.applicationIconBadgeNumber = 0 ;
    if (application.applicationState == UIApplicationStateActive) {
        NSLog(@"--------active when tap push info");
        //程序当前正处于前台
    }
    else if(application.applicationState == UIApplicationStateInactive)
    {
        NSLog(@"--------inactive when tap push info");
    }
}

对于情况2,在点击push消息进入程序后,会执行else if部分的内容。


情况3

    上一段提到了,其实我在前台运行时没有收到push消息,可能哪里没有满足条件,如果有的话,则在上面代码的if中执行自己的处理代码就好了。


情况4

    点击桌面图标貌似没有办法获取push消息以及其携带的内容,感觉若要实现还得具体问题具体分析。比如,微信的视屏通话,点击push消息进入程序,如果对方没有挂断,是会直接进入等待接听界面的;这时如果点击桌面图标进入程序,虽然也是直接进入等待接听画面,但是我观察到两者的出现的方式不一样,前者由无到有的效果出现,后者像是通过modal进入的。所以我猜测,后者的情况可能和微信收到普通消息,再通过点击桌面进入是一样的处理方式——通过一种独特的pull方法,是否需要实现这个独特的方法,就看各个app具体的需求了,假如一个新闻类的app推送了消息,如果用户点击这个push,则会进入这个新闻的页面,但是如果仍然点击桌面图标进入程序,是不会进入push推送过来的那条新闻的页面里的,你说4不4? 

    所以说,这种情况,真实的需求会有,但是没有固定的方法(比如一定会存在代理函数自动被调用)实现,如果想实现,还要针对需求通过具体的设计实现!






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值