iOS 远程推送 根据后台推送内容的不同跳转指定页面

iOS 远程推送,根据后台推送内容的不同, 跳转指定页面我目前的需求是总体分为两类:

1:私信、关注、点赞一类,只需跳转到对应的tabbar 中的某一项

2:每日精品文章项目推送,分两个子类

(1)如果当前已经打开 文章项目页面,则直接刷新,不推出新页面

 (2)如果当前未打开此页面,则push出新的文章项目页面

iOS  推送情况分为

应用未启动的 情况:

打开应用 ,推送信息 会通过

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:此方法传递,内容在launchOptions里面, 通过控制台即可看出应用已启动的 情况:(1)应用在前台活跃 (前台活跃 只做 页面的体型,alert,不去主动帮用户打开新的界面)

(2)应用在后台挂起  (后台挂起转为 活跃时 调用此方法)- (void)didReceiveRemoteNotification:(NSDictionary *)userInfo

结论,我们要做的就是 通过系统的两个方法拿到推送信息后:1、 如果是从第一个方法里边获得的信息, 则 延迟0.5秒左右跳转新页面(我做推送的时候直接 跳转会出现异常异常),这种情况不需要判断当前的 controller2、从第二种方法里边获取信息, 判断当前controller,是否需要push新的页面,或者回到tabbar

下面是 我这边的代码,具体 信息 字段根据你们后台来定

使用到了 类别,方便统一管理

推送平台根据你们自己所使用的来配置 ()


// 接收 远程推送消息后 弹出 新的页面

// 应用未启动的 情况下点击推送消息 进入应用 触发didFinishLaunchingWithOptions 此方法, 并从字典中 获取到推送的相关消息

// 应用已经启动  处于 活跃状态 或 非活跃状态 会触发didReceiveRemoteNotification 此方法, 并从字典中 获取到推送相关消息


首先获取当前的topViewController,通过topViewController实现任意跳转。

- (UIViewController*)topViewController

{

return [self topViewControllerWithRootViewController:self.window.rootViewController];

}

- (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController

{

if ([rootViewController isKindOfClass:[UITabBarController class]]) {

UITabBarController *tabBarController = (UITabBarController *)rootViewController;

return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];

} else if ([rootViewController isKindOfClass:[UINavigationController class]]) {

UINavigationController* navigationController = (UINavigationController*)rootViewController;

return [self topViewControllerWithRootViewController:navigationController.visibleViewController];

} else if (rootViewController.presentedViewController) {

UIViewController* presentedViewController = rootViewController.presentedViewController;

return [self topViewControllerWithRootViewController:presentedViewController];

} else {

return rootViewController;

}

}

推荐阅读更多精彩内容