小编典典

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

all

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

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

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

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


阅读 436

收藏
2022-03-02

共2个答案

小编典典

编辑于 2016-02-02

从 iOS 6开始,引入了SKStoreProductViewController类。您可以在不离开应用的情况下链接应用。
Swift 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://避免重定向。

请注意 ,这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. 右键单击或按住 Control 单击 iTunes 中的项目名称,然后从弹出菜单中选择“复制 iTunes Store URL”。
  4. 在您的应用程序中,使用复制的 iTunes URL 创建一个NSURL对象,然后将此对象传递给UIApplication‘s openURL: 方法以在 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];

Swift 4.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)!)
    }
2022-03-02
小编典典

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

Swift5.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")

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")

您可以像这样获取应用程序的 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)

斯威夫特 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")

目标-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]];
2022-03-03