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 符号链接到本地​​化应用程序的主要内容,如果未能解决你的问题,请参考以下文章

备份到 S3:符号链接

Xcode 的 SDKs/MacOSX.sdk 符号链接是文档化的功能吗

如何使用 GetFinalPathNameByHandle 来解析指向本地目录的符号链接?

HDFS + 在 HDFS 文件夹和本地文件系统文件夹之间创建符号链接

带有 Xampp 错误的符号链接

在与 Rust 中的本机库链接时将符号公开给动态链接器