Ios 推送通知活动应用程序

Ios 推送通知活动应用程序,ios,objective-c,apple-push-notifications,Ios,Objective C,Apple Push Notifications,我有一个应用程序,我正在建设利用推送通知。这些都工作得很好 我目前正在扩展推送通知,这样当你向右滑动时,它将从锁定屏幕打开应用程序的特定部分。这是完美的工作,因为它是 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSDictionary *data = [userInfo objectForKey:@"custom data"];

我有一个应用程序,我正在建设利用推送通知。这些都工作得很好

我目前正在扩展推送通知,这样当你向右滑动时,它将从锁定屏幕打开应用程序的特定部分。这是完美的工作,因为它是

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

NSDictionary *data = [userInfo objectForKey:@"custom data"];
if (self.shouldGiveNotification) {
    if ([[data objectForKey:@"type"] isEqualToString:requestStatusMentionRequestType]) {
        // mentioned in status, need to pull up the app with the single status controller...
        NSLog(@"WE ARE HERE");
        UIViewController *vc = self.window.rootViewController;

        StatusViewController *pvc = [[StatusViewController alloc] initWithNibName:@"StatusViewController" bundle:nil];
        pvc.statusID = [data objectForKey:@"eid"];
        pvc.standalone = YES;
        NavigationViewController *nav = [[NavigationViewController alloc] initWithRootViewController:pvc];
        [vc presentViewController:nav animated:YES completion:nil];
    }
}

}
我编写了bool属性,这样当服务器发送通知时,如果应用程序当前处于活动状态,它就不会运行代码。这让我有点恼火,因为如果应用程序当前处于活动状态,我从顶部向下滑动并单击通知,应用程序不会打开应用程序的相应位置


因此,我们需要弄清楚如何调整它,以检查它是一个被点击的通知,而不是仅仅因为应用程序处于活动状态而点击此方法的通知。我不知道该怎么做任何想法都是有用的,我会分享我需要分享的任何代码。

在您的
didfishlaunchwithoptions:
中添加一个复选框可以帮助您识别何时从通知中心点击通知以及何时从通知中心启动应用程序

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (launchOptions) {
        NSDictionary * data = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
        //do something with this data based on your usecase
    }
    return YES:
}
对于在接收远程通知时已经实现的另一种方法,当应用程序已经运行时,它应该帮助您捕获推送通知


让我知道这是否有帮助,或者我是否误解了您最初的问题。

仅在推送通知初始化您应该使用的应用程序时运行特定代码,或者 推送通知的数据在字典中传递(方法中的launchOptions或通知中的userInfo)

根据建议,不鼓励tu使用-应用程序:didFinishLaunchingWithOptions:

重要的

对于应用程序初始化,强烈建议您 使用此方法和应用程序:willFinishLaunchingWithOptions: 方法,而不使用ApplicationIDFinishLaunching:方法,该方法 仅适用于在旧版iOS上运行的应用程序


我基本上有相同的代码在那里,它的工作。我的问题存在于应用程序正在运行且处于前台时。如果我从顶部向下拖动并选择一个推送通知(在应用程序处于后台时发送),则它不会执行任何操作(因为我的布尔值除了输入background外,在任何地方都不存在)。去除布尔值不起作用,因为当我得到一个PN时,应用程序会自动处理并遵循它。然后,你可以处理“DidReceiveMemotentification”中的else部分,在该部分中,你收到一个通知,并添加了一个检查,以查看应用程序是否正在运行。但如果应用程序处于活动状态,我从顶部向下拖动选择一个通知,它不会处理它需要的东西。这是我的问题…如果您的应用程序位于前台,并且您从顶部向下滑动通知中心并选择上一推送,则应用程序将不会启动,但您仍应得到“DidReceiveEmotentification”的调用。目前我无法验证这一点,但您可以运行此用例,并向每个方法添加适当的日志记录,以查看调用了哪些方法。问题是,我需要特别筛选出该方法中的新通知,而不是从通知中心的实际通知中单击的通知。。。否则,当我们不希望所有新通知显示内容时,它们将立即显示内容