iOS用户点击推送消息进入应用后自动跳转到对应的ViewController

当iOS用户经过点击推送消息进入应用时,在AppDelegate的app

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

咱们能够经过fetch

NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

得到推送的userinfo.
可是didFinishLaunchingWithOptions会比MainViewController的viewDidLoad先执行,此时确定不能present一个新的View,应该是让MainViewController启动后再检查是否收到了推送,而后打开对应的视图
若是remoteNotification不为空,则说明用户经过推送消息进入,那么能够声明一个属性ui

@property (nonatomic) BOOL isLaunchedByNotification;

用于标识用户是否经过点击通知消息进入本应用。
此时,atom

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

必定会被调用,iOS7能够使用spa

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

由于此方法的调用时,MainViewController已经被初始化,因此咱们已经能够在MainViewController注册推送消息的监听,用于展现对应的视图,以下:code

//订阅展现视图消息,将直接打开某个分支视图
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentView:) name:@"PresentView" object:nil];
//弹出消息框提示用户有订阅通知消息。主要用于用户在使用应用时,弹出提示框
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showNotification:) name:@"Notification" object:nil];

因此在AppDelegate的didReceiveRemoteNotification中能够经过判断isLaunchedByNotification来通知不一样的展现方法。server

相关文章
相关标签/搜索