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

mat*_*att 688 objective-c app-store ios

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

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

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

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

Nat*_* S. 755

编辑于2016-02-02

从iOS 6开始,介绍了SKStoreProductViewController类.您可以在不离开应用的情况下关联应用.在代码片段斯威夫特3.X/2.XObjective-C的就是这里.

一个SKStoreProductViewController对象提出了一个商店,允许用户从App Store购买其他媒体.例如,您的应用可能会显示商店以允许用户购买其他应用.


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

使用iTunes链接在App Store上直接将您的应用程序驱动到您的应用程序通过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://避免重定向.

有关命名的信息,请参阅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. 右键单击或按住Control键并单击iTunes中项目的名称,然后从弹出菜单中选择"复制iTunes Store URL".
  4. 在您的应用程序中,itms://使用复制的iTunes URL 创建一个对象,然后将此对象传递给itms-apps://'s NSURL:方法以在App Store中打开您的项目.

示例代码:

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

Swift 3.0

   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)!)
    }
Run Code Online (Sandbox Code Playgroud)

  • 提示是使用itms://而不是http://,然后它将直接在应用商店中打开.在iPhone上,使用http时会产生2(!)重定向,使用它时会产生1次重定向.当使用较旧的phobos链接(见上文)时,有0个重定向.如果使用phobos链接,请使用iTunes Connect中的ID.您可以选择提交应用程序而不包含二进制文件.这样,在提交实际二进制文件之前,您将获得id.我没试过这个,但我听说它有效. (157认同)
  • 这应该在真实设备上进行测试. (14认同)
  • 请参阅:http://developer.apple.com/library/ios/#qa/qa1633/_index.html(应删除空格.) (11认同)
  • 除了...'appname`使用的正确值是什么?这是应用程序的"捆绑显示名称"吗?它不区分大小写吗?如何处理空格等? (8认同)
  • 这应该在真实的设备上进行测试,是的!在插入iPad并在那里进行测试之前,我一直没有发生任何事情.GEH. (7认同)
  • 如果您使用itms:如果有可用更新,它将不会显示更新选项.请改用itms-apps://或https://. (4认同)
  • 受到高度评价的评论说要使用`itms:// ......,但这会打开iTunes应用程序,而不是App Store应用程序!使用`itms-apps://`代替。 (3认同)
  • 在iOS上。`itms`打开iTunes。而`itms-apps`则打开App Store。如果提示用户进行更新,这是一个关键的区别!(iOS 10) (2认同)

Gen*_*ode 353

如果要直接在App Store中打开应用程序,则应使用:

ITMS-应用:// ...

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

希望有所帮助.


编辑:APR,2017.itms-apps://实际上在iOS10中再次运行.我测试了它.

编辑:APR,2013.这不再适用于iOS5及更高版本.只是用

https://itunes.apple.com/app/id378458261
Run Code Online (Sandbox Code Playgroud)

而且没有更多的重定向.

  • 在iOS上.`itms`打开itunes.而`itms-apps`打开App Store.如果提示用户更新,这是一个关键区别!(iOS 10) (8认同)
  • Rocotilos,你确定这不再适用吗?你可以发布链接吗? (4认同)
  • @PEZ截至今天,我在使用http://时看到两个重定向...答案对我来说非常合适 - itms-apps:// ...直接在设备上打开App Store应用程序,没有任何重定向. (2认同)
  • `itms-apps`通过iOS 10.2中的`openURL:`为我打开App Store应用程序.似乎没有问题. (2认同)

Ram*_*mis 49

从iOS 6开始,正确的方法是使用SKStoreProductViewController类.

Swift 3.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")
Run Code Online (Sandbox Code Playgroud)

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

Swift 3.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)
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

目标-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];
}
Run Code Online (Sandbox Code Playgroud)

