可靠地从UIWebView打开App Store链接

17

我有一个应用程序,可以在UIWebView中显示网页。它展示的页面可能包含指向App Store上其他iPhone应用程序的链接。

在桌面计算机的普通浏览器中,点击这些App Store链接会经历一系列的URL重定向,最终打开iTunes并跳转到该应用的页面。

是否有一种方法可以确保在我的UIWebView内单击App Store链接时,iPhone上的App Store应用程序将打开并显示该应用程序?

根据我的测试,我所见过的几种类型的链接都可以导致App Store页面,包括:

  • phobos链接 - phobos.apple.com/etc etc etc
  • itunes.com/app/appname 链接
  • 推荐/联盟链接
  • 其它我不知道的链接

当我在桌面浏览器中打开任何这些链接时,它们都能正常工作并最终打开iTunes。 当我从iPhone中打开这些链接时,UIWebView会经历多次重定向,最终会发生以下两种情况之一:

  • 重定向无法正常工作,我最终会通过“页面加载失败”方法调用来结束
  • 重定向起作用并打开iTunes应用程序,搜索应用程序名称,然后我会收到来自iTunes的消息,解释它无法连接到商店。

我唯一能够打开App Store应用程序的方法是使用不带任何推荐或重定向的直接iTunes链接到该应用程序。

显然,对于推荐或联盟链接,我不希望删除推荐ID或联盟ID。如果是他们的链接被点击,我不应该剥夺他们的推荐权。

因此,任何帮助都将不胜感激。

谢谢。

5个回答

13
我找到了这篇苹果公司的技术问答,回答了我的问题:
基本意思是:
- phobos.apple.com链接正确构造将直接重定向到App Store应用程序。 - itunes.apple.com链接必须转换为phobos链接。 - 引荐/联盟链接必须使用NSURLConnection遍历,最终结果的URL将是可用的phobos链接。
感谢大家的帮助。

3
在我的测试中,我只发现phobos.apple.com链接可以自动重定向到AppStore(没有任何Safari重定向)。

2
除了开发者文档,我认为他们应该考虑redirectResponse为空的情况。我花了一些时间才弄清楚问题所在。
// 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;
}

1

我一直在尝试做同样的事情。我想在免费版中放置一个指向完整版本应用程序的链接。我刚刚确认文档中使用的方法是有效的。仅限于实际设备上。不要相信模拟器!

文档中的内容添加进去,然后这样调用:

NSString *testLink = @"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&mt=8";   

self.iTunesLink = [NSURL URLWithString:testLink];

[self openReferralURL:iTunesLink];

1

如果您尚未在实际设备上测试过这个问题,我可以告诉您iPhone模拟器在将这些链接重定向到App Store时存在问题(可能是因为模拟器没有它)。在设备上运行应用程序将产生不同的行为,因此请确保您在那里进行测试。


我从不在模拟器上测试... 没有意义。总是在设备上进行测试。 - Jasarien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接