iOS端点击推送如何跳转到指定的页面?
在 iOS 系统中,点击推送通知进入 App 时,会根据 App 的当前状态(是否已启动)调用不同的回调方法。以下是具体实现方式:
一、App 未启动状态(冷启动)
当 App 处于未启动状态时,用户点击通知栏的通知会触发以下方法:
objective-c
- (BOOL)application:(UIApplication *)application did系统结束工具名LaunchingWithOptions:(NSDictionary *)launchOptions
在该方法中,可通过以下方式获取通知内容:
objective-c
NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
如果 userInfo 为 nil,说明用户是直接点击 App 图标进入应用;若不为 nil,则表示用户是通过点击通知栏进入应用,并可通过 userInfo 获取推送内容。
二、App 已启动状态(热启动)
iOS 10 及以下系统点击通知栏会触发以下回调方法:
objective-c
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo其中 userInfo 即为推送的消息内容。
iOS 10 及以上系统需使用 UNUserNotificationCenter 的回调方法:
objective-c
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler获取通知内容的方式如下:
objective-c
NSDictionary *userInfo = response.notification.request.content.userInfo;该 userInfo 与冷启动时获取的内容一致。
三、实现页面跳转逻辑
使用 presentViewController 方式跳转
在 AppDelegate 中获取当前根视图控制器,直接调用 presentViewController 方法即可实现页面跳转。
使用 pushViewController 方式跳转
若跳转方式为 pushViewController,则要求根视图控制器必须包含 UINavigationController,否则跳转将失败。
建议通过 userInfo 发送通知,在目标页面的 viewWillAppear: 方法中监听并执行 pushViewController 跳转。
四、总结
通过获取 userInfo 中的通知内容,并结合 App 的运行状态及跳转方式,即可实现点击推送跳转至指定页面的功能。在调试过程中建议打印 userInfo 内容,以便快速排查问题。