6

Apple 在“从 iPhone 应用程序启动 App Store ”中解释了如何建立到应用程序商店的附属链接并在后台处理重定向,以免惹恼用户。但最好根本没有重定向。我似乎记得看到了一种方法来做到这一点,但现在我无法在任何地方找到它。

是否可以在没有任何重定向的情况下创建从 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

4

5 回答 5

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>. -dealloc您还需要在某处(例如 in )将 webview 委托设置为 nil

于 2011-12-22T22:33:11.913 回答
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
}

一个更简洁的解决方案是从 itms 链接中读取应用程序 ID,request.URL并使用将您直接带到您的应用程序的模式格式化一个新 URL。

于 2011-12-27T10:41:39.093 回答
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];
}
于 2012-02-05T15:55:23.390 回答
0

我找到了这份文件,我认为它给了我答案。我总是很难破译这些东西,但我认为它表明我所做的是从一个基本链接开始:

http://itunes.apple.com

然后附加一个 30 的 partnerId,加上我的 linkshare 附属令牌,我认为是

sf2bW7QX/qU

最终得到以下结果:

http://itunes.apple.com?partnerId=30&id=sf2bW7QX/qU

按照 Apple 文档中的说明,我得到了我认为是我的 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" >

我对整个事情还是很不确定。我的 linkshare 会员代币真的可以有斜线吗?

于 2011-12-22T21:05:02.517 回答
0

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

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

于 2012-09-06T02:51:22.820 回答