Alex Rivera | Logout

Reliably opening App Store links from a UIWebView

Asked 2009-09-21T09:55:02.080
17

I have an app that will display web pages within a UIWebView. The pages it shows may contain links to other iPhone apps on the App Store.

In a normal browser on a desktop computer, clicking these App Store links would take me through a number of URL redirects and eventually end up opening iTunes and taking me to the page for that App.

Is there a way to ensure that when an App Store link is clicked inside my UIWebView that the App Store app on the iPhone will open and show the app?

What I've been seeing in my tests is that there are several types of links that can result in an App Store page, those being:

  • phobos links - phobos.apple.com/etc etc etc
  • itunes.com/app/appname links
  • referral / affiliate links
  • any that I don't know of

When I open any of these links in a desktop browser they will work and eventually open iTunes. When I open any of these links from within the iPhone the UIWebView goes through a number of redirects and eventually one of two things will happen:

  • The redirects don't work properly and I end up with a page did fail to load method call
  • The redirects work and the iTunes app is opened, a search for the app name is done, and then I get a message from iTunes explaining it can't connect to the store.

The only time I've been able to get the App Store app to open is by using a direct iTunes link to the app without any referral or redirects.

Obviously for referral or affiliate links, I do not want to strip out the referral ID or affiliate ID. I shouldn't deprive them of a referral if it was their link that is clicked.

So any help would be greatly appreciated.

Thanks.

Edit
Report

2 Answers

3

On my tests, I only got phobos.apple.com links to automatically redirect to the AppStore (without any Safari redirect).

answered 2009-09-21T23:28:42.920
2

Addition to developer documentation, I think they should have the case when the redirectResponse is nil. It took me some time to figure out what was wrong.

// Save the most recent URL in case multiple redirects occur
// "iTunesURL" is an NSURL property in your class declaration
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
    if (response) {
        self.iTunesURL = [response URL];
    }
    else {
        self.iTunesURL = [request URL];
    }

    return request;
}
answered 2011-02-06T16:58:54.690

Your Answer