你可以得到kAppITunesItemIdentifier(app的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]];
Run Code Online (Sandbox Code Playgroud)

  • 在swift中不要忘记导入和委托:import StoreKit类RateMeViewController:UIViewController,SKStoreProductViewControllerDelegate { (4认同)

Fat*_*tie 41

2015年夏季开始......

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

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

  1. 这适用于所有设备.

  2. 直接进入应用程序商店,没有重定向.

  3. 对所有国家商店都可以.

  4. 确实你应该转向使用 loadProductWithParameters,如果链接的目的是更新你实际上在内的应用程序:使用这种"老式"方法可能更好.

  • 2015 年夏天?!就像整个世界都生活在同一个国家。:( (3认同)
  • 我在哪里可以找到这个ID? (2认同)

Dev*_*v01 36

Apple刚刚发布了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 Short Link.此规范URL是通过更改或删除某些字符(其中许多字符是非法的或在URL中具有特殊含义(例如,"&"))来创建的.

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

删除所有空格

将所有字符转换为小写

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

用"和"替换&符号("&")

删除大多数标点符号(参见清单2中的集合)

用他们的元素字符(u,a等)替换重音和其他"装饰"字符(ü,å等)

保留所有其他字符.

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

!¡"#$%'()*+, - ./ :; <=>¿@ [] ^ _`{|}〜

以下是一些示例,用于演示发生的转换.

应用商店

公司名称示例

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

Activision Publishing,Inc.=> http://appstore.com/activisionpublishinginc

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

应用名称示例

Ocarina => http://appstore.com/ocarina

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

Brain Challenge™=> http://appstore.com/brainchallenge


Tib*_*abo 30

此代码在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:@""]]];
Run Code Online (Sandbox Code Playgroud)

在Mac上用http替换itms-apps:

NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]]; 
Run Code Online (Sandbox Code Playgroud)

在iOS上打开网址:

[[UIApplication sharedApplication] openURL:appStoreURL];
Run Code Online (Sandbox Code Playgroud)

苹果电脑:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Run Code Online (Sandbox Code Playgroud)


mat*_*att 28

只需在应用链接中将"itunes"更改为"phobos"即可.

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

现在它将直接打开App Store

  • 这似乎不再适用于3.0. (5认同)
  • http://developer.apple.com/iphone/library/qa/qa2008/qa1629.html说它有效...... (3认同)

dul*_*gan 28

要有没有重定向的直接链接:

  1. 使用iTunes链接制作工具http://itunes.apple.com/linkmaker/获取真正的直接链接
  2. 更换http://itms-apps://
  3. 用链接打开链接 [[UIApplication sharedApplication] openURL:url];

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

资料来源:https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html

  • 为itunes.apple.com/linkmaker +1,每个人都测试设备中的链接而不是在模拟器中,我在测试模拟器中浪费时间. (3认同)
  • 感谢有关模拟器的信息,我会将其添加到答案中 (2认同)

Alm*_*bek 18

这对我来说非常适合使用APP ID:

 NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
Run Code Online (Sandbox Code Playgroud)

重定向的数量是ZERO.


Ben*_*ynn 13

许多答案建议使用'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]];
Run Code Online (Sandbox Code Playgroud)

请参阅https://developer.apple.com/library/ios/qa/qa1629/_index.html上次更新于2014年3月,截至此答案.

对于支持iOS 6及更高版本的应用程序,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
}];
Run Code Online (Sandbox Code Playgroud)

请注意,在iOS6上,如果有错误,可能无法调用完成块.这似乎是在iOS 7中解决的错误.


And*_*rew 12

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

itms-apps://itunes.com/apps/DevelopmentCompanyLLC
Run Code Online (Sandbox Code Playgroud)

否则,它会在iOS 4.3.3上返回"此请求无法处理"


小智 11

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


Tou*_*int 9

这在ios5中正常工作并直接链接

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


Kar*_*yan 9

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

开发者的所有应用:
itms-apps://apps.apple.com/developer/developer-name/developerId

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


iCh*_*rag 8

这是在app store上重定向/链接其他现有应用程序的简单方法.

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

 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
 {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
 } 
Run Code Online (Sandbox Code Playgroud)


xhi*_*oda 6

对于Xcode 9.1和Swift 4:

  1. 导入StoreKit:
import StoreKit
Run Code Online (Sandbox Code Playgroud)

2.符合协议

SKStoreProductViewControllerDelegate
Run Code Online (Sandbox Code Playgroud)

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)
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

3.1

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

注意:

输入APP的确切ID非常重要。因为这会导致错误(不显示错误日志,但因此无法正常工作)


小智 5

我可以确认,如果您在 iTunes Connect 中创建应用程序,您会在提交之前获得应用程序 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];
Run Code Online (Sandbox Code Playgroud)

工作款待


Mil*_*lon 5

我认为 Apple 为应用链接提供了一个新链接: https : //apps.apple.com/app/id1445530088或https://apps.apple.com/app/{your_app_id }