有没有办法打开在推送通知中收到的url,而无需在iOS 10中打开应用程序?

我试图打开一个url传递在ios 10中的推送通知。到目前为止,我还没有find一种方式来打开一个URL,而无需打开应用程序。 有没有办法打开在推送通知收到的url,而无需打开应用程序?

我find了一个解决方法来打开url(ios <10的解决方法),但是再次打开应用程序。

更新:

我注意到,对于设备(iOS 10.0)下面的mentohds得到参与应用程序:didRegisterForRemoteNotificationsWithDeviceToken userNotificationCenter:willPresentNotification: userNotificationCenter:didReceiveNotificationResponse:

但是,应用程序:didReceiveRemoteNotification:fetchCompletionHandler:和 – 应用程序:didReceiveRemoteNotification: 被调用。

我是新来的ios,这是我得到了多less:

AppDelegate.h

#import <UIKit/UIKit.h> #import <UserNotifications/UserNotifications.h> @interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate> @property (strong, nonatomic) UIWindow *window; @end 

AppDelegate.m

 #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10) { UNUserNotificationCenter * notificationCenter = [UNUserNotificationCenter currentNotificationCenter]; notificationCenter.delegate = self; [notificationCenter requestAuthorizationWithOptions:UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * error) { [[UIApplication sharedApplication] registerForRemoteNotifications]; if (error) { NSLog(@"Auth. error:%@",[error localizedDescription]); } }]; [notificationCenter getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * settings) { }]; } else { UIUserNotificationType type = UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound; UIUserNotificationSettings * settings = [UIUserNotificationSettings settingsForTypes:type categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } return YES; } ... #pragma mark Push Notification methods -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"didReceiveRemoteNotification:"); NSString * message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; NSString * urlString = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; NSLog(@"1 Received Push URL: %@", urlString); NSURL * url = [NSURL URLWithString:urlString]; if(url!=nil) { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10) { // iOS 10 and above [[UIApplication sharedApplication] openURL:url options:[NSDictionary dictionary] completionHandler:nil]; } else { [[UIApplication sharedApplication] openURL:url]; // iOS <10 } } if (application.applicationState == UIApplicationStateInactive) { NSLog(@"Application inactive"); [[NSUserDefaults standardUserDefaults] setValue:message forKey:@"Push_Message"]; } else if (application.applicationState == UIApplicationStateBackground) { NSLog(@"Application in background"); } else { NSLog(@"Application active"); } } #pragma mark Notification Registration methods -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString* token = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""]; NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken:\n%@",token); } -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"Error:%@",[error localizedDescription]); NSLog(@"Suggest:%@",[error localizedRecoverySuggestion]); } #pragma mark App Push notification methods -(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { NSLog(@"didRegisterUserNotificationSettings"); } -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"UserInfo: %@",userInfo); NSString * messageString = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; NSLog(@"Message:%@",messageString); NSString * messageurl = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; NSLog(@"2 Received Push URL: %@", messageurl); NSURL * url = [NSURL URLWithString:messageurl]; if(url!=nil) { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10) { // iOS 10 and above [[UIApplication sharedApplication] openURL:url options:[NSDictionary dictionary] completionHandler:nil]; } else { [[UIApplication sharedApplication] openURL:url]; // iOS <10 } } [[NSNotificationCenter defaultCenter] postNotificationName:@"PushMessage" object:self userInfo:@{@"alertString":messageString}]; } #pragma mark UNUserNotificationCenterDelegate methods -(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { NSLog(@"didReceiveNotificationResponse"); //--URL click--// //Kindly suggest what can be done here? completionHandler(UNNotificationPresentationOptionAlert); } -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { NSLog(@"willPresentNotification"); completionHandler(UNNotificationPresentationOptionAlert); } @end 

希望在启动应用程序之前,您无法控制推送的行为。 只有在应用程序启动后才能控制推送。