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

标签 iphone ios ipad push-notification

我成功地在我的设备上接收到警报类型的推送通知。

1. Active State OR App在前台

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

2. In-Active State OR App在后台

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

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

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

3. 应用不在后台或应用未运行

与案例 2 相同。

4. iPhone处于 sleep 模式

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

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

湾。如果用户不进行交互并允许手机进入休眠模式或手动将手机置于 sleep 模式,则下次 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

最佳答案

操作系统会处理角标(Badge)。但是,如果用户关闭了您的推送通知,您的应用程序可以查看服务器上的消息并在错过任何用户关闭的通知时以适当的方式处理它。

取自 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;
}

编辑:
如果您想自动增加您的角标(Badge)编号,您需要自己跟踪计数。您可以在您的服务器上执行此操作。如果您的推送消息不包含角标(Badge)计数,iOS will remove it from your application .

关于iphone - 访问上次收到的已关闭/忽略的推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11257076/

相关文章:

javascript - 在 iPad iOS 11.4 上的 Mobile Safari 中滚动期间触摸事件仅触发 "once"

iphone - iPhone 应用程序中的 map 集成

iphone - 哪个选项给我更好的性能 : a variable declaration or an implicit function in iOS

iphone - NSUserDefaults 写入磁盘?

iphone - 如何从服务器导入图像并将其排列在 View 中

objective-c - 向弹出框的 uibarbuttonitem 添加自定义 View

iphone - 控制 iPhone 上的自动更正 View 位置

ios - 仅在给定时间段内进行本地通知

ios - Swift:在带有完成按钮的文本框上弹出 DatePicker

html - 动态视口(viewport)元标记 ios