推送通知数据检索

时间:2012-05-18 10:59:15

标签: iphone ios push-notification apple-push-notifications

我想从推送通知消息中获取数据。当应用程序处于前台和后台时,我成功获取数据。但是当应用程序退出并且用户按下推送通知上的查看按钮时,我无法获取数据。我在应用程序中编写代码完成启动。按下推送通知消息的“查看”按钮时,此代码会导致应用程序崩溃。如果我评论代码,那么应用程序不会崩溃。请在退出应用程序时帮助我从推送通知中获取数据,并在推送通知时按用户按下查看按钮。我真的很感激。

if(launchOptions != nil){
        NSDictionary *tmpDic = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (tmpDic!=nil) {
            pushedMessage=[NSString stringWithFormat:@"%@",[[tmpDic objectForKey:@"aps"] objectForKey:@"alert"]];
            pushedCountry=[NSString stringWithFormat:@"%@",[tmpDic objectForKey:@"country"]];
            [self saveToDatabase];
        }
    }

5 个答案:

答案 0 :(得分:1)

请试试这个......

将此代码添加到appdelegate.m => didFinishLaunchingWithOptions

if ([launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]) {

    [self application:application didReceiveRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]];

}

答案 1 :(得分:1)

从ios7我们有以下委托方法来处理应用程序处于后台或未运行时的推送通知

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler 

答案 2 :(得分:0)

我并不完全明白你的要求,但是你可以通过应用代理中的某个功能进行操作。

- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self addMessageFromRemoteNotification:userInfo updateUI:YES];
}

现在您可以将该数据添加到核心数据或sqlite。这可能与您的问题无关,但根据您在问题中提出的问题,这是我能给出的最好的。

答案 3 :(得分:0)

单击“查看”按钮时

- (void)application:(UIApplication*)application didReceiveRemoteNotification:      (NSDictionary*)userInfo
{
}

调用此方法, userinfo 将包含所有数据

您在 didfinishlaunch 方法中执行的操作在 didReceiveRemoteNotification:

中执行

答案 4 :(得分:0)

请参阅我对上述答案的评论。

以下是Apple的文档:

  

如果在推送通知到达时应用程序未运行,则该方法   启动应用程序并提供相应的信息   启动选项字典。该应用程序不会调用此方法来处理   推送通知。相反,你的实施   application:willFinishLaunchingWithOptions:或   application:didFinishLaunchingWithOptions:方法需要得到   推送通知有效载荷数据并做出适当的响应。

所以你需要实现:

- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo

以及处理中的launchOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions