アプリストアでアプリにリンクする方法
-
10-07-2019 - |
質問
iPhoneゲームの無料版を作成しています。アプリストアの有料版に人々を連れて行く無料版の中にボタンが欲しいです。標準リンクを使用する場合
http:// itunes。 apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
iPhoneは最初にSafariを開き、次にアプリストアを開きます。アプリストアを直接開く他のアプリを使用しているので、それが可能であることはわかっています。
アイデアはありますか?アプリストアのURLスキームは何ですか?
解決
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://
に置き換えることができます。
ネーミングの詳細については、Apple QA1633を参照してください:
https://developer.apple.com/library/content /qa/qa1633/_index.html 。
編集(2015年1月現在):
itunes.com/appsリンクをappstore.com/appsに更新する必要があります。更新された上記のQA1633を参照してください。新しい QA1629 は、ストアを起動するためのこれらの手順とコードを提案していますアプリから:
- コンピューターでiTunesを起動します。
- リンクするアイテムを検索します。
- iTunesでアイテム名を右クリックまたはControlキーを押しながらクリックし、<!> quot; iTunes Store URLをコピー<!> quot;を選択します。ポップアップメニューから。
- アプリケーションで、コピーされたiTunes URLで
NSURL
オブジェクトを作成し、このオブジェクトをUIApplication
の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)!)
}
他のヒント
App Storeに直接アプリを開く場合は、次を使用する必要があります。
itms-apps:// ...
この方法では、最初にiTunesにアクセスする代わりに、デバイスでApp Storeアプリを直接開き、App Storeのみを開きます(itms://のみを使用する場合)
役立つこと。
編集:2017年4月。 itms-apps://はiOS10でも実際に機能します。テストしました。
編集:2013年4月。 これはiOS5以降では動作しません。使用する
https://itunes.apple.com/app/id378458261
これ以上リダイレクトはありません。
SKStoreProductViewController クラスを使用して、iOS 6から正しい方法で起動します。
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")
objective-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]];
2015年夏以降...
-(IBAction)clickedUpdate
{
NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}
「id1234567890」を「id」と「10桁の数字」に置き換えます
-
これは、すべてのデバイスで完全に機能します。
-
アプリストアにまっすぐ移動します。リダイレクトはありません。
-
全国の店舗すべてで問題ありません。
-
使用に移る
loadProductWithParameters
、しかし、リンクの目的が実際にあなたがいるアプリを更新することである場合、それは本当です:それはおそらくこの<!> quot; old-fashioned <!> quot;アプローチ。
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ショートリンクがあります。この正規URLは、特定の文字を変更または削除することで作成されます(その多くは違法であるか、URLで特別な意味を持ちます(たとえば、<!> quot; <!> amp; <!> quot;)。
App Storeショートリンクを作成するには、次のルールを会社名またはアプリ名に適用します。
すべての空白を削除
すべての文字を小文字に変換する
すべての著作権(<!>#169;)、商標(<!>#8482;)、および登録商標(<!>#174;)記号を削除
アンパサンド(<!> quot; <!> amp; <!> quot;)を<!> quot; and <!> quot;に置き換えます
ほとんどの句読点を削除します(セットについてはリスト2を参照)
アクセント記号やその他の<!> quot; decorated <!> quot;を置き換えます。文字(<!>#252;、<!>#229;など)とその要素文字(u、aなど)
他のすべてのキャラクターはそのままにします。
削除する必要がある2つの句読点文字を一覧表示します。
!<!>#161; <!> quot;#$% '()* +、-。/ :; <!> lt; = <!> gt; <!>#191;?@ [] ^ _` {|}〜
以下に、行われる変換を示すいくつかの例を示します。
App Store
会社名の例
Gameloft = <!> gt; http://appstore.com/gameloft
Activision Publishing、Inc. = <!> gt; http://appstore.com/activisionpublishinginc
チェンの写真<!> amp;ソフトウェア= <!> gt; http://appstore.com/chensphotographyandsoftware
アプリ名の例
オカリナ= <!> gt; http://appstore.com/ocarina
Where <!>#8217; s My Perry? = <!> gt; http://appstore.com/wheresmyperry
ブレインチャレンジ<!>#8482; = <!> gt; 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でitms-appsをhttpに置き換えます:
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
iOSでURLを開く:
[[UIApplication sharedApplication] openURL:appStoreURL];
Mac:
[[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]];
リダイレクトの数はゼロです。
多くの回答が「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
それ以外の場合、<!> quot;このリクエストは処理できません<!> quot; 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")
注:
アプリの正確なIDを入力することは非常に重要です。これによりエラーが発生するため(エラーログは表示されませんが、このため正常に機能しません)
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];
おやつに効く
複数のOSおよび複数のプラットフォームをサポートする場合、リンクの作成は複雑な問題になる可能性があります。たとえば、WebObjectsはiOS 7ではサポートされていません(一部は)
役立つ iLink というオープンソースライブラリがあります。
このライブラリの利点は、実行時にリンクが検出および作成される(ライブラリが実行中のアプリIDとOSをチェックし、どのリンクが必要かを判断することです)作成した)。これの最良の点は、使用する前にほとんど何も設定する必要がないため、エラーがなく、常に機能することです。同じプロジェクトにターゲットがほとんどないため、どのアプリIDまたはリンクを使用するかを覚えておく必要がない場合にも便利です。また、このライブラリは、ストアに新しいバージョンがある場合(これが組み込まれ、単純なフラグでこれをオフにした場合)ユーザーが同意した場合にアプリのアップグレードページを直接指すように、アプリをアップグレードするようにユーザーに求めます。
2つのライブラリファイルをプロジェクトにコピーします(iLink.h <!> amp; 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のサンプルプロジェクトがあります。
少なくともiOS 9以降
- App Storeで直接開く
アプリ
itms-apps://itunes.apple.com/app/[appName]/[appID]
開発者のアプリのリスト
itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
Appleの最新ドキュメント 使用する必要があります
appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"
または
SKStoreProductViewController
アプリストア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);
}
ここにはたくさんの答えがありますが、開発者アプリにリンクするための提案はもう機能しないようです。
前回訪問したとき、次の形式を使用して機能させることができました:
itms-apps://itunes.apple.com/developer/developer-name/id123456789
これは機能しなくなりましたが、開発者名を削除すると機能します。
itms-apps://itunes.apple.com/developer/id123456789
この方法で試してください
http://itunes.apple.com/lookup?id= <!> quot;ここにアプリID <<> quot; jsonを返します。これから、キー<!> quot; trackViewUrl <!> quot;を見つけます。値は目的のURLです。このURLを使用します(https://
をitms-apps://
に置き換えるだけです)。これは正常に機能します。
たとえば、アプリIDがxyzの場合、このリンクに移動します http://itunes.apple.com/lookup?id=xyz
キー<!> quot; trackViewUrl <!> quot;のURLを見つけます。これは、App Storeでのアプリの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]];
ありがとう