Ios 哪个推送通知导致应用程序从后台恢复

Ios 哪个推送通知导致应用程序从后台恢复,ios,objective-c,apple-push-notifications,Ios,Objective C,Apple Push Notifications,我的应用程序会收到APNS推送通知,当用户收到多个NSNotification,他应该能够根据点击的NSNotification在特定视图中打开应用程序 所以在方法上 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler: (void (^)(

我的应用程序会收到
APNS推送通知
,当用户收到多个
NSNotification
,他应该能够根据点击的
NSNotification
在特定视图中打开应用程序

所以在方法上

- (void)application:(UIApplication *)application 
        didReceiveRemoteNotification:(NSDictionary *)userInfo 
        fetchCompletionHandler:
           (void (^)(UIBackgroundFetchResult))completionHandler
我添加了此代码以保存所有通知

if (self.notifications == nil) {
        self.notifications = [[NSMutableArray alloc] init];
    }

    [notifications addObject:userInfo];
每次应用程序再次激活时,它都会这样做

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) 
    // while the application was inactive.
    // If the application was previously in the background, 
    // optionally refresh the user interface.
    [notifications removeAllObjects];
    application.applicationIconBadgeNumber = 0;
}

在移除所有对象并将徽章设置为零之前,我想处理是哪个
NSNotification
使我的应用程序从后台打开的。一旦我得到了它是哪个推送
NSNotification
,我想将所有数据传递到一个特定的视图。

如果您不使用新的iOS7后台获取通知

-(void)applicationIDBECOMEACTIVE:(UIApplication*)应用程序中
从通知数组中删除所有对象之前,请检查通知

NSDictionary * myNotification = [notifications lastObject]; 
if (myNotification)
{
 // is last notification 
}

Is将起作用,因为应用程序只接收用户点击它的通知

发送推送通知、数据,并在应用程序接收时使用它

在本例中,我使用图像文件和警报,并将其发送到为此通知注册的所有视图

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

    //Posting the notificaiton to the use, if its valid:

    NSDictionary *returnDic = [userInfo objectForKey:@"aps"];


    if (![returnDic objectForKey:@"alert"]) {
        return;
    }
    NSString *alert = [NSString stringWithFormat:@"%@",[returnDic objectForKey:@"alert"]];

    if (![returnDic objectForKey:@"MagnetID"]) {
        return;
    }

    NSString *magnetImage = [returnDic objectForKey:@"MagnetImage"];

    NSDictionary *dictionaryToSend = [NSDictionary dictionaryWithObjectsAndKeys:magnetImage,MAGNET_IMAGE,alert,MAGNET_ERROR_MESSEGE, nil];


    //Posting to the rest of the views, the messege:

    [[NSNotificationCenter defaultCenter] postNotificationName:USER_MESSEGE_RECEAVED object:nil userInfo:dictionaryToSend];

    NSLog(@"Notifications - userInfo=%@",userInfo);


}
您可以通过UserDefults或任何您喜欢的方式保存所需的数据,并在“applicationdidebecomeactive”方法中,使用该数据显示正确的视图

基于您对
UILocalNotification
用法的评论,希望这对您有所帮助


UILocalNotification
具有
userInfo
属性。从推送通知创建本地通知时,将适当的信息设置到此属性中,然后当应用程序代理收到应用程序:didReceiveLocalNotification:时,您可以将其用于更新UI。

您是否应该使用
应用程序:DidReceiveMemotentification:fetchCompletionHandler:
应用程序:DidReceiveMemotentification:
?您看到了什么问题?APNS推送通知用于启动一些代码和推送本地通知。当用户打开其中一个本地通知时,我想打开特定的视图。问题是,如果用户收到3个推送通知,而他只在第二个推送通知中被安装,然后他点击它。我怎么知道这是恢复我的应用程序的第二个通知?在这种情况下,
通知
数组中有多少对象?在通知数组中,我保存每个通知,直到用户打开应用程序。当用户打开应用程序时,请清除my notifications变量。如果用户收到3个本地通知,我如何理解3个从后台恢复我的应用程序中的哪一个?我认为只有用户点击其中一个,应用程序才会收到任何通知,但您可以运行应用程序,检查并用新信息更新问题当我的应用程序处于后台且本地通知从后台恢复我的应用程序时,我只想知道如何捕获打开我的应用程序的本地通知(如果有多个本地通知)。
application:didReceiveLocalNotification: