我正在创建我的 iPhone 游戏的免费版本。我想在免费版本中有一个按钮,可以将人们带到应用商店中的付费版本。如果我使用标准链接
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
iPhone首先打开Safari,然后是应用商店。我用过其他直接打开应用商店的应用,所以我知道这是可能的。
有任何想法吗?应用商店的 URL Scheme 是什么?
编辑于 2016-02-02
从 iOS 6开始,引入了SKStoreProductViewController类。您可以在不离开应用的情况下链接应用。 Swift 3.x/2.x 和 Objective-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
使用 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://避免重定向。
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建议使用以下步骤和代码从应用程序启动商店:
NSURL
UIApplication
openURL
示例代码:
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)!) }
从 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 项目标识符):(而不是静态的)
kAppITunesItemIdentifier
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]];