Apple在“Launching the App Store from an iPhone application”中解释了如何为应用商店建立联盟链接并在后台处理重定向,这样就不会惹恼用户。但最好不要重定向。我似乎记得有办法做到这一点,但现在我无法在任何地方找到它。
是否可以在没有任何重定向的情况下从iOS应用创建联盟链接到应用商店?
编辑:澄清一下,我说的是Linkshare会员链接。
编辑2:我越来越近了。我有这个链接,我直接抓住了linkshare的“文本链接”页面。当在下面使用k1th的技巧时,在iPad上没有任何重定向的情况下工作,但仍然在iPod touch上有一个重定向[并且可能是iPhone]。我推测重定向可能是从顶级iPad应用程序切换到顶级iPhone应用程序,但我肯定不知道。
http://click.linksynergy.com/fs-bin/click?id=sf2bW7QX/qU&offerid=146261.10005745&type=3&subid=0
答案 0 :(得分:4)
是的,你可能在参数中有斜线(这是因为在问题标记开始URL的参数部分之后它是斜线。
关于跳过Mobile Safari来处理联盟链接:
您可以设置隐藏的UIWebView来处理重定向,也可以自己在URL加载系统中执行所有操作。 这是一个隐藏的WebView:
NSURLRequest *r = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://click.linksynergy.com/fs-bin/click?id=sf2bW7QX/qU&offerid=146261.431296703&type=2&subid=0"]];
testWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
testWebView.hidden = YES;
testWebView.delegate = self;
[testWebView loadRequest:r];
代表:
#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([request.URL.scheme isEqualToString:@"itms"] &&
[[UIApplication sharedApplication] canOpenURL:request.URL]) {
[[UIApplication sharedApplication] openURL:request.URL];
return NO;
}
return YES; // go on redirecting
}
testWebView
需要是实例var,视图控制器本身需要是<UIWebViewDelegate>
。您还需要将webview委托设置为nil(例如-dealloc
)
答案 1 :(得分:3)
我认为你不想重定向的原因是
我更喜欢k1th的解决方案,但是失败了(我想它可能会失败#2),我认为问题是第一个itms链接不是“最终”链接。一种解决方案是简单地对URL进行硬编码(或通过其他方式提供):
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL myAppUrl = ....
if ([request.URL.scheme isEqualToString:@"itms"] &&
[[UIApplication sharedApplication] canOpenURL:myAppURL]) {
[[UIApplication sharedApplication] openURL:myAppURL];
return NO;
}
return YES; // go on redirecting
}
更清晰的解决方案是从request.URL
中的itms链接中读取应用ID,并使用可直接转到应用的模式格式化新网址。
答案 2 :(得分:3)
Apple直接提供了一个更清晰的解决方案:https://developer.apple.com/library/ios/#qa/qa1629/_index.html
为简洁起见,这是该页面的代码:
// Process a LinkShare/TradeDoubler/DGM URL to something iPhone can handle
- (void)openReferralURL:(NSURL *)referralURL {
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:referralURL] delegate:self startImmediately:YES];
[conn release];
}
// 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 {
self.iTunesURL = [response URL];
return request;
}
// No more redirects; use the last URL saved
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[[UIApplication sharedApplication] openURL:self.iTunesURL];
}
答案 3 :(得分:0)
我找到了this document,我认为它给了我答案。我总是很难解读这些东西,但我认为我说的是从一个基本链接开始:
http://itunes.apple.com
然后附加一个30的partnerId,加上我认为的链接共享联盟令牌
sf2bW7QX/qU
最终得到以下结论:
http://itunes.apple.com?partnerId=30&id=sf2bW7QX/qU
我按照Apple doc中的说明得到了我认为我的ID,基本上是从随机链接共享链接中获取id参数。我用于此目的的链接是:
<a href="http://click.linksynergy.com/fs-bin/click?id=sf2bW7QX/qU&offerid=146261.431296703&type=2&subid=0"><IMG border=0 src="http://a464.phobos.apple.com/us/r30/Music/b9/7f/91/mzi.kbjyfypr.170x170-75.jpg" ></a><IMG border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=sf2bW7QX/qU&bids=146261.431296703&type=2&subid=0" >
我仍然不确定整件事。我的linkhare会员令牌真的有斜线吗?
答案 4 :(得分:0)