アプリストアのアプリにリンクする方法


700

iPhoneゲームの無料版を作成しています。アプリストアの有料版に移動するためのボタンを無料版の中に入れたいのですが。標準リンクを使用する場合

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

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

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


1
:SWIFT 3.xおよびローカライズされたアプリケーションこの回答のかもしれないのヘルプについてstackoverflow.com/a/41765175/3143890
LukeSideWalker

回答:


771

2016-02-02に編集されました

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

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


アップルデベロッパー向けニュースとアナウンスから。

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://ます。

注意してください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では、アプリからストアを起動するための次の手順とコードが提案されています。

  1. コンピュータでiTunesを起動します。
  2. リンクするアイテムを検索します。
  3. iTunesでアイテムの名前を右クリックまたはControlキーを押しながらクリックし、ポップアップメニューから[iTunes Store URLをコピー]を選択します。
  4. アプリケーションNSURLで、コピーしたiTunes URLを使用してオブジェクトを作成し、このオブジェクトをUIApplication's openURL:メソッドに渡して、App Storeでアイテムを開きます。

サンプルコード:

NSString *iTunesLink = @"itms://itunes.apple.com/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

Swift 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)!)
    }

161
ヒントは、http://の代わりにitms://を使用することです。そうすると、アプリストアで直接開かれます。iPhoneでは、httpを使用すると2(!)のリダイレクトを作成し、itmsを使用すると1のリダイレクトを作成します。古いphobosリンク(上記を参照)を使用する場合、リダイレクトはありません。phobosリンクを使用する場合は、iTunes ConnectのIDを使用します。バイナリを含めずにアプリを送信することを選択できます。この方法では、実際のバイナリを送信する前にIDを取得します。私はこれを試していませんが、うまくいくと聞きました。
quano

11
参照:developer.apple.com/library/ios/#qa/qa1633/_index.html(空白は単に削除する必要があります。)
Nathan S.

8
例外...使用する正しい値は何appnameですか?アプリの「バンドル表示名」ですか?大文字と小文字は区別されませんか?空白等の扱いは?
aroth

14
これは実際のデバイスでテストする必要があります。
プロトコール

7
これは実際のデバイスでテストする必要があります。iPadを接続してテストするまで、約1時間何も起こらなかった。ええ。
Kalle、

361

アプリを直接App Storeで開きたい場合は、以下を使用する必要があります。

itms-apps:// ...

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

お役に立てば幸いです。


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

編集:2013年4月。これはiOS5以降では機能しなくなりました。使うだけ

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

リダイレクトはもうありません。


2
@PEZ今日の時点で、http://を使用すると2つのリダイレクトが表示されます。答えは完全に機能します。itms-apps:// ...は、リダイレクトなしでデバイス上のApp Storeアプリを直接開きます。
Josh Brown、

4
ロコティロス、これはもう機能しないのですか?リンクを投稿できますか?
johndodo 2013年

8
iOS。 itmsiTunesを開きます。itms-appsがApp Store を開きます。これは、ユーザーに更新を促す場合の重要な違いです。(iOS 10)
mcm

2
itms-appsopenURL:iOS 10.2でApp Storeアプリを開きます。問題ないようです。
pkamb 2017

1
10.3以降、このメソッドは機能しますが、「このURLをアプリストアで開く」という中間の表示ポップアップを通過する必要がありますか?参考:blog.branch.io/...
GABRY

51

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アイテムIDは次のように取得できます:(静的なIDではなく)

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

