【问题标题】:How to get Application states in iOS 10 notification?如何在 iOS 10 通知中获取应用程序状态?
【发布时间】:2017-01-25 10:52:21
【问题描述】:

我正在使用

userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler

为了在 iOS 10 中获取通知响应,谁能告诉我如何获取其中的应用程序状态?

因为在 iOS 9 或之前我使用过

application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

在这个方法中,我们可以通过

application.applicationState

感谢您的帮助。

【问题讨论】:

    标签: ios objective-c ios10 nsusernotificationcenter


    【解决方案1】:

    我做了一些搜索,我得到了这些方法

     - (void)userNotificationCenter:(UNUserNotificationCenter *)center  
    willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{  
    NSLog( @"for handling push in foreground" );  
    // Your code
    NSLog(@"%@", notification.request.content.userInfo); //for getting response payload data
    }  
    
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response  withCompletionHandler:(void (^)())completionHandler   {  
    NSLog( @"for handling push in background" );  
    // Your code
    NSLog(@"%@", notification.request.content.userInfo); //for getting response payload data 
    } 
    

    【讨论】:

    • 还有第三种状态——UIApplicationState.Inactive,与Background略有不同,即app被强制关闭时的状态。知道我们如何检查 UNUserNotificationCenter
    【解决方案2】:

    类似这样的:

    NSString * state = @"Unknown";
    UIApplication *application = [UIApplication sharedApplication];
    if ( application.applicationState == UIApplicationStateInactive ) {
        //The application received the notification from an inactive state, i.e. the user tapped the "View" button for the alert.
        //If the visible view controller in your view controller stack isn't the one you need then show the right one.
        state = @"UIApplicationStateInactive";
    }
    
    if(application.applicationState == UIApplicationStateActive ) {
        //The application received a notification in the active state, so you can display an alert view or do something appropriate.
        state = @"UIApplicationStateActive";
    }
    
    if(application.applicationState == UIApplicationStateBackground ) {
        state = @"UIApplicationStateBackground";
    }
    

    【讨论】:

    • UIApplication *application = [[UIApplication sharedApplication].applicationState]; 这行会出错,因为[[UIApplication sharedApplication].applicationState] 将返回UIApplicationState 而不是UIApplication
    • 当然,只是快速打字
    【解决方案3】:

    您可以从项目中的任何位置获取应用程序的状态,例如,

       UIApplication *applicaiton = [UIApplication sharedApplication];
    
    if (applicaiton.applicationState  == UIApplicationStateBackground) {
    
        NSLog(@"background state");
    }
    

    就像你可以使用UIApplicationStateActive,UIApplicationStateInactive etc 来获取各自的状态一样

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 2016-05-18
      • 2021-08-07
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多