如何链接到应用商店中的应用

我正在创建我的iPhone游戏的免费版本。我希望在免费版本中有一个按钮,可以将人们带到应用商店的付费版本。如果我使用标准链接

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&; mt=8

iPhone先打开Safari,然后是应用商店。我用过其他应用直接打开应用商店,所以我知道这是可能的。

有什么想法吗?应用商店的URL方案是什么?

792245 次浏览

只需在应用程序链接中将“itunes”更改为“phobos”。

http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&; mt=8

现在它将直接打开App Store

编辑于2016-02-02

从iOS开始引入了6SK Store产品视图控制器类。您可以在不离开应用程序的情况下链接应用程序。Swift 3. x/2. xObjective-c中的代码片段是这里

一个SK Store产品视图控制器对象提供了一个允许 用户从App Store购买其他媒体。例如,您的应用程序 可能会显示商店以允许用户购买另一个应用程序。


来自面向Apple开发者的新闻和公告

将客户直接吸引到您的应用程序 在App Store上iTunes链接 通过iTunes链接,您可以提供 客户通过简单的方式访问 您直接在App Store上的应用程序 从您的网站或营销 创建iTunes链接是 简单,可以直接制作 客户到单个应用程序,所有 您的应用程序,或到特定的应用程序 指定您的公司名称。

将客户发送到特定的 应用场景: http://itunes.com/apps/appname

发送 客户到您拥有的应用程序列表 在App Store上: http://itunes.com/apps/developername

将客户发送到特定应用程序 您的公司名称包含在 URL: http://itunes.com/apps/developername/appname


补充说明:

您可以将http://替换为itms://itms-apps://以避免重定向。

请注意表示itms://将用户发送到iTunes商店itms-apps://并将它们发送到App Store!

有关命名的信息,请参阅Apple QA1633:

https://developer.apple.com/library/content/qa/qa1633/_index.html

编辑(截至2015年1月):

itunes.com/apps链接应更新为appstore.com/apps.见上文QA1633,其已更新。新的QA1629建议从应用程序启动商店的这些步骤和代码:

  1. 在计算机上启动iTunes。
  2. 搜索要链接到的项目。
  3. 在iTunes中右键单击或控制单击项目名称,然后从弹出菜单中选择“复制iTunes存储URL”。
  4. 在您的应用程序中,使用复制的iTunesURL创建一个NSURL对象,然后将此对象传递给UIApplicationopenURL:方法以在App Store中打开您的项目。

示例代码:

NSString *iTunesLink = @"itms://itunes.apple.com/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

iOS10+:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink] options:@{} completionHandler:nil];

Swift4.2

   let urlStr = "itms-apps://itunes.apple.com/app/apple-store/id375380948?mt=8"
if #available(iOS 10.0, *) {
UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)
        

} else {
UIApplication.shared.openURL(URL(string: urlStr)!)
}

如果您想直接打开应用程序到App Store,您应该使用:

itms-apps://…

这样它会直接在设备中打开App Store应用,而不是先iTunes,然后只打开App Store(仅使用itms时://)

希望有帮助。


编辑:2017年4月。 itms-apps://实际上在iOS10中再次工作。我测试了它。

编辑:2013年4月。 这不再适用于iOS5及更高版本。只需使用

https://itunes.apple.com/app/id378458261

没有更多的重定向。

如果您想链接到开发人员的应用程序,并且开发人员的名称有标点符号或空格(例如Development Company, LLC),您的URL如下所示:

itms-apps://itunes.com/apps/DevelopmentCompanyLLC

否则,它在iOS4.3.3上返回“无法处理此请求”

这是工作和直接链接在ios5

NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

此代码在iOS上生成App Store链接

NSString *appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary]   objectForKey:@"CFBundleName"]];
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];

在Mac上用超文本传输协议替换itms-apps:

NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];

在iOS打开URL:

[[UIApplication sharedApplication] openURL:appStoreURL];

Mac:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];

没有重定向的直接链接:

  1. 使用Apple服务营销工具:https://tools.applemediaservices.com/获得真正的直接链接
  2. https://替换为itms-apps://
  3. 使用UIApplication.shared.open(url, options: [:])打开链接

请注意,这些链接仅适用于实际设备,而不是模拟器。

来源:

这对我来说非常有效,只使用APP ID:

 NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

重定向次数为零。

您可以在应用商店中获得特定项目的链接,或通过链接制造商iTunes: http://itunes.apple.com/linkmaker/

苹果刚刚宣布了appstore.com网址。

https://developer.apple.com/library/ios/qa/qa1633/_index.html

有三种类型的App Store短链接,有两种形式,一种用于iOS应用程序,另一种用于Mac应用程序:

公司名称

iOS:http://appstore.com/例如,http://appstore.com/apple

Mac:http://appstore.com/mac/例如,http://appstore.com/mac/apple

应用名称

iOS:http://appstore.com/例如,http://appstore.com/keynote

Mac:http://appstore.com/mac/例如,http://appstore.com/mac/keynote

公司应用

iOS:http://appstore.com//例如,http://appstore.com/apple/keynote

Mac:http://appstore.com/mac//例如,http://appstore.com/mac/apple/keynote

大多数公司和应用程序都有一个规范的App Store短链接。此规范URL是通过更改或删除某些字符(其中许多是非法的或在URL中具有特殊含义(例如,“&”)来创建的。

要创建App Store短链接,请对您的公司或应用名称应用以下规则:

删除所有空格

将所有字符转换为小写

删除所有版权(©)、商标(™)和注册商标(®)符号

将&号("&")替换为"和"

删除大部分标点符号(参见清单2)

将重音和其他“修饰”字符 (ü, å, 等)替换为它们的基本字符(u,a等)

保留所有其他字符。

清单2必须删除的标点符号字符。

! ¡"#$%'()*+,-./:;&这;=>¿? @[]^ _

以下是一些示例来演示发生的转换。

应用商店

公司名称示例

Gameloft=>http://appstore.com/gameloft

动视公司Publishing, Inc.=>http://appstore.com/activisionpublishinginc

陈的摄影和软件=>http://appstore.com/chensphotographyandsoftware

应用程序名称示例

陶笛=>http://appstore.com/ocarina

我的佩里在哪里?=>http://appstore.com/wheresmyperry

大脑挑战™=>http://appstore.com/brainchallenge

试试这个方法

http://itunes.apple.com/lookup?id="你的应用ID在这里"返回json.从中,找到键"TrackViewUrl相关链接"和值是所需的网址。使用此URL(只需将https://替换为itms-apps://)。这工作得很好。

例如,如果您的应用ID是xyz,则转到此链接 http://itunes.apple.com/lookup?id=xyz

然后找到键“TrackViewUrl相关链接”的URL。这是您在应用商店中的应用程序的URL,要在xcode中使用此URL,请尝试以下操作

NSString *iTunesLink = @"itms-apps://itunes.apple.com/us/app/Your app name/id Your app ID?mt=8&uo=4";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

谢了

我可以确认,如果您在iTunesConnect中创建应用程序,您将在提交之前获得应用程序ID。

因此…

itms-apps://itunes.apple.com/app/id123456789


NSURL *appStoreURL = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id123456789"];
if ([[UIApplication sharedApplication]canOpenURL:appStoreURL])
[[UIApplication sharedApplication]openURL:appStoreURL];

很管用

如果您有应用商店ID,您最好使用它。特别是如果您将来可能会更改应用程序的名称。

http://itunes.apple.com/app/id378458261

如果你没有应用商店的ID,你可以创建一个URL基于此留档https://developer.apple.com/library/ios/qa/qa1633/_index.html

+ (NSURL *)appStoreURL
{
static NSURL *appStoreURL;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
appStoreURL = [self appStoreURLFromBundleName:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
});
return appStoreURL;
}


+ (NSURL *)appStoreURLFromBundleName:(NSString *)bundleName
{
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@", [self sanitizeAppStoreResourceSpecifier:bundleName]]];
return appStoreURL;
}


+ (NSString *)sanitizeAppStoreResourceSpecifier:(NSString *)resourceSpecifier
{
/*
https://developer.apple.com/library/ios/qa/qa1633/_index.html
To create an App Store Short Link, apply the following rules to your company or app name:


Remove all whitespace
Convert all characters to lower-case
Remove all copyright (©), trademark (™) and registered mark (®) symbols
Replace ampersands ("&") with "and"
Remove most punctuation (See Listing 2 for the set)
Replace accented and other "decorated" characters (ü, å, etc.) with their elemental character (u, a, etc.)
Leave all other characters as-is.
*/
resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"&" withString:@"and"];
resourceSpecifier = [[NSString alloc] initWithData:[resourceSpecifier dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding];
resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"[!¡\"#$%'()*+,-./:;<=>¿?@\\[\\]\\^_`{|}~\\s\\t\\n]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, resourceSpecifier.length)];
resourceSpecifier = [resourceSpecifier lowercaseString];
return resourceSpecifier;
}

通过这个测试

- (void)testAppStoreURLFromBundleName
{
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Nuclear™"].absoluteString, @"itms-apps://itunes.com/app/nuclear", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Magazine+"].absoluteString, @"itms-apps://itunes.com/app/magazine", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Karl & CO"].absoluteString, @"itms-apps://itunes.com/app/karlandco", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"[Fluppy fuck]"].absoluteString, @"itms-apps://itunes.com/app/fluppyfuck", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Pollos Hérmanos"].absoluteString, @"itms-apps://itunes.com/app/polloshermanos", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Niños and niñas"].absoluteString, @"itms-apps://itunes.com/app/ninosandninas", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Trond, MobizMag"].absoluteString, @"itms-apps://itunes.com/app/trondmobizmag", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"!__SPECIAL-PLIZES__!"].absoluteString, @"itms-apps://itunes.com/app/specialplizes", nil);
}

许多答案建议使用“itms”或“itms-apps”,但Apple并不特别推荐这种做法。他们只提供以下打开App Store的方式:

清单1从iOS应用程序启动App Store

NSString *iTunesLink = @"https://itunes.apple.com/us/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

参见https://developer.apple.com/library/ios/qa/qa1629/_index.html最近更新的三月,2014作为这个答案。

对于支持iOS6及以上的应用程序,Apple提供了一种应用内机制来呈现App Store:SKStoreProductViewController

- (void)loadProductWithParameters:(NSDictionary *)parameters completionBlock:(void (^)(BOOL result, NSError *error))block;


// Example:
SKStoreProductViewController* spvc = [[SKStoreProductViewController alloc] init];
spvc.delegate = self;
[spvc loadProductWithParameters:@{ SKStoreProductParameterITunesItemIdentifier : @(364709193) } completionBlock:^(BOOL result, NSError *error){
if (error)
// Show sorry
else
// Present spvc
}];

请注意,在iOS6上,如果出现错误,可能不会调用完成块。这似乎是iOS7中解决的bug。

当支持多个操作系统和多个平台时,创建链接可能会成为一个复杂的问题。例如,iOS7(其中一些)不支持WebObject,您创建的一些链接会打开另一个国家/地区的商店,然后打开用户的商店等。

有一个名为iLink的开源库可以帮助您。

这个库的优点是链接将在运行时找到并创建(该库将检查应用ID和它运行的操作系统,并确定应该创建什么链接)。最好的一点是,在使用它之前,你几乎不需要配置任何东西,这样就不会出错,并且总是可以工作。如果你在同一个项目上有几个目标,这样你就不必记住要使用哪个应用ID或链接,这也很棒。如果商店上有新版本(这是内置的,你可以通过一个简单的标志关闭它),如果用户同意,这个库还会提示用户升级应用程序,直接指向应用程序的升级页面。

将2个库文件复制到您的项目(iLink. h和iLink. m)。

在您的app的. m:

#import "iLink.h"


+ (void)initialize
{
//configure iLink
[iLink sharedInstance].globalPromptForUpdate = YES; // If you want iLink to prompt user to update when the app is old.
}

例如,在您要打开评级页面的位置,只需使用:

[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_APPLE_ID]; // You should find YOUR_PAID_APP_APPLE_ID from iTunes Connect

不要忘记在同一个文件中导入iLink. h。

那里有一个非常好的文档,用于整个库,以及iPhone和Mac的示例项目。

这是重定向/链接应用商店上其他现有应用程序的简单而简短的方法。

 NSString *customURL = @"http://itunes.apple.com/app/id951386316";


if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}

从iOS6正确的方法开始,通过使用SK Store产品视图控制器类来做到这一点。

Swift 5. x

func openStoreProductWithiTunesItemIdentifier(_ identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self


let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in
if loaded {
// Parent class of self is UIViewContorller
self?.present(storeViewController, animated: true, completion: nil)
}
}
}
private func productViewControllerDidFinish(viewController: SKStoreProductViewController) {
viewController.dismiss(animated: true, completion: nil)
}
// Usage:
openStoreProductWithiTunesItemIdentifier("1234567")

Swift3. x

func openStoreProductWithiTunesItemIdentifier(identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self


let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in
if loaded {
// Parent class of self is UIViewContorller
self?.present(storeViewController, animated: true, completion: nil)
}
}
}


func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
viewController.dismiss(animated: true, completion: nil)
}
// Usage:
openStoreProductWithiTunesItemIdentifier(identifier: "13432")

您可以像这样获取应用程序的itunes项标识符:(而不是静态标识符)

Swift3.2

var appID: String = infoDictionary["CFBundleIdentifier"]
var url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(appID)")
var data = Data(contentsOf: url!)
var lookup = try? JSONSerialization.jsonObject(with: data!, options: []) as? [AnyHashable: Any]
var appITunesItemIdentifier = lookup["results"][0]["trackId"] as? String
openStoreProductViewController(withITunesItemIdentifier: Int(appITunesItemIdentifier!) ?? 0)

Swift 2. x

func openStoreProductWithiTunesItemIdentifier(identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self


let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProductWithParameters(parameters) { [weak self] (loaded, error) -> Void in
if loaded {
// Parent class of self is UIViewContorller
self?.presentViewController(storeViewController, animated: true, completion: nil)
}
}
}


func productViewControllerDidFinish(viewController: SKStoreProductViewController) {
viewController.dismissViewControllerAnimated(true, completion: nil)
}
// Usage
openStoreProductWithiTunesItemIdentifier("2321354")

Objective-C

static NSInteger const kAppITunesItemIdentifier = 324684580;
[self openStoreProductViewControllerWithITunesItemIdentifier:kAppITunesItemIdentifier];


- (void)openStoreProductViewControllerWithITunesItemIdentifier:(NSInteger)iTunesItemIdentifier {
SKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init];


storeViewController.delegate = self;


NSNumber *identifier = [NSNumber numberWithInteger:iTunesItemIdentifier];


NSDictionary *parameters = @{ SKStoreProductParameterITunesItemIdentifier:identifier };
UIViewController *viewController = self.window.rootViewController;
[storeViewController loadProductWithParameters:parameters
completionBlock:^(BOOL result, NSError *error) {
if (result)
[viewController presentViewController:storeViewController
animated:YES
completion:nil];
else NSLog(@"SKStoreProductViewController: %@", error);
}];


[storeViewController release];
}


#pragma mark - SKStoreProductViewControllerDelegate


- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
[viewController dismissViewControllerAnimated:YES completion:nil];
}

你可以像这样获得kAppITunesItemIdentifier(应用程序的itunes项标识符):(而不是静态的)

NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString* appID = infoDictionary[@"CFBundleIdentifier"];
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]];
NSData* data = [NSData dataWithContentsOfURL:url];
NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSString * appITunesItemIdentifier =  lookup[@"results"][0][@"trackId"];
[self openStoreProductViewControllerWithITunesItemIdentifier:[appITunesItemIdentifier intValue]];

从2015年夏天开始…

-(IBAction)clickedUpdate
{
NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}

将'id1234567890'替换为'id'和'您的十位数字'

  1. 这在所有设备上完美运行。

  2. 它确实进入应用商店直接到,没有重定向。

  3. 适合所有国家商店

  4. 如果链接的目的是更新您实际所在的应用程序,您确实应该转向使用loadProductWithParameters:使用这种“老式”方法可能更好。

至少iOS9岁以上

  • 直接在App Store中打开

一个应用程序

itms-apps://itunes.apple.com/app/[appName]/[appID]

开发者应用列表

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]

对于Xcode 9.1和Swift 4:

  1. 导入StoreKit:
import StoreKit

2.遵守议定书

SKStoreProductViewControllerDelegate

3.执行议定书

func openStoreProductWithiTunesItemIdentifier(identifier: String) {
let storeViewController = SKStoreProductViewController()
storeViewController.delegate = self


let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in


if loaded {
// Parent class of self is UIViewContorller
self?.present(storeViewController, animated: true, completion: nil)
}
}
}

3.1

func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
viewController.dismiss(animated: true, completion: nil)
}
  1. 如何使用:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

备注:

输入应用程序的确切ID非常重要。因为这会导致错误(不显示错误日志,但因此没有任何效果)

根据苹果最新文档 您需要使用

appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"

SKStoreProductViewController

尽管这里有很多答案,但链接到开发人员应用程序的建议似乎都不起作用了。

当我上次访问时,我能够使用以下格式使其工作:

itms-apps://itunes.apple.com/developer/developer-name/id123456789

这不再有效,但删除开发人员名称会:

itms-apps://itunes.apple.com/developer/id123456789

它会直接打开App Store

NSString *iTunesLink = @"itms-apps://itunes.apple.com/app/ebl-
skybanking/id1171655193?mt=8";


[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

所有的答案都过时了,不起作用;使用下面的方法。

开发人员的所有应用程序:
itms-apps://apps.apple.com/developer/developer-name/developerId

单个应用:
itms-apps://itunes.apple.com/app/appId

我认为苹果为应用程序链接提供了一个新的链接: https://apps.apple.com/app/id1445530088https://apps.apple.com/app/{your_app_id}

在SwiftUI-IOS 15.0中

//
//  Test.swift
//  PharmaCodex
//


import SwiftUI


struct Test: View {
    

var body: some View {
        

VStack {
            

Button(action: {
guard let writeReviewURL = URL(string: "https://apps.apple.com/app/id1629135515?action=write-review") else {
fatalError("Expected a valid URL")
}
UIApplication.shared.open(writeReviewURL, options: [:], completionHandler: nil)
                

}) {
Text("Rate/Review")
}
            

            

}
}
}


struct Test_Previews: PreviewProvider {
static var previews: some View {
Test()
}
}

这里的大多数解决方案都已过时并已弃用

对于那些寻找更新的工作解决方案

// let appStoreLink = "https://apps.apple.com/app/{app-name}/{app-id}"


guard let url = URL(string: Constants.App.appStoreLink) else { return }
UIApplication.shared.open(url)