Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 推送通知数据检索_Iphone_Ios_Push Notification_Apple Push Notifications - Fatal编程技术网

Iphone 推送通知数据检索

Iphone 推送通知数据检索,iphone,ios,push-notification,apple-push-notifications,Iphone,Ios,Push Notification,Apple Push Notifications,我想从推送通知消息中获取数据。当应用程序在前台和后台时,我成功地获取了数据。但我无法获得数据时,应用程序是退出和用户按下查看按钮的推送通知。我在应用程序启动完成后编写代码。当按下推送通知消息的查看按钮时,此代码会导致应用程序崩溃。如果我对代码进行注释,则应用程序不会崩溃。请帮助我从推送通知获取数据时,应用程序退出和用户按下查看按钮推送通知。我会非常感激的 if(launchOptions != nil){ NSDictionary *tmpDic = [launchOptions

我想从推送通知消息中获取数据。当应用程序在前台和后台时,我成功地获取了数据。但我无法获得数据时,应用程序是退出和用户按下查看按钮的推送通知。我在应用程序启动完成后编写代码。当按下推送通知消息的查看按钮时,此代码会导致应用程序崩溃。如果我对代码进行注释,则应用程序不会崩溃。请帮助我从推送通知获取数据时,应用程序退出和用户按下查看按钮推送通知。我会非常感激的

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

我不完全理解你的要求,但你可以通过应用程序代理中的一个函数来处理正在推送的内容

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

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

当您单击“查看”按钮时

- (void)application:(UIApplication*)application didReceiveRemoteNotification:      (NSDictionary*)userInfo
{
}
调用此方法,userinfo将包含所有数据


您在didfinishlaunch方法中所做的事情在DidReceivereMotentification:

查看我对上述答案的评论

这是苹果公司的文件:

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

因此,您需要实施:

- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo
以及在以下位置处理启动选项:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
请试试这个

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

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

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

}

在ios7中,我们使用下面的委托方法来处理应用程序处于后台或未运行时的推送通知

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

您在Ios 4和Ios 5中工作您的意思是在Ios 4和Ios 5中不可能?请登录tmpDic并签入设备控制台您是否尝试了
-(void)应用程序:(UIApplication*)应用程序didReceiveMemotentification:(NSDictionary*)用户信息获取完成处理程序:(void(^)(UIBackgroundFetchResult结果))处理器
自从iOS 7发布以来?苹果公司的严格实施。