打开应用时检索APNS的通知

时间:2015-10-26 10:04:31

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

我不确定是否有人遇到过这种情况,但它是这样的:

我已经完成了APNS,该应用确实收到了通知。当我从通知中打开应用程序(调用appDidReceiveRemoteNotification:)时,它工作正常。

奇怪的是,当app在后台时,它会收到通知(显示在通知框中)。当我通过点击图标(而不是通知)打开应用程序时,调试器没有停在appDidReceiveRemoteNotification:appDidFinishLaunchWithOption:,因此我的通知未保存。当我再次按下通知框并点击通知时,调试器会按预期停在appDidReceiveRemoteNotification:。如何通过应用程序图标上的打开应用程序更新通知?

**编辑**

感谢abhinav,我意识到我错过了使用这种方法。我应该使用

- (void)applicationWillEnterForeground:(UIApplication *)iApplication // Or 
- (void)applicationDidBecomeActive:(UIApplication *)iApplication.

但是,我的应用程序是设计显示服务器可以向用户发送消息(关于更新,新闻......)。像这样的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//....
    if (launchOptions) {
        NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary) {
            [Message saveMessage:dictionary];

            NSLog(@"Launched from push notification: %@", dictionary);
        }
    }
//....
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    // Save message to coredata.
    [Message saveMessage:userInfo];

    // Perform seggue, showing inbox viewcontrollers here.
}

但是当背景中的打开应用程序没有提供通知字典时,这两种方法都使用,我的老板要求我在从背景打开应用程序时更新coredata,我怎么能这样做?或者我应该告诉我的老板不能被收购?我们不希望用户错过有关更新的通知。

2 个答案:

答案 0 :(得分:3)

你想要做什么?如果您想更新应用程序的徽章数,那么您只需要在applicationDidBecomeActive中将应用程序徽章数设置为0:

清除通知面板中的通知使用以下代码: -

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

答案 1 :(得分:2)

这里的通知案例没有什么不同。当应用程序在后台并且用户点击应用程序图标时,无论是否收到推送通知,您都会收到以下方法的回电。

- (void)applicationWillEnterForeground:(UIApplication *)iApplication
- (void)applicationDidBecomeActive:(UIApplication *)iApplication

application:didFinishLaunchingWithOptions:是在应用程序启动时调用的方法 - 第一次触发或通知。当通过通知点击唤醒应用程序时,appDidReceiveRemoteNotification:会被调用。

所以,回答你的问题 - 你正在经历iOS的自然行为!!!

修改

如果我是你,我会去找我的老板并解释iOS的工作方式。礼貌地告诉他不可能。在后台,除非用户打算查看已发送的通知,否则iOS不允许您获取详细信息。