我正在创建 iPhone 游戏的免费版本。我想在免费版本中包含一个按钮,该按钮可以将人们带到应用商店中的付费版本。如果我使用标准链接
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
iPhone 首先打开 Safari,然后打开应用程序商店。我使用了其他直接打开应用商店的应用,所以我知道这是可能的。
有任何想法吗?应用商店的 URL 方案是什么?
于 2016-02-02 编辑
从 iOS 6 开始,引入了SKStoreProductViewController 类。您可以在不离开应用程序的情况下链接应用程序。 Swift 3.x / 2.x和Objective-C 中的代码段在此处。
SKStoreProductViewController对象提供了一个商店,该商店允许用户从 App Store 购买其他媒体。例如,您的应用程序可能会显示商店,以允许用户购买其他应用程序。
使用 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建议了以下步骤和代码,用于从应用程序启动商店:
NSURL
对象,然后将此对象传递给UIApplication
的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];
斯威夫特 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)!)
}
如果要直接在 App Store 中打开应用程序,则应使用:
itms-apps:// ...
这样,它将直接在设备中打开 App Store 应用程序,而不是先转到 iTunes,然后仅打开 App Store(仅使用 itms:// 时)。
希望能有所帮助。
编辑:2017 年 4 月。itms-apps:// 实际上在 iOS10 中可以再次使用。我测试了
编辑:2013 年 4 月。这不再适用于 iOS5 及更高版本。只需使用
https://itunes.apple.com/app/id378458261
并且没有更多的重定向。
从 iOS 6 开始,使用SKStoreProductViewController类以正确的方式进行操作。
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")
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 项目标识符:(而不是静态的)
斯威夫特 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)
斯威夫特 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]];