I have a query regarding push notification.
Whenever a push comes and user is working on some XYZ controller and push requires another controller to be initialized and shown. Now should I show the push controller on top of the current active controller and take the user back to the currently working controller, once done?
What if the push controller has some actions involved and is a complete set of functionality associated with it. Should we restrict actions when a push comes.
What is the best deal?
It depends heavily on the flow and organization of your application. In a tab bar based application, you should have a tab for handling the notification activity, and place a badgeValue for the corresponding UITabBarItem. You could also show an alert offering the possibility of switching to the "handle notification" area on the other tab. Tab Bars are a good way of having "simultaneous" access to differing flows and switching back and forth between them without having to manage saving and restoring the VC flow yourself.
Related
I'm building a guessing game. I would like to know how I can keep level2 unlocked after finishing from level1 and moving to other view controllers such as the main menu. I tried using a bool value to open and close the level but after I move out of the levelselect_VC, and back into it, it locks itself back. How should I write the program?
As going forward You can follow to a simple approach i.e create segues onto different view controller's and depending on lock/unlock status ,you can performSegueWithIdentifier method .
As you come back you can use to 2 things first one NOTIFICATION second one DELEGATION before pop view controller simply "post a notification" confirming that level 2 is unlocked don't show it and you can achieve the same with delegates.
I've been struggling with this for a while now.
And I've found some useful stuff, but I still feel like I've got the need to post here to hear peoples opinion.
Sometime I want to be able to send users to certain screens. If the app is reloaded I want to send them back to the screen where they left off and if they cannot be authorized anytime during login (if their password is changed elsewhere) I want to be able to kick them to the loginscreen.
To achieve this, I would add segues to all controllers from a "root" controller and then add segues from all controllers to the login controller. Then I could send them wherever with performSegueWithIdentifier.
BUT, is this really the way to go? Seems a bit inflexible and ugly. Is there a better way?
I would recommend implementing your login screen inside a UIWindow. This way you pop this window above any other view in your normal window regardless of where it is in the view hierarchy or modal.
I've got a TabBarController, that in it's first instance contains a ViewController for login purposes.
After a successful login another viewcontroller is pushed on.
I've noticed that if you select the tab again your returned to the top of the stack, What I would like to happen is your returned to the location you left.
Is this something that needs to be managed myself or is there a property or something to that effect that could be set.
You have to manage that yourself by keeping state. You'd probably want to implement shouldSelectViewController in a UITabBarDelegate to get notified when the user clicks in the tab bar.
This is sent before anything is switched around.
I have a doubt. I am building an application wherein if there is a new request is submitted I am getting a push notification in my application and on tap of "View" button in the push notification alert I need to show the request detail page. Now, normally this request detail page is 5th view in the stack. How should I handle this? Should I initialize first 4 views and put them on the stack before going to the detail page?
Also, there is a scenario where if someone is working on some part of the app and notification comes up. In that should I loose the changes on the currently opened page and show the request details if "View" was tapped on?
How should I handle this?
You can just push that view (the usual 5th view). The only thing is that when you pop that view, it will now act as the 2nd view, so theres no need to go through 4 additional views.
You can initialize and push the 5 views to your navigation controller (with animate:NO) to start the app up in the right place.
As for if you get a notification while running, that's really up to you and what is best for the app. You can always prompt the user before deleting any data. Note that if you get a push notification, your application:didReceiveRemoteNotification: instead of the alert showing.
This is commonly achieved by displaying the controller modally.
This way you don't have to recreate your view-controllers hierarchy and you don't lose the current context of your app if it was running. The user taps some "OK" button and returns to the previous screen.
For the first part of your question: if you have created your view in a decoupled way, that is, if it is not dependent on the 4 other views - i suppose then you can show this view without problems. Obviously the answer really depends whether your business rules allow this.
As for the second part of your question: you always can show an UIAlertView to your users asking whether they want to take action on the received push notification.
However - i think these problems really do not have anything to do with the nature of the push notifications, and you really should loose the "I have a doubt on push notification" part of your question :) ....
Hope this helps :)
When my app receives a Push Notification, application:didReceiveRemoteNotification: receives the data. When the user open the app from a notification, I want to jump to the last UITableView in the stack, to display the 'details' related to the Push Notification.
I am able to jump to the correct tab in the UITabBar.
Is there a way to Push views in that Tab from the App Delegate, or am I going about this the wrong way?
If you're already able to jump to the correct tab, you're almost there.
One way to do it would be to save off the push alert information into nsuserdefault... maybe in a form of a dictionary object in the "didReceiveRemoteNotification". It's like of like save off a cookie web development for later use.
Then for the viewcontroller you're displaying in the tab that you jump to, you could do a check in viewWillAppear and see if you have anything stored in your nsuserdefault and grab the saved off notification data there and you can look up the corresponding data in your UITableViewDataSource.
Once you have that, you can call or do what ever you'd normally do had you selected the same data/object represented by a table cell and push the desired view (controller) into view.
Make sure to remove the object saved in NSUserDefault once you're attempted to push the view.