我正在创建我的 iPhone 游戏的免费版本。我想在免费版本中有一个按钮,可以将人们带到应用商店中的付费版本。如果我使用标准链接
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
iPhone首先打开Safari,然后是应用商店。我用过其他直接打开应用商店的应用,所以我知道这是可能的。
有任何想法吗?应用商店的 URL Scheme 是什么?
我正在创建我的 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 购买其他媒体的商店。例如,您的应用可能会显示商店以允许用户购买另一个应用。
使用 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
'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];
斯威夫特 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 打开一个应用,你应该使用:
它的应用程序://...
这样它将直接在设备中打开 App Store 应用程序,而不是先去 iTunes,然后只打开 App Store(仅使用 itms:// 时)
希望有帮助。
编辑:2017 年 4 月。 itms-apps:// 实际上在 iOS10 中再次起作用。我测试了它。
编辑:2013 年 4 月。这不再适用于 iOS5 及更高版本。只需使用
https://itunes.apple.com/app/id378458261
并且没有更多的重定向。
从 iOS 6 开始,使用SKStoreProductViewController类的正确方法。
斯威夫特 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")
斯威夫特 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]];
Apple 刚刚公布了 appstore.com 网址。
https://developer.apple.com/library/ios/qa/qa1633/_index.html
App Store Short Links 共有三种类型,有两种形式,一种用于 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 短链接。此规范 URL 是通过更改或删除某些字符(其中许多是非法字符或在 URL 中具有特殊含义(例如,“&”))而创建的。
要创建 App Store 短链接,请将以下规则应用于您的公司或应用名称:
删除所有空格
将所有字符转换为小写
删除所有版权 (©)、商标 (™) 和注册商标 (®) 符号
用“and”替换和号(“&”)
删除大部分标点符号(参见清单 2 的集合)
用它们的基本字符(u、a 等)替换重音字符和其他“装饰”字符(ü、å 等)
保持所有其他字符不变。
清单 2 必须删除的标点符号。
!¡"#$%'()*+,-./:;<=>¿?@[]^_`{|}~
下面是一些示例来演示发生的转换。
应用商店
公司名称示例
Gameloft => http://appstore.com/gameloft
Activision Publishing, Inc. => http://appstore.com/activisionpublishinginc
陈氏摄影软件 => http://appstore.com/chensphotographyandsoftware
应用名称示例
陶笛 => http://appstore.com/ocarina
我的佩里呢?=> http://appstore.com/wheresmyperry
大脑挑战™ => http://appstore.com/brainchallenge
-(IBAction)clickedUpdate
{
NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}
用“id”和“你的十位数字”替换“id1234567890”
这适用于所有设备。
它确实直接进入应用商店,没有重定向。
适用于所有全国性商店。
确实,您应该改用 using loadProductWithParameters
,但如果链接的目的是更新您实际在其中的应用程序:使用这种“老式”方法可能会更好。
有一个没有重定向的直接链接:
http://
为itms-apps://
[[UIApplication sharedApplication] openURL:url];
请注意,这些链接仅适用于实际设备,不适用于模拟器。
来源:https ://developer.apple.com/library/ios/#qa/qa2008/qa1629.html
此代码在 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 上打开 URL:
[[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
仅使用 APP ID,这对我来说非常有效:
NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
重定向次数为零。
许多答案建议使用“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]];
所有答案都已过时且不起作用;使用下面的方法。
开发者的所有应用:
itms-apps://apps.apple.com/developer/developer-name/developerId
单个应用程序:
itms-apps://itunes.apple.com/app/appId
这是重定向/链接应用商店中其他现有应用程序的简单而简短的方法。
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:
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非常重要。因为这会导致错误(不显示错误日志,但没有任何工作正常)
我可以确认,如果您在 iTunes 连接中创建应用程序,您会在提交之前获取您的应用程序 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];
工作一种享受
我认为 Apple 为应用程序链接提供了一个新链接: https ://apps.apple.com/app/id1445530088或https://apps.apple.com/app/ {your_app_id}
当支持多个操作系统和多个平台时,创建链接可能会成为一个复杂的问题。例如,iOS 7(其中一些)不支持 WebObjects,您创建的某些链接会打开另一个国家/地区商店,然后是用户的商店等。
有一个名为iLink的开源库可以帮助您。
该库的优点是可以在运行时找到并创建链接(该库将检查应用程序 ID 和它正在运行的操作系统,并确定应该创建哪个链接)。最好的一点是,在使用它之前您几乎不需要配置任何东西,这样就不会出错并且可以一直工作。如果您在同一个项目上的目标很少,那也很好,这样您就不必记住要使用哪个应用 ID 或链接。如果商店中有新版本(这是内置的,您可以通过一个简单的标志将其关闭)直接指向应用程序的升级页面,如果用户同意,此库还会提示用户升级应用程序。
将 2 个库文件复制到您的项目(iLink.h 和 iLink.m)。
在您的 appDelegate.m 上:
#import "iLink.h"
+ (void)initialize
{
//configure iLink
[iLink sharedInstance].globalPromptForUpdate = YES; // If you want iLink to prompt user to update when the app is old.
}
例如,在您要打开评级页面的地方,只需使用:
[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_APPLE_ID]; // You should find YOUR_PAID_APP_APPLE_ID from iTunes Connect
不要忘记在同一个文件中导入 iLink.h。
那里有一个非常好的整个库的文档,还有一个适用于 iPhone 和 Mac 的示例项目。
itms-apps://itunes.apple.com/app/[appName]/[appID]
itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
根据苹果最新的文档 你需要使用
appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"
或者
SKStoreProductViewController
尽管这里有很多答案,但链接到开发人员应用程序的建议似乎都不再有效。
当我上次访问时,我能够使用以下格式使其工作:
itms-apps://itunes.apple.com/developer/developer-name/id123456789
这不再有效,但删除开发人员名称会:
itms-apps://itunes.apple.com/developer/id123456789
如果您有应用商店 ID,则最好使用它。特别是如果您将来可能会更改应用程序的名称。
http://itunes.apple.com/app/id378458261
如果您没有应用商店 ID,您可以根据此文档创建一个 url https://developer.apple.com/library/ios/qa/qa1633/_index.html
+ (NSURL *)appStoreURL
{
static NSURL *appStoreURL;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
appStoreURL = [self appStoreURLFromBundleName:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
});
return appStoreURL;
}
+ (NSURL *)appStoreURLFromBundleName:(NSString *)bundleName
{
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@", [self sanitizeAppStoreResourceSpecifier:bundleName]]];
return appStoreURL;
}
+ (NSString *)sanitizeAppStoreResourceSpecifier:(NSString *)resourceSpecifier
{
/*
https://developer.apple.com/library/ios/qa/qa1633/_index.html
To create an App Store Short Link, apply the following rules to your company or app name:
Remove all whitespace
Convert all characters to lower-case
Remove all copyright (©), trademark (™) and registered mark (®) symbols
Replace ampersands ("&") with "and"
Remove most punctuation (See Listing 2 for the set)
Replace accented and other "decorated" characters (ü, å, etc.) with their elemental character (u, a, etc.)
Leave all other characters as-is.
*/
resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"&" withString:@"and"];
resourceSpecifier = [[NSString alloc] initWithData:[resourceSpecifier dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding];
resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"[!¡\"#$%'()*+,-./:;<=>¿?@\\[\\]\\^_`{|}~\\s\\t\\n]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, resourceSpecifier.length)];
resourceSpecifier = [resourceSpecifier lowercaseString];
return resourceSpecifier;
}
通过这个测试
- (void)testAppStoreURLFromBundleName
{
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Nuclear™"].absoluteString, @"itms-apps://itunes.com/app/nuclear", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Magazine+"].absoluteString, @"itms-apps://itunes.com/app/magazine", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Karl & CO"].absoluteString, @"itms-apps://itunes.com/app/karlandco", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"[Fluppy fuck]"].absoluteString, @"itms-apps://itunes.com/app/fluppyfuck", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Pollos Hérmanos"].absoluteString, @"itms-apps://itunes.com/app/polloshermanos", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Niños and niñas"].absoluteString, @"itms-apps://itunes.com/app/ninosandninas", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Trond, MobizMag"].absoluteString, @"itms-apps://itunes.com/app/trondmobizmag", nil);
STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"!__SPECIAL-PLIZES__!"].absoluteString, @"itms-apps://itunes.com/app/specialplizes", nil);
}
它将直接打开App Store
NSString *iTunesLink = @"itms-apps://itunes.apple.com/app/ebl-
skybanking/id1171655193?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
试试这个方法
http://itunes.apple.com/lookup?id="your app ID here" return json.From this, find key " trackViewUrl " and value 是所需的 url。使用此网址(只需替换https://
为itms-apps://
)。这很好用。
例如,如果您的应用 ID 是 xyz,则转到此链接 http://itunes.apple.com/lookup?id=xyz
然后找到键“ trackViewUrl ”的 url。这是您的应用在应用商店中的 url 并在 xcode 中使用这个 url 试试这个
NSString *iTunesLink = @"itms-apps://itunes.apple.com/us/app/Your app name/id Your app ID?mt=8&uo=4";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
谢谢