4
インポートとデリゲートを忘れないでください:インポートStoreKitクラスRateMeViewController:UIViewController、SKStoreProductViewControllerDelegate {
djdance

これはまだ機能しますが、行って[レビューを書く]をクリックしても機能しません。上部の隅にある[保存]ボタンをクリックしてから、[レビューを書く]をクリックする必要があります。誰かが回避策を知っていますか?
socca1157

「レビューを書く」が別のモーダルを開こうとしましたが、おそらくすでにモーダルで表示しているために失敗します。しかし、アップルはそれを強制します。したがって、レビューを機能させる適切な方法がないようです。この概念全体を無効にします。
AmitP 2017年

そのjsonは常にデータを返すわけではなく、時々countゼロを返します。送信前にアプリIDを取得するのは信頼できません。
アンバーK

41

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しかし、リンクの目的は、あなたの中の実際にアプリを更新する場合:それは、この「昔ながらの」アプローチを使用する可能性の方が良いです。


また、(ユーザーにアプリのカタログを表示したい場合は)デベロッパーページに移動するために、次のコードを使用できます。
TheBestBigAl

2
このIDはどこにありますか?
mcfly soft 2016

1
2015年夏?!全世界が同じ国に住んでいるように。:(
nacho4d

39

Appleがappstore.comのURLを発表しました。

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

App Storeのショートリンクには、iOSアプリ用とMacアプリ用の2つの形式の3つのタイプがあります。

会社名

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

Chen's Photography&Software => http://appstore.com/chensphotographyandsoftware

アプリ名の例

オカリナ=> http://appstore.com/ocarina

私のペリーはどこですか?=> http://appstore.com/wheresmyperry

Brain Challenge™=> http://appstore.com/brainchallenge


1
これは実際には、少なくともMacストアで信頼性のある動作をする唯一のものです
Radu Simionescu '19年

これについて知っておくと便利ですが、残念ながらiOSではSafariを介してリダイレクトされます(そして、「サーバーのIDを確認できません」という醜いメッセージが表示されます)。
sudo make install

番号。これをお読みください-「これらのApp Storeショートリンクは便宜のために提供されており、特定のアプリまたは会社へのリンクが保証されていません。」したがって、基本的にはランダムに与えられます。
durazno 2016

30

このコードは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];

これは機能しますが、ダッシュなどの特殊文字をアプリ名から削除する必要もあります。
Macondo2Seattle 2012

@revsと@BlackRiderに感謝
Ganesh Guturi 2013年

開発者がアップロードしたすべてのアプリを開いて1つのページに表示できますか?
Imran 2014年

これは、最小限のリダイレクトとアプリ名の空白の最大限の処理で私のために機能した唯一のドロップインソリューションでした。
LordParsley

29

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

  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


3
itunes.apple.com/linkmakerの+1、誰もがシミュレータではなくデバイスでリンクをテストしました。シミュレータのテストに時間を浪費していました。
karthik 2013

2
シミュレーターについての情報をありがとう、これを答えに追加します
dulgan


18

これは、APP IDのみを使用して完全に機能しました。

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

リダイレクトの数はゼロです。


13

多くの回答が「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]];

この回答の時点で、2014年3月に最終更新されたhttps://developer.apple.com/library/ios/qa/qa1629/_index.htmlを参照してください

iOS 6以上をサポートするアプリの場合、アップルは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で解決されたバグのようです。


12

開発者のアプリにリンクする必要があり、開発者の名前に句読点またはスペースが含まれている場合(例:Development Company、LLC)、次のようなURLを作成します。

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

それ以外の場合、iOS 4.3.3で「このリクエストは処理できません」を返します


1
これが機能しない場合は、次の構文を試してください。メーカー:itunes.apple.com/linkmaker
Chuck Smith、

また、これらの「特別な」文字をエンコードしてみることもできます。つまり、「。」を置き換えます。「%2E」あり
wzs

それは完璧な答えです!
Sam B

11

アプリストアまたはiTunesの特定のアイテムへのリンクは、リンクメーカー(http://itunes.apple.com/linkmaker/)から入手できます。


私のitunes-connectのリンクが機能しなかったので、これは私を助け、ジェネレーターでは機能します。ありがとう
Dorad

9

これは機能しており、ios5で直接リンクしています

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

8

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

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

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

6

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を入力することが非常に重要です。これによりエラーが発生するため(エラーログは表示されませんが、このため正常に機能しません)


1
同じことをデバイスで実行しています。成功していません
Andrea Mugnaini 2017

4

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

複数の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

少なくともiOS 9以降

  • App Storeで直接開く

アプリ

itms-apps://itunes.apple.com/app/[appName]/[appID]

開発者のアプリのリスト

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]

appName必要ありません。
DawnSong、

4

Appleの最新ドキュメントによると あなたは使う必要があります

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

または

SKStoreProductViewController 

リンクを更新していただけますか?これが機能しない場合、これは非常に興味深いようです。
レミーVirin

リンクされたドキュメントは、itms:またはについて言及していませんitms-apps:。iOSの12実行している私のデバイス上でそのスキームの仕事の罰金を使用してリンク
テオ

4

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

私が最後に訪れたとき、私はそれをフォーマットを使用して機能させることができました:

itms-apps://itunes.apple.com/developer/developer-name/id123456789

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

itms-apps://itunes.apple.com/developer/id123456789

3

アプリストア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);
}

3

すべての回答は古く、機能しません。以下の方法を使用してください。

開発者のすべてのアプリ:
itms-apps://apps.apple.com/developer/developer-name/developerId

単一のアプリ:
itms-apps://itunes.apple.com/app/appId


1

App Storeを直接開きます

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

0

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

http://itunes.apple.com/lookup?id= "your app ID here"はjsonを返します。これから、キー " trackViewUrl "を見つけ、値は目的のURLです。(単に置き換えるこのURLを使用https://してitms-apps://).Thisはうまく動作します。

たとえば、アプリ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]];

ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.