我正在创建我的iPhone游戏的免费版本.我希望在免费版本中有一个按钮,可以将人们带到应用商店中的付费版本.如果我使用标准链接
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
iPhone首先打开Safari,然后打开应用程序商店.我使用过直接打开应用商店的其他应用,所以我知道这是可能的.
有任何想法吗?应用商店的URL方案是什么?
编辑于2016-02-02
从iOS 6开始,介绍了SKStoreProductViewController类.您可以在不离开应用的情况下关联应用.在代码片段斯威夫特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
补充说明:
您可以替换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建议从应用程序启动商店的这些步骤和代码:
在您的计算机上启动iTunes.
搜索要链接到的项目.
右键单击或按住Control键并单击iTunes中项目的名称,然后从弹出菜单中选择"复制iTunes Store URL".
在您的应用程序中,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]];
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)!) }
如果要直接在App Store中打开应用程序,则应使用:
ITMS-应用:// ...
这样它将直接在设备中打开App Store应用程序,而不是首先进入iTunes,然后只打开App Store(仅使用itms://时)
希望有所帮助.
编辑:APR,2017.itms-apps://实际上在iOS10中再次运行.我测试了它.
编辑:APR,2013.这不再适用于iOS5及更高版本.只是用
https://itunes.apple.com/app/id378458261
而且没有更多的重定向.
从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")
您可以像这样获取应用程序的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)
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")
目标-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
(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]];
-(IBAction)clickedUpdate { NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]]; }
将"id1234567890"替换为"id"和"您的十位数"
这适用于所有设备.
它直接进入应用程序商店,没有重定向.
对所有国家商店都可以.
确实你应该转向使用 loadProductWithParameters
,但如果链接的目的是更新你实际上在内的应用程序:使用这种"老式"方法可能更好.
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
此代码在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上用http替换itms-apps:
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
在iOS上打开网址:
[[UIApplication sharedApplication] openURL:appStoreURL];
苹果电脑:
[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
只需在应用链接中将"itunes"更改为"phobos"即可.
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
现在它将直接打开App Store
要有没有重定向的直接链接:
使用iTunes链接制作工具http://itunes.apple.com/linkmaker/获取真正的直接链接
更换http://
用itms-apps://
用链接打开链接 [[UIApplication sharedApplication] openURL:url];
请注意,这些链接仅适用于实际设备,而不适用于模拟器.
资料来源:https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html
这对我来说非常适合使用APP ID:
NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
重定向的数量是ZERO.
许多答案建议使用'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年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 }];
请注意,在iOS6上,如果有错误,可能无法调用完成块.这似乎是在iOS 7中解决的错误.
如果您想链接到开发人员的应用程序,并且开发人员的名称有标点符号或空格(例如Development Company,LLC),请构建您的URL,如下所示:
itms-apps://itunes.com/apps/DevelopmentCompanyLLC
否则,它会在iOS 4.3.3上返回"此请求无法处理"
您可以通过链接制造商获取应用商店或iTunes中特定商品的链接:http: //itunes.apple.com/linkmaker/
这在ios5中正常工作并直接链接
NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
这是在app store上重定向/链接其他现有应用程序的简单方法.
NSString *customURL = @"http://itunes.apple.com/app/id951386316"; if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; }
对于Xcode 9.1和Swift 4:
导入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) }
如何使用:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")
注意:
输入APP的确切ID非常重要。因为这会导致错误(不显示错误日志,但因此无法正常工作)