Je crée une version gratuite de mon jeu iPhone. Je veux avoir un bouton dans la version gratuite qui amène les gens à la version payante dans l'App Store. Si j'utilise un lien standard
http://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
l'iPhone ouvre d'abord Safari, puis l'App Store. J'ai utilisé d'autres applications qui ouvrent l'App Store directement, alors je sais que c'est possible.
Des idées? Quel est le schéma d'URL pour l'App Store?
Modifié le 02/02/2016
À partir de iOS 6 SKStoreProductViewController class a été introduit. Vous pouvez lier une application sans quitter votre application. Le fragment de code dans Swift 3.x/2.x et Objective-C est ici .
A SKStoreProductViewController object présente un magasin qui autorise le l’utilisateur d’acheter un autre support sur l’App Store. Par exemple, votre application pourrait afficher le magasin pour permettre à l'utilisateur d'acheter une autre application.
De Nouvelles et annonces pour les développeurs Apple .
Dirigez les clients directement vers votre application sur l'App Store avec iTunes Links Avec les liens iTunes, vous pouvez fournir votre clients avec un moyen facile d'accéder vos applications directement sur l'App Store depuis votre site Web ou votre marketing campagnes. La création d'un lien iTunes est simple et peut être fait pour diriger clients à une seule application, tous vos applications ou vers une application spécifique avec le nom de votre entreprise spécifié.
Pour envoyer des clients à un .__ spécifique. application: http://iTunes.com/apps/appname
Envoyer clients à une liste d'applications que vous avez sur l'App Store: http://iTunes.com/apps/developername
Pour envoyer des clients à une application spécifique avec le nom de votre entreprise inclus dans le URL: http://iTunes.com/apps/developername/appname
Notes complémentaires:
Vous pouvez remplacer http://
par itms://
ou itms-apps://
pour éviter les redirections.
Pour plus d'informations sur l'attribution de nom, voir Apple QA1633:
https://developer.Apple.com/library/content/qa/qa1633/_index.html .
Edit (à partir de janvier 2015):
les liens iTunes.com/apps doivent être mis à jour vers appstore.com/apps. Voir QA1633 ci-dessus, qui a été mis à jour. Un nouveau QA1629 suggère ces étapes et le code permettant de lancer le magasin à partir d’une application:
NSURL
avec l'URL iTunes copiée, puis passez cet objet à la méthode UIApplication
's openURL
: pour ouvrir votre élément dans l'App Store.Exemple de code:
NSString *iTunesLink = @"itms://iTunes.Apple.com/us/app/Apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Swift 3.0
let urlStr = "itms://iTunes.Apple.com/us/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)!)
}
Si vous souhaitez ouvrir une application directement sur l'App Store, vous devez utiliser:
itms-apps: // ...
De cette façon, il ouvrira directement l’application App Store sur l’appareil, au lieu d’utiliser iTunes en premier lieu, puis ouvrira uniquement l’App Store (si vous utilisez uniquement itms: //
J'espère que cela pourra aider.
EDIT: APR, 2017 . Itms-apps: // fonctionne de nouveau dans iOS10. Je l'ai testé.
EDIT: APR, 2013 . Cela ne fonctionne plus dans iOS5 et au-dessus. Juste utiliser
https://iTunes.Apple.com/app/id378458261
et il n'y a plus de redirections.
À partir de iOS 6, utilisez la méthode 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")
Vous pouvez obtenir l'identifiant d'élément iTunes de l'application comme suit: (au lieu d'un identifiant statique)
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")
objectif 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];
}
Vous pouvez obtenir
kAppITunesItemIdentifier
(identifiant d'élément iTunes de l'application) comme ceci: (au lieu d'un identifiant statique)
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]];
-(IBAction)clickedUpdate
{
NSString *simple = @"itms-apps://iTunes.Apple.com/app/id1234567890";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}
remplacez 'id1234567890' par 'id' et 'votre numéro à dix chiffres'
Cela fonctionne parfaitement sur tous les appareils .
Il va directement à l'App Store, pas de redirections.
Est-ce OK pour tous magasins nationaux .
Il est vrai que vous devriez passer à l'utilisation de loadProductWithParameters
, mais si le but du lien est de mettre à jour l'application dans laquelle vous êtes réellement: il est peut-être préférable d'utiliser cette approche "ancienne".
Apple vient d'annoncer les urls appstore.com.
https://developer.Apple.com/library/ios/qa/qa1633/_index.html
Il existe trois types de liens courts sur l'App Store, sous deux formes: l'une pour les applications iOS et l'autre pour les applications Mac:
Nom de la compagnie
iOS: http://appstore.com/ par exemple, http://appstore.com/Apple
Mac: http://appstore.com/mac/ par exemple, http://appstore.com/mac/Apple
Nom de l'application
iOS: http://appstore.com/ par exemple, http://appstore.com/keynote
Mac: http://appstore.com/mac/ par exemple, http://appstore.com/mac/keynote
App par entreprise
iOS: http://appstore.com/ / par exemple, http://appstore.com/Apple/keynote
Mac: http://appstore.com/mac/ / par exemple, http://appstore.com/mac/Apple/keynote
La plupart des entreprises et des applications ont un lien canonique App Store court canonique. Cette URL canonique est créée en modifiant ou en supprimant certains caractères (dont beaucoup sont illégaux ou ont une signification spéciale dans une URL (par exemple, "&")).
Pour créer un lien abrégé dans l'App Store, appliquez les règles suivantes au nom de votre entreprise ou de votre application:
Supprimer tous les espaces
Convertir tous les caractères en minuscules
Supprimez tous les symboles de copyright (©), de marque de commerce (™) et de marque déposée (®)
Remplacer les esperluettes ("&") par "et"
Enlevez le plus de signes de ponctuation (voir l'extrait 2 pour l'ensemble)
Remplacer les caractères accentués et autres caractères "décorés" (ü, å, etc.) par leur caractère élémentaire (u, a, etc.)
Laissez tous les autres personnages tels quels.
Listing 2 Caractères de ponctuation à supprimer.
! ¡"# $% '() * +, -./:; <=> ¿? @ [] ^ _` {|} ~
Vous trouverez ci-dessous quelques exemples pour illustrer la conversion effectuée.
Magasin d'applications
Exemples de nom de société
Gameloft => http://appstore.com/gameloft
Activision Publishing, Inc. => http://appstore.com/activisionpublishinginc
Chen's Photography & Software => http://appstore.com/chensphotographyetoftware
Exemples de noms d'applications
Ocarina => http://appstore.com/ocarina
Où est mon perry? => http://appstore.com/wheresmyperry
Brain Challenge ™ => http://appstore.com/brainchallenge
Ce code génère le lien App Store sur iOS
NSString *appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]];
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://iTunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
Remplacez itms-apps par http sur Mac:
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/iTunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];
Ouvrir l'URL sur iOS:
[[UIApplication sharedApplication] openURL:appStoreURL];
Mac:
[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Changez simplement 'iTunes' en 'phobos' dans le lien de l'application.
http://phobos.Apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8
Maintenant, il va ouvrir l'App Store directement
Pour avoir un lien direct sans redirection:
http://
par itms-apps://
[[UIApplication sharedApplication] openURL:url];
Attention, ces liens ne fonctionnent que sur des appareils réels, pas sur simulateur.
Source: https://developer.Apple.com/library/ios/#qa/qa2008/qa1629.html
Cela a fonctionné pour moi parfaitement en utilisant seulement APP ID:
NSString *urlString = [NSString stringWithFormat:@"http://iTunes.Apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
Le nombre de redirections est zéro.
Un certain nombre de réponses suggèrent d'utiliser «itms» ou «itms-apps», mais cette pratique n'est pas spécifiquement recommandée par Apple. Ils n'offrent que la manière suivante d'ouvrir l'App Store:
Listing 1 _ Lancement de l'App Store depuis une application iOS
NSString *iTunesLink = @"https://iTunes.Apple.com/us/app/Apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Voir https://developer.Apple.com/library/ios/qa/qa1629/_index.html dernière mise à jour en mars 2014 à compter de cette réponse.
Pour les applications prenant en charge iOS 6 et les versions ultérieures, Apple propose un mécanisme in-app pour présenter l’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
}];
Notez que sur iOS6, le bloc d'achèvement ne peut pas être appelé en cas d'erreur. Cela semble être un bug qui a été résolu dans iOS 7.
Si vous souhaitez créer un lien vers les applications d'un développeur et que son nom comporte des signes de ponctuation ou des espaces (par exemple, Development Company, LLC), créez votre URL de la manière suivante:
itms-apps://iTunes.com/apps/DevelopmentCompanyLLC
Sinon, il retourne "Cette demande ne peut pas être traitée" sur iOS 4.3.3
Vous pouvez obtenir un lien vers un élément spécifique dans l'App Store ou iTunes via le générateur de liens à l'adresse suivante: http://iTunes.Apple.com/linkmaker/
Cela fonctionne et relie directement dans iOS 5
NSString *iTunesLink = @"http://iTunes.Apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
C'est un moyen simple et rapide de rediriger/lier d'autres applications existantes sur l'App Store.
NSString *customURL = @"http://iTunes.Apple.com/app/id951386316";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}
Pour Xcode 9.1 et Swift 4:
import StoreKit
2.Conform le protocole
SKStoreProductViewControllerDelegate
3.Implémenter le protocole
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")
Remarque:
Il est très important d'entrer l'ID exact de votre application. Parce que cela cause une erreur (ne montre pas le journal des erreurs, mais rien ne fonctionne pour cette raison)
itms-apps://iTunes.Apple.com/app/[appName]/[appID]
itms-apps://iTunes.Apple.com/developer/[developerName]/[developerID]
Je peux confirmer que si vous créez une application dans iTunes Connect, vous obtenez votre identifiant d'application avant de le soumettre.
Donc..
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];
Fonctionne un régal
La création d'un lien peut devenir un problème complexe lors de la prise en charge de plusieurs systèmes d'exploitation et de plusieurs plates-formes. Par exemple, les WebObjects ne sont pas pris en charge sur iOS 7 (certains d'entre eux), certains liens que vous créez ouvriraient un autre magasin de pays, puis l'utilisateur, etc.
Il existe une bibliothèque open source appelée iLink qui pourrait vous aider.
Cette bibliothèque présente les avantages suivants: les liens sont trouvés et créés au moment de l'exécution (la bibliothèque vérifie l'ID de l'application et le système d'exploitation sur lequel elle s'exécute et détermine le lien à créer). Le meilleur avantage est que vous n'avez pas besoin de configurer presque quoi que ce soit avant de l'utiliser, ce qui évite les erreurs et fonctionne toujours. C'est très bien aussi si vous avez peu de cibles sur le même projet, vous n'avez donc pas à vous rappeler quel ID d'application ou quel lien utiliser. Cette bibliothèque inviterait également l'utilisateur à mettre à niveau l'application s'il existe une nouvelle version sur le magasin (intégrée et désactivée par un simple indicateur) pointant directement sur la page de mise à niveau de l'application si l'utilisateur accepte.
Copiez les 2 fichiers de bibliothèque dans votre projet (iLink.h et iLink.m).
Sur votre 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.
}
et à l'endroit où vous souhaitez ouvrir la page d'évaluation, par exemple, utilisez simplement:
[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_Apple_ID]; // You should find YOUR_PAID_APP_Apple_ID from iTunes Connect
N'oubliez pas d'importer iLink.h dans le même fichier.
Il y a un très bon document pour toute la bibliothèque et un exemple de projets pour iPhone et Mac.
Si vous avez l'identifiant de l'App Store, vous feriez mieux de l'utiliser. Surtout si à l'avenir vous pourriez changer le nom de l'application.
http://iTunes.Apple.com/app/id378458261
Si vous n'avez pas l'identifiant de l'App Store, vous pouvez créer une URL basée sur cette documentation 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;
}
Passe ce test
- (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);
}
Selon le dernier document d'Apple } _ Vous devez utiliser
appStoreLink = "https://iTunes.Apple.com/us/app/Apple-store/id375380948?mt=8"
ou
SKStoreProductViewController
Malgré la multitude de réponses fournies, aucune des suggestions de lien vers les applications pour développeurs ne semble plus fonctionner.
Lors de ma dernière visite, j'ai pu le faire fonctionner en utilisant le format suivant:
itms-apps://iTunes.Apple.com/developer/developer-name/id123456789
Cela ne fonctionne plus, mais la suppression du nom du développeur a les effets suivants:
itms-apps://iTunes.Apple.com/developer/id123456789
Essayez de cette façon
http://iTunes.Apple.com/lookup?id= "votre ID d'application ici", retournez json.À partir de là, recherchez la clé "trackViewUrl" et la valeur correspond à l'URL souhaitée. utilisez cette URL (remplacez simplement https://
par itms-apps://
). Cela fonctionne très bien.
Par exemple, si votre ID d’application est xyz, accédez à ce lien http://iTunes.Apple.com/lookup?id=xyz
Recherchez ensuite l'URL de la clé "trackViewUrl". Il s'agit de l'URL de votre application dans l'App Store. Pour utiliser cette URL dans xcode, essayez ceci.
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]];
Merci
il ouvrira l'App Store directement
NSString *iTunesLink = @"itms-apps://iTunes.Apple.com/app/ebl-
skybanking/id1171655193?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];