当出现背景时,推送通知警报不显示

时间:2014-11-30 23:01:19

标签: ios objective-c apple-push-notifications

我在我的app委托中获得了以下代码,以显示UIAlertView中Push通知中包含的文本。

当应用程序仍然在后台加载时,代码工作正常,但是,一旦应用程序退出后台,通知就不会出现。

比我更聪明的人能告诉我哪里出错了,我需要做些什么来解决它?

app Delegate.m:

@synthesize pushText;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [Parse setApplicationId:@"hGG5RdgNVdI7eCeZynV32lWYXywQRHkpp5zLdY7Q"
                  clientKey:@"TwmNbpBYEt4u3euE3lzNIgwyroSl8RPGF2dJFsPv"];

    // Register for Push Notitications, if running iOS 8
    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                        UIUserNotificationTypeBadge |
                                                        UIUserNotificationTypeSound);
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                                 categories:nil];
        [application registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];
    } else {
        // Register for Push Notifications before iOS 8
        [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                         UIRemoteNotificationTypeAlert |
                                                         UIRemoteNotificationTypeSound)];
    }
    return YES;

    NSMutableArray *alertTextArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"alertTextArray"];
    NSDictionary *notifKey = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];

    if (notifKey)
    {
        [alertTextArray addObject:[notifKey objectForKey:@"alert"]];

    }
    [[NSUserDefaults standardUserDefaults] setObject:alertTextArray forKey:@"alertTextArray"];







}

- (void)applicationWillResignActive:(UIApplication *)application
{
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    if (currentInstallation.badge != 0) {
        currentInstallation.badge = 0;
        [currentInstallation saveEventually];
    }
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:deviceToken];
    [currentInstallation saveInBackground];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [PFPush handlePush:userInfo];
    pushText = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"News", "")
                                                    message:pushText
                                                   delegate:nil
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles: nil];
    [alert show];




}


@end

2 个答案:

答案 0 :(得分:2)

您的意思是当应用程序处于Foreground(=正在运行)时,通知警报不显示?

这实际上是设计和iOS通知的工作原理。 如果应用程序正在运行,则不会显示通知警报,应由您的应用程序以对您的应用程序有意义的方式显示它们。

答案 1 :(得分:1)

当应用重新启动时,您会获得带有推送信息的字典,它位于启动选项中,请检查文档。

ps:将我的评论复制为答案