在没有重定向的情况下建立到iTunes商店的会员链接?

时间:2011-12-18 00:29:44

标签: ios redirect affiliate

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

5 个答案:

答案 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)

我认为你不想重定向的原因是

  • 避免Safari浏览器弹出
  • 避免在App Store应用程序内部重定向

我更喜欢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)

这回答了你的问题: http://www.apple.com/itunes/affiliates/resources/documentation/linking-to-the-itunes-music-store.html#apps

顺便说一句,我发现整个联盟计划太复杂了。我调查了它,我认为这不值得5%的佣金。