web-dev-qa-db-ja.com

App Storeのアプリにリンクする方法

私は自分のiPhoneゲームの無料版を作成しています。私は無料版の中にアプリストアの有料版に人々を連れて行くボタンが欲しい。標準リンクを使用している場合

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

iPhoneは最初にSafariを開き、次にApp Storeを開きます。私は直接App Storeを開く他のアプリを使ったことがあるので、それが可能であることを私は知っています。

何か案は?アプリストアのURLスキームは何ですか?

666
matt

2016-02-02に編集

IOS 6からスタート - SKStoreProductViewController クラスが導入された。アプリを離れることなくアプリをリンクできます。 Swift 3.x/2.x および Objective-C のコードスニペットは ここ です。

SKStoreProductViewController オブジェクトは、ユーザーがApp Storeから他のメディアを購入することを可能にするストアを表します。たとえば、アプリにストアを表示して、ユーザーが別のアプリを購入できるようにすることができます。


From アップルデベロッパ向けのニュースとお知らせ

ITunesリンクを使用してApp Store上のアプリに直接顧客を誘導するiTunesリンクを使用すると、Webサイトまたはマーケティングキャンペーンから直接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 は、アプリからストアを起動するための次の手順とコードを示しています。

  1. コンピュータでiTunesを起動します。
  2. リンクしたいアイテムを探します。
  3. ITunesでアイテムの名前を右クリックまたはControlキーを押しながらクリックし、ポップアップメニューから「iTunes StoreのURLをコピー」を選択します。
  4. アプリケーションで、コピーしたiTunesのURLを使ってNSURLオブジェクトを作成し、このオブジェクトをUIApplicationopenURL:メソッドに渡して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://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)!)
    }
737
Nathan S.

App Storeで直接アプリを開く場合は、次のものを使用してください。

itms-apps:// ...

この方法では、最初にiTunesにアクセスするのではなく、デバイスでApp Storeアプリを直接開き、次にApp Storeのみを開きます(itms://を使用している場合)

それが役立つことを願っています。


編集:2017年4月。itms-apps:// iOS10でも実際に動作します。私はそれをテストしました。

編集:2013年4月。これはiOS 5以降では機能しません。ただ使う

https://iTunes.Apple.com/app/id378458261

それ以上のリダイレクトはありません。

341
GeneCode

IOS 6から始めるには、 SKStoreProductViewController classを使用します。

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)

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(アプリの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]];
45
Ramis

2015年夏以降.

-(IBAction)clickedUpdate
{
    NSString *simple = @"itms-apps://iTunes.Apple.com/app/id1234567890";
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}

'id1234567890'を 'id'と 'あなたの10桁の数字'に置き換えてください。

  1. これは すべてのデバイス で完全に機能します。

  2. まっすぐに アプリストアに行く、リダイレクトしない。

  3. すべての 国内店舗 でOKです。

  4. loadProductWithParameters の使用に移るべきですが、リンクの目的が実際に内部にあるアプリを更新することである場合は です。アプローチ。

38
Fattie

Appleはappstore.comのURLを発表したばかりです。

https://developer.Apple.com/library/ios/qa/qa1633/_index.html

App Storeのショートリンクには、iOSアプリケーション用とMacアプリケーション用の2種類があります。

会社名

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のショートリンクを作成するには、会社名またはアプリ名に次の規則を適用します。

すべての空白を削除

すべての文字を小文字に変換する

著作権(©)、商標(™)、および登録商標(®)の記号をすべて削除します。

アンパサンド( "&")を "and"で置き換えます

句読点の大部分を削除します(リストはリスト2を参照)。

アクセント付きの文字やその他の「装飾」文字(ü、åなど)をその基本文字(u、aなど)に置き換えます。

他のすべての文字はそのままにします。

リスト2削除する必要がある句読文字.

"#$% '()* +、 - 。/ :; <=>¿?@ [] ^ _` {|}〜

以下は、行われる変換を示すいくつかの例です。

App Store

会社名の例

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

33
Dev01

このコードは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では、itms-appsをhttpに置き換えます。

NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/iTunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]]; 

IOSでURLを開く:

[[UIApplication sharedApplication] openURL:appStoreURL];

マック:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
30
Tibidabo

アプリのリンクで「iTunes」を「phobos」に変更するだけです。

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

今すぐApp Storeを直接開きます

28
matt

