iTunes 符号链接到本地化应用程序
Posted
技术标签:
【中文标题】iTunes 符号链接到本地化应用程序【英文标题】:itunes symbolic link to localized application 【发布时间】:2012-11-20 14:06:26 【问题描述】:我使用 i-tunes 应用内链接,例如:
NSString *app_link = @"samuraivszombiesdefense";
NSString *link = [@"itms-apps://itunes.com/apps/"stringByAppendingString:app_name];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:link]];
有人碰巧知道:这个“应用程序名称”是什么 - 在 iTunes 中创建的应用程序记录的名称(禁止符号除外)(您可以在 iTunesConnect->“管理您的应用程序”屏幕上看到)或“应用程序名称”在iTunesConnect中编辑版本详细信息时来自“元数据和上传”的字段?
我的意思是,如果应用的元数据有多种语言,那么每种语言的“应用名称”都是不同的。如果 appname 是英文应用名称,类似“itms-apps://itunes.com/apps/appname”的链接会起作用吗?
【问题讨论】:
【参考方案1】:好的,这是我的解决方案。 我决定使用如下 URL: http://itunes.apple.com/app/idXXXXXXXXX?mt=8,其中 XXXXXXXXX - 我的应用程序 ID。 没有国家前缀,所以我想它可以在全球范围内使用,不仅在美国或德国。 还是不行?
这种链接可能会导致多次重定向。因此,为了避免它们,我使用了这样的代码(基于 Apple 文档中的代码并且效果很好):
@interface iTunesOpener ()
NSURL *iTunesURL;
- (void)openAppLinkFromAppId:(NSString *) appid;
- (void)openReferralURL:(NSURL *)referralURL;
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
@end
@implementation iTunesOpener
- (void)openAppLinkFromAppId:(NSString *) appid
NSString *iTunesLink = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@?mt=8", appid];
NSURL* url = [NSURL URLWithString:iTunesLink];
[self openReferralURL: url];
// Process a LinkShare/TradeDoubler/DGM URL to something iPhone can handle
- (void)openReferralURL:(NSURL *)referralURL
NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:referralURL] delegate:self startImmediately:YES];
[con 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
iTunesURL = [response URL];
if( [iTunesURL.host hasSuffix:@"itunes.apple.com"])
[connection cancel];
[self connectionDidFinishLoading:connection];
return nil;
else
return request;
// No more redirects; use the last URL saved
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
[[UIApplication sharedApplication] openURL:iTunesURL];
@end
【讨论】:
【参考方案2】:编辑:如果您只对所有国家/地区使用相同的链接,应用程序的链接将不起作用。因为不同国家的链接不一样。例如,Facebook 在中国的链接在“/com”和“/app”之间有一个“/cn”。看图:
非常简洁:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/appname"]];
如果您想为开发者发送到所有应用,请使用
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/developername"]];
如果您想打开 URL 中包含您的公司名称的特定应用:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/developername/appname"]];
你可以参考这个问题了解更多:How to link to apps on the app store
【讨论】:
你读过我的问题吗,@sunkehappy?你刚刚写了我之前读过的另一个问题的答案。我问过这个“应用名称”是什么——itumes connect 中的应用记录名称还是元数据中的“应用名称”? 我明白了,@sunkenhappy,但如果我不使用“us”或“de”,只需 itms-apps://itunes.com/apps/samuraivszombiesdefense,它不会在所有国家/地区? 我不这么认为。我在中国的 AppStore 中看到的所有应用程序都会有一个“/cn”。你可以试一试。我不是 100% 确定。 但是如果您从地址中删除“/cn”,iTunes 会将您重定向到带有“/cn”的地址。至少这适用于“/us”。 嗯,听起来您可以在所有国家/地区为您的应用使用相同的英文名称,并且您可以简单地使用 itms-apps://itunes.com/apps/samuraivszombiesdefense。你这么认为吗?【参考方案3】:我们发现的最佳解决方案是避免尝试预测 URL,并创建一个自定义 URL 重定向,如 http://mycompany.com/redirects/my-app-itunes
,一旦知道它,您可以更新它以重定向到正确的 URL。
你必须使用的确切字符串很难正确,尤其是当你有特殊字符、空格等时。规则甚至可能会改变,或者 Apple 可能会决定改变一些东西。最好将 URL 置于您的控制之下。
如果你真的想走这条路,请参阅this documentation from Apple。它详细说明了将应用名称转换为简短友好的 iTunes URL 所需的操作:
删除所有空格 将所有字符转换为小写 删除所有版权 (©)、商标 (™) 和注册商标 (®) 符号 用“and”替换和号(“&”) 删除大部分标点符号(参见清单 2 的集合) 将重音字符和其他“修饰”字符(ü、å 等)替换为其基本字符(u、a 等) 保持所有其他字符不变。
应用程序名称应该是出现在 iTunes Connect 应用程序列表中的名称(非本地化)。最好的办法是对此进行测试。
最后,来自 Apple:
这些 itunes.com 网址是为了方便而提供的,不是 保证链接到特定的应用程序或公司。务必 在任何营销或其他公共场合使用它们之前测试您的 URL 材料。如果有命名冲突,继续使用标准 itunes.apple.com URL,其中包含唯一的数字标识符 在 URL 中。
【讨论】:
很好@MikeWeller,但是当您使用重定向时,您使用哪个URL 来指向您的应用程序?我的意思是,如果每个国家/地区都有不同的链接,那么链接到我自己的应用几乎是不可能的,除了美国本地市场? 如果每个市场都有不同的应用程序,每个应用程序都有自己的链接,那么您必须以某种方式在 URL 中包含用户的区域设置,然后基于此重定向到适当的应用程序。您的应用是链接到自身,还是链接到商店中的其他应用? 这是指向完整版本的精简版。我添加了自己的答案(关于使用itunes.apple.com/app/idXXXXXXXXX?mt=8 之类的链接)。看起来它比任何国家的符号链接都更可预测。现在它起作用了(我认为)。你怎么看?以上是关于iTunes 符号链接到本地化应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 的 SDKs/MacOSX.sdk 符号链接是文档化的功能吗
如何使用 GetFinalPathNameByHandle 来解析指向本地目录的符号链接?