我正在构建一个使用推送通知的应用。这些都很完美。
我目前正在扩展推送通知,因此当您向右滑动时,从锁定屏幕开始,它将打开应用程序的特定部分。这样可以完美地工作。
- (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属性,以便在服务器发送通知时,如果应用程序当前处于活动状态,则不会运行代码。这回过头来咬我一点点,如果应用程序当前处于活动状态,我从顶部向下滑动并单击通知,应用程序不会打开应用程序的相应位置。
因此需要弄清楚如何调整它以检查它是否是一个被点击的通知,而不是仅仅因为应用程序处于活动状态而触及此方法的通知。我不知道如何做任何想法都有用,我将分享我需要分享的任何代码。
答案 0 :(得分:0)
在didFinishLaunchingWithOptions:
中添加支票可以帮助您确定何时从通知中心点击通知并从中启动您的应用程序。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (launchOptions) {
NSDictionary * data = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
//do something with this data based on your usecase
}
return YES:
}
对于您在收到远程通知时已经实现的其他方法,应该可以帮助您在应用程序运行时捕获PUSH通知。
如果这有帮助,或者如果我误解了您的原始问题,请告诉我。
答案 1 :(得分:0)
要仅在推送通知初始化应用程序时运行特定代码,您应使用application:willFinishLaunchingWithOptions:或UIApplicationDidFinishLaunchingNotification 推送通知的数据在字典中传递(方法中的launchOptions或通知中的userInfo)
根据docs,不建议使用 - application:didFinishLaunchingWithOptions:
重要
对于应用初始化,强烈建议您 使用此方法和应用程序:willFinishLaunchingWithOptions: 方法,不要使用applicationDidFinishLaunching:方法,其中 仅适用于在旧版iOS上运行的应用程序。