リダイレクトせずに直接リンクするには

  1. ITunesのリンクメーカー http://iTunes.Apple.com/linkmaker/ を使用して、実際の直接リンクを取得してください。
  2. http://itms-apps://に置き換えます
  3. [[UIApplication sharedApplication] openURL:url];でリンクを開く

注意してください、これらのリンクは実際のデバイスでのみ機能し、シミュレータでは機能しません。

ソース: https://developer.Apple.com/library/ios/#qa/qa2008/qa1629.html

26
dulgan

これは私にとってはAPP IDのみを使用して完璧に機能しました。

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

リダイレクト数は0です。

16
Almas Adilbek

いくつかの回答で「itms」または「itms-apps」の使用が推奨されていますが、この方法は特に推奨されていません。 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で解決されたバグのようです。

13
Ben Flynn

開発者のアプリにリンクしたいときに、開発者の名前に句読点やスペース(例:Development Company、LLC)が含まれている場合は、次のようにしてください。

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

そうでなければ、iOS 4.3.3では "このリクエストは処理できません"を返します。

12
Andrew

App StoreまたはiTunesの特定のアイテムへのリンクは、リンクメーカーから入手できます。 http://iTunes.Apple.com/linkmaker/ /

11

これは働いていて直接ios5にリンクしています

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

これは、App Storeで他の既存のアプリケーションをリダイレクト/リンクするための簡単で短い方法です。

 NSString *customURL = @"http://iTunes.Apple.com/app/id951386316";

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

Xcode 9.1およびSwift 4の場合:

  1. 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)
}
  1. 使い方:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

注意:

あなたのアプリの正確なIDを入力することは非常に重要です。これはエラーの原因となるため(エラーログを表示しないが、このため何もうまく動作しない)

5
xhinoda

少なくともiOS 9以上

  • App Storeで直接開く

アプリ

itms-apps://iTunes.Apple.com/app/[appName]/[appID]

開発者のアプリのリスト

itms-apps://iTunes.Apple.com/developer/[developerName]/[developerID]
4
Jakub Truhlář

ITunes connectでアプリを作成した場合は、送信する前にアプリ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];

御馳走を働く

4
user1641587

複数のOSと複数のプラットフォームをサポートする場合、リンクを作成することは複雑な問題になる可能性があります。例えば、WebObjectsはiOS 7ではサポートされていません(それらのいくつか)、あなたが作成したいくつかのリンクは他の国の店を開き、その後ユーザーのものなどを開くでしょう。

iLink と呼ばれるオープンソースのライブラリがあります。

このライブラリの利点は、 実行時にリンクが検出され作成される (ライブラリは、アプリケーションIDとそれが実行されているOSを確認し、どのリンクを作成する必要があるかを判断する)です。これの最もよい点はそれを使用する前にほとんど何も設定する必要がないということです。同じプロジェクトにターゲットがほとんどない場合にもこれは素晴らしいことです。そのため、使用するアプリ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用のサンプルプロジェクトがあります。

4
Jameson

App Store 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:@"[!¡\"#$%'()*+,-./:;<=>¿[email protected]\\[\\]\\^_`{|}~\\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);
}
2
hfossli

ここにはたくさんの答えがありますが、開発者のアプリにリンクするための提案はどれもうまくいかないようです。

私が最後に訪問したとき、私はそれをフォーマットを使って動かすことができました:

itms-apps://iTunes.Apple.com/developer/developer-name/id123456789

これは機能しなくなりましたが、開発者名を削除すると以下のようになります。

itms-apps://iTunes.Apple.com/developer/id123456789
2
Leon

によると アップルの最新のドキュメント あなたは使う必要がある

appStoreLink = "https://iTunes.Apple.com/us/app/Apple-store/id375380948?mt=8"  

または

SKStoreProductViewController 
2
Mihir Oza

この方法を試してください

http://iTunes.Apple.com/lookup?id= "ここであなたのアプリID"はjsonを返します。この中から、キー " trackViewUrl "を見つけて値を入力します。このURLを使用してください(単にhttps://itms-apps://に置き換えてください)。

たとえば、アプリIDがxyzの場合は、このリンクにアクセスしてください http://iTunes.Apple.com/lookup?id=xyz

次に、キー " trackViewUrl "のURLを探します。これは、App StoreのアプリのURLです。xcodeでこのURLを使用するには、次の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]];

ありがとう

app Storeを直接開きます

NSString *iTunesLink = @"itms-apps://iTunes.Apple.com/app/ebl- 
skybanking/id1171655193?mt=8";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
0
Biswajit Banik