【问题标题】:iOS Push Notifications handleiOS 推送通知句柄
【发布时间】:2015-06-28 13:44:16
【问题描述】:

寻找有关推送通知处理的良好做法。 目前在我的应用程序中,我正在处理 didFinishLaunchingWithOptionsdidReceiveRemoteNotification 代表中的推送通知。 我注意到当应用程序“死亡”时收到推送通知时,两种处理逻辑都在“触发”。 我在后台模式下的远程通知标志在我的应用程序中为 ON。 有处理这种情况的好习惯吗?为什么我在 didFinishLaunchingWithOptions(launchOptions) 中获取推送数据,并且 didReceiveRemoteNotification 也被调用?据我所知,当应用程序“死”时,didReceiveRemoteNotification 不会被调用。

【问题讨论】:

    标签: ios objective-c iphone push-notification


    【解决方案1】:

    didReceiveRemoteNotification 在收到通知以及从通知中打开应用时调用。如果您的应用已死且根本未打开,则不会触发后台下载。您遇到的是 didReceiveRemoteNotification 因为您点击了通知而被调用。您需要做的是向该方法添加一些逻辑,以查看应用处于什么状态并在那里处理您的通知。

    即:

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
    {
    
    
        if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
    
            [[NSNotificationCenter defaultCenter] postNotificationName:@“inactivePush" object:nil];
    
    
        }
    
        else if([UIApplication sharedApplication].applicationState==UIApplicationStateActive){
    
    
    
            [[NSNotificationCenter defaultCenter] postNotificationName:@"appOpenPush" object:nil];
    
    
        }
    
        //When the app is in the background
        else {
    
    
    
        }//End background
    
    }
    
    }
    

    第一种情况是应用程序处于非活动状态(通过推送打开),第二种情况是应用程序实际打开时,第三种情况是应用程序处于后台时。我使用 NSNotifcation 作为示例,但您可以使用任何您想要的处理代码。我添加最后一个 if 案例的原因是因为您可以将后台/下载代码放在那里,这样它就不会下载两次,即如果您收到通知然后点击它。

    【讨论】:

    • 嗨,我有类似的情况,但需要稍作修改,但就像我收到推送通知时一样,应用程序将在后台激活并执行中给出的任务,- (void)application:( UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo ,但在用户点击通知之前,我的应用程序不会激活。那么,当应用程序处于后台时,我将如何完成这项工作?有人知道这个的解决方案吗?
    猜你喜欢
    • 2017-04-19
    • 2011-08-07
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多