在我目前的项目中,我有一个推送通知.当我点击应用程序图标时,我想从启动选项对象获取收到的通知,但它总是返回nil:
- NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
解决方法
您无法检测到这种情况,因为应用程序未使用推送通知打开(它已通过应用程序图标打开).
尝试通过滑动推送通知打开应用程序.
尝试通过滑动推送通知打开应用程序.
编辑:
如果您希望调用推送通知(通过后台获取,当您的应用程序未处于活动状态时),您需要让后端开发人员在推送通知中设置“content-available”:1.
之后-application:didReceiveRemoteNotification:fetchCompletionHandler:将被调用(当推送通知到达时),因此您可以将有效负载保存到文件中,然后当应用程序打开时,您可以读取文件并执行操作.
- - (void)application:(UIApplication *)application
- didReceiveRemoteNotification:(NSDictionary *)userInfo
- fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
- {
- NSLog(@"#BACKGROUND FETCH CALLED: %@",userInfo);
- // When we get a push,just writing it to file
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"userInfo.plist"];
- [userInfo writeToFile:filePath atomically:YES];
- completionHandler(UIBackgroundFetchResultNewData);
- }
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- // Checking if application was launched by tapping icon,or push notification
- if (!launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"userInfo.plist"];
- [[NSFileManager defaultManager] removeItemAtPath:filePath
- error:nil];
- NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:filePath];
- if (info) {
- // Launched by tapping icon
- // ... your handling here
- }
- } else {
- NSDictionary *info = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
- // Launched with swiping
- // ... your handling here
- }
- return YES;
- }