访问已关闭/忽略的上次收到的推送通知

时间:2012-06-29 06:29:45

标签: iphone ios ipad push-notification

我成功地能够在我的设备上收到类型为alert的推送通知。

1。活动状态或应用程序位于前台

didReceiveRemoteNotification方法正在调用应用程序。在这里我可以访问收到的通知消息。

2。 In-Active State OR App处于后台

推送通知的消息显示在带有“查看”和“视图”的警告框中。 “关闭”按钮。

一个。点击“查看”按钮后调用didReceiveRemoteNotification方法。我再次可以访问收到的通知消息。

湾单击“关闭”按钮,消息将消失。在这种情况下,我没有关于上次收到的推送通知的任何处理程序。

第3。应用程序不在后台或应用程序未运行

与案例2相同。

4。 iPhone处于睡眠模式

警报显示消息但没有“查看”或“关闭”按钮。

一个。在UI上,它将显示“Slide to View”。如果用户与手机互动,则会打开该应用。我可以访问收到的通知消息。

湾如果用户不进行交互并允许手机进入睡眠模式或手动将手机置于睡眠模式,则iOS下次显示“滑动解锁”消息。在这里,我没有任何最后一次推送通知的处理程序。

如何访问案例2.b和4.b的最后一次推送通知,是否有任何我最不需要实现的方法。

编辑1:下面是我的appDelegate代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[Test1ViewController alloc] initWithNibName:@"Test1ViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    // For PUSH NOTIFICATION
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    if (launchOptions != nil)
    {
        NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary != nil)
        {
            NSLog(@"Launched from push notification: %@", dictionary);
        }
    }


    return YES;
}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
    NSLog(@"Received notification: %@", userInfo);
    // Received Notification at here ....
    // Now based on response further to do ...
}

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}

谢谢, J61

1 个答案:

答案 0 :(得分:3)

操作系统会处理徽章。但是,如果用户驳回您的推送通知,您的应用可以查看服务器上的消息,并在错过用户解雇的任何通知时以适当的方式处理它。

取自here,这是您处理通知的方式:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
   // get state
   UIApplicationState state = [application applicationState];
   if (state == UIApplicationStateActive) {
      // App is in foreground
   } else {
      // App is suspended
   }

   application.applicationIconBadgeNumber = 0;
}

修改 如果您想自动增加您的徽章编号,您需要自己跟踪计数。您可以在您的服务器上执行此操作。如果您的推送消息不包含徽章计数iOS will remove it from your application