5

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

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];
        }
    }
4

5 回答 5

1

请试试这个...

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

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

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

}
于 2015-03-21T07:32:24.963 回答
1

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

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler 
于 2015-05-08T11:39:37.363 回答
0

我不完全理解您的要求,但是您可以使用应用程序委托中的功能来处理正在推送的内容

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

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

于 2012-05-20T13:02:07.387 回答
0

当您单击查看按钮时

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

调用此方法,用户信息 将包含所有数据

您在didfinishlaunch方法中所做的事情在 didReceiveRemoteNotification 中执行

于 2012-07-18T11:50:44.303 回答
0

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

这是Apple的文档:

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

所以你需要实现:

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

以及在以下位置处理启动选项:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
于 2014-03-28T05:06:42.010 回答