tags:

views:

71

answers:

3

I'd like to integrate something like a welcome panel (welcome screen) into our iPhone application to inform our users about updates and new offers when they launch the application. I have the following thoughts and doubts:

No user input required

Shows generic HTML without any action from the user point of view, the thing closes after 2 or 3 secs and has a close button if you want to close it manually. This is for advertising and tips.

  • This should be very simple to implement

User input required

Shows generic HTML with an action required from the user point of view, for example a survey. The user should be able to skip it

  • same as above, but is it possible that the user submits something on a HTML page and that causes also something to happen within the iPhone app (maybe via Java Script)? For example the user submits a survey on the HTML page and then app closes the current screen and continues to the next screen (i.e. the real application)?
  • Is it also possible to receive parameters (e.g. an ID) via a HTML website? e.g. if the user receives an offer on the HTML welcome panel, then he clicks on it and it takes him directly to a screen in the iPhone app with content loaded from a server (via JSON) depening on the offer id retrieved through the HTML page.

We prefer implementing it via HTML, because it gives us more flexibility. But I'm also open to hear other suggestions.

Thanks

+2  A: 

UIWebViewDelegate has a method that allows you to respond to interaction in a HTML page:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

Using this, you can catch any links clicked and respond to them in your application by presenting a different view.

Recieving parameters like an id can be done in a few different ways.

1) You can parse the HTML and determine it from the source.

2) You can have a javascript function in the HTML that returns the id. Call it by using

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

3) You can also use the delegate method I mentioned.

If you make a link like this: <a href="openInAppOffer_1">get offer</a> you can catch it in the delegate and retrieve the id from the NSURLRequest.

I hope this will point you in the right direction.

Rengers
+5  A: 

Rengers answer is the correct one to accomplish what you want. However, the real correct answer is "Don't do that in the first place."

From a design perspective, a "Welcome Panel" or any kind of startup/splash-screen is a bad idea and the Apple Documentation tells you explicitly not to use them. Even for games, they're a bad idea that should be avoided if possible.

It's not a "Welcome Panel" it's a "wade-through-all-our-marketing-crap-before-you-can-actually-use-our-app" panel.

Mobile apps aren't like apps for regular platforms. Non-mobile hardware is faster so the obtrusive startup screens load faster and can be dismissed faster. Non-mobile apps tend to accomplish many task and people use them sitting down for prolonged periods. Users will tolerate a few seconds wasted clicking through startup screens so they can get into an app they will use for many minutes or even hours.

By contrast, mobile apps are often used by people on the go and in a hurry. The apps are small and ideally perform a single task. As quickly as possible, people need to be able to get into the app, perform what ever task the app accomplishes and then get back out again. If you're only using an app each time for 30 seconds or so, having to spend 5 seconds each time wading through startup screens is massively annoying.

Mobil hardware is slower and operations can take longer. Depending on its complexity and resources an app can take as much as 10 seconds to launch. In your case you want to add to a startup screen that has to load, connect to a url, display and then have the user perform an operation. That will take another 5-10 seconds minimum. So you're looking at users having to spend 20 seconds or more just getting into your app.

That doesn't sound like much but try mocking up your app and then using it on the go i.e. while walking, waiting for an elevator, going up the stairs, waiting for a red light etc. Test it in social situations. In the middle of conversation say, "Let me check on that" then take out the iPhone launch your app and try to get some information from it. 20 seconds becomes a very long time in all these circumstances.

Even shorter launch times are very annoying if you have to take some action every single time you open the app just to get to the functional part of the app. It's arguably even worse to spring a startup screen on them intermittently so they never know when they open your app how long it will take to get in it. User surprise is not good design.

Instead of forcing users to do something, you should embed advertisements and update notices unobtrusively in the app itself so that people can see them while they are using the app. In the case of advertising, this has the added advantage of putting the adds in view the entire time the user is looking at the app.

I don't know how many times some idiot from marketing has come in and started a feature request with, "We need to force the user to..." The only response to those types of request is to set the marketing weeny on fire. Do that several times and they'll stop trying to systematically alienate your customers.

TechZen
Thank you for your elaborate answer and the time you spend writing it. I will take all your points into consideration. Although, I still think for the type of app we have and the way it is used a welcome panel can add value to the user. But I will make sure we do it the right way and give the user an option to disable it, if he feels annoyed. Many thanks again. Very helpful answer to a question I haven't even asked ;-)
znq
I disagree with this in the case of update and first execution notices. I have found that users respond very positively to the display of a "getting started" view that introduces the application on first launch, and only first launch. Also, people rarely read the "what's new" listing in iTunes when they update applications, so presenting release notes on the first start of the application after update has caused my users to be far more aware of what has been added. I agree that a splash screen on every launch is bad, but temporary informative ones work well in my experience.
Brad Larson
Yes a getting started screen is acceptable but that is usually a one time thing. Having the welcome screen popup every time or (I think worse) randomly, will cause problems on a mobile app.
TechZen
+1  A: 

If you do need some kind of startup screen a good option is to use the default.png. The app loads and displays that image before it does anything else.

It's usually used to display the illusion of the user interface before the UI loads completely. However, you could use it to display startup information. Since it displays almost instantly (within 1 sec) it does give your user something to look at while the app loads. In the case of a mock interface, it lets the user see the location of the interface elements and begin moving to activate them before the elements finish loading.

The catch is that the image disappears as soon as the first view loads so you have to load a view behind it that is a duplicate of the image (more ofter the image is screenshot of the view)

In your case you would need to dynamically generate the default.png when the web page updated. Upon launch it would display the information and buy the time the user read it, made a decision and touched the interface, the real web page would have replaced it.

Of course, this system won't work if you want new info at the start of each launch. Instead you'll have to generate the image during one run for use in the next.

In any case, if you launch into a web page the user did not select, I advise that you create a default.png that displays a message along the lines of "Checking for Updates and Info" (or whatever your doing) so the user won't think your app launched and hung.

TechZen