当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何链接到应用商店中的应用》经验,为你挑选了15个好方法。

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

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

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

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



1> Nathan S...:

编辑于2016-02-02

从iOS 6开始,介绍了SKStoreProductViewController类.您可以在不离开应用的情况下关联应用.在代码片段斯威夫特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://避免重定向.

有关命名的信息,请参阅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)!)
    }


提示是使用itms://而不是http://,然后它将直接在应用商店中打开.在iPhone上,使用http时会产生2(!)重定向,使用它时会产生1次重定向.当使用较旧的phobos链接(见上文)时,有0个重定向.如果使用phobos链接,请使用iTunes Connect中的ID.您可以选择提交应用程序而不包含二进制文件.这样,在提交实际二进制文件之前,您将获得id.我没试过这个,但我听说它有效.
这应该在真实设备上进行测试.
请参阅:http://developer.apple.com/library/ios/#qa/qa1633/_index.html(应删除空格.)
除了...'appname`使用的正确值是什么?这是应用程序的"捆绑显示名称"吗?它不区分大小写吗?如何处理空格等?
这应该在真实的设备上进行测试,是的!在插入iPad并在那里进行测试之前,我一直没有发生任何事情.GEH.
如果您使用itms:如果有可用更新,它将不会显示更新选项.请改用itms-apps://或https://.
受到高度评价的评论说要使用`itms:// ......,但这会打开iTunes应用程序,而不是App Store应用程序!使用`itms-apps://`代替。
在iOS上。`itms`打开iTunes。而`itms-apps`则打开App Store。如果提示用户进行更新,这是一个关键的区别!(iOS 10)

2> GeneCode..:

如果要直接在App Store中打开应用程序,则应使用:

ITMS-应用:// ...

这样它将直接在设备中打开App Store应用程序,而不是首先进入iTunes,然后只打开App Store(仅使用itms://时)

希望有所帮助.


编辑:APR,2017.itms-apps://实际上在iOS10中再次运行.我测试了它.

编辑:APR,2013.这不再适用于iOS5及更高版本.只是用

https://itunes.apple.com/app/id378458261

而且没有更多的重定向.


在iOS上.`itms`打开itunes.而`itms-apps`打开App Store.如果提示用户更新,这是一个关键区别!(iOS 10)
Rocotilos,你确定这不再适用吗?你可以发布链接吗?
@PEZ截至今天,我在使用http://时看到两个重定向...答案对我来说非常合适 - itms-apps:// ...直接在设备上打开App Store应用程序,没有任何重定向.
`itms-apps`通过iOS 10.2中的`openURL:`为我打开App Store应用程序.似乎没有问题.

3> Ramis..:

从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]];


在swift中不要忘记导入和委托:import StoreKit类RateMeViewController:UIViewController,SKStoreProductViewControllerDelegate {

4> 小智..:
2015年夏季开始......
-(IBAction)clickedUpdate
{
    NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}

将"id1234567890"替换为"id"和"您的十位数"

    这适用于所有设备.

    直接进入应用程序商店,没有重定向.

    对所有国家商店都可以.

    确实你应该转向使用 loadProductWithParameters,如果链接的目的是更新你实际上在内的应用程序:使用这种"老式"方法可能更好.


我在哪里可以找到这个ID?

5> Dev01..:

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



6> Tibidabo..:

此代码在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];



7> matt..:

只需在应用链接中将"itunes"更改为"phobos"即可.

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

现在它将直接打开App Store


这似乎不再适用于3.0.
http://developer.apple.com/iphone/library/qa/qa2008/qa1629.html说它有效......

8> dulgan..:

要有没有重定向的直接链接:

    使用iTunes链接制作工具http://itunes.apple.com/linkmaker/获取真正的直接链接

    更换http://itms-apps://

    用链接打开链接 [[UIApplication sharedApplication] openURL:url];

请注意,这些链接仅适用于实际设备,而不适用于模拟器.

资料来源:https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html


为itunes.apple.com/linkmaker +1,每个人都测试设备中的链接而不是在模拟器中,我在测试模拟器中浪费时间.
感谢有关模拟器的信息,我会将其添加到答案中

9> Almas Adilbe..:

这对我来说非常适合使用APP ID:

 NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

重定向的数量是ZERO.



10> Ben Flynn..:

许多答案建议使用'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中解决的错误.



11> Andrew..:

如果您想链接到开发人员的应用程序,并且开发人员的名称有标点符号或空格(例如Development Company,LLC),请构建您的URL,如下所示:

itms-apps://itunes.com/apps/DevelopmentCompanyLLC

否则,它会在iOS 4.3.3上返回"此请求无法处理"



12> 小智..:

您可以通过链接制造商获取应用商店或iTunes中特定商品的链接:http: //itunes.apple.com/linkmaker/



13> TouchMint..:

这在ios5中正常工作并直接链接

NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];



14> iChirag..:

这是在app store上重定向/链接其他现有应用程序的简单方法.

 NSString *customURL = @"http://itunes.apple.com/app/id951386316";

 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
 {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
 } 



15> xhinoda..:

对于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非常重要。因为这会导致错误(不显示错误日志,但因此无法正常工作)

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有