Comment créer un lien vers des applications sur l'App Store
-
10-07-2019 - |
Question
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?
La solution
Publié le 2016-02-02
À partir d'iOS 6 SKStoreProductView> une> classe a été introduite. Vous pouvez lier une application sans quitter votre application. L’extrait de code dans Swift 3.x / 2.x et dans Objective-C est ici .
De Nouvelles et annonces destinées aux 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 marketing campagnes. Créer 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 poste spécifique application: http://itunes.com/apps/appname
Pour envoyer les clients à une liste d'applications que vous avez sur l'App Store: http://itunes.com/apps/nomdevelopername
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 .
Modifier (à 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 de lancement du magasin. depuis une application:
- Lancez iTunes sur votre ordinateur.
- Recherchez l'élément auquel vous souhaitez créer un lien.
- Cliquez avec le bouton droit ou maintenez la touche Ctrl enfoncée sur le nom de l'élément dans iTunes, puis choisissez & "Copier l'URL de l'iTunes Store &"; dans le menu contextuel.
- Dans votre application, créez un objet
NSURL
avec l'URL iTunes copiée, puis transmettez cet objet à la méthodeUIApplication
openURL
: pour ouvrir votre élément dans l'App Store.
Exemple de code:
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)!)
}
Autres conseils
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’aller d’abord sur iTunes, puis ouvrira uniquement l’App Store (si vous utilisez uniquement itms: //)
L’espoir que cela aide.
EDIT: AVR, 2017. itms-apps: // fonctionne de nouveau dans iOS10. Je l'ai testé.
EDIT: AVR, 2013. Cela ne fonctionne plus dans iOS5 et supérieur. Il suffit d'utiliser
https://itunes.apple.com/app/id378458261
et il n'y a plus de redirections.
À partir d'iOS 6, utilisez la classe 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")
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
(l'identifiant de l'élément itunes de l'application) comme suit: (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]];
À partir de l'été 2015 ...
-(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 .
-
Cela va directement à sur l'App Store, pas de redirections.
-
OK pour tous les magasins nationaux .
-
Il est vrai que vous devriez passer à l'utilisation de
loadProductWithParameters
, mais si le lien a pour but de mettre à jour l'application dans laquelle vous vous trouvez: c'est peut-être mieux d'utiliser cette & "; ancienne &"; approche.
Apple vient d'annoncer les URL du site 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 société
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
Application par société
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 abrégé. 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, & Quot; & Amp; & Quot;)).
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 (& # 169;), de marque de commerce (& # 8482;) et de marque déposée (& # 174;)
Remplacez les esperluettes (& "; & et"! ") par &" et & ";
.Enlève le plus de signes de ponctuation (voir l'extrait 2 pour l'ensemble)
Remplacez les éléments accentués et autres & "; décorés &"; Caractères (& # 252 ;, & # 229 ;, etc.) avec leur caractère élémentaire (u, a, etc.)
Laissez tous les autres caractères tels quels.
Listing 2: Caractères de ponctuation à supprimer.
! & # 161; & #;% $ '() * +, -. / :; < = > & # 191;? @ [] ^ _` {|} ~
Vous trouverez ci-dessous quelques exemples pour illustrer la conversion.
App Store
Exemples de nom de société
Gameloft = > http://appstore.com/gameloft
Activision Publishing, Inc. = > http://appstore.com/activisionpublishinginc
Photographie de Chen & amp; Logiciel = & Gt; http://appstore.com/chensphotographyandsoftware
Exemples de noms d'application
Ocarina = > http://appstore.com/ocarina
Où & # 8217; est mon perry? = > http://appstore.com/wheresmyperry
Cérébral Challenge & # 8482; = > 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 ouvrira l'App Store directement
Pour avoir un lien direct sans redirection:
- Utilisez le http://itunes.apple.com/linkmaker/ constructeur de liens iTunes pour obtenir le lien direct réel
- Remplacez le
http://
paritms-apps://
- Ouvrez le lien avec
[[UIApplication sharedApplication] openURL:url];
Attention, ces liens ne fonctionnent que sur les appareils réels, pas sur le simulateur.
Source: https://developer.apple.com/library /ios/#qa/qa2008/qa1629.html
Cela a fonctionné parfaitement pour moi en utilisant uniquement l’ID d’APP:
NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
Le nombre de redirections est égal à zéro.
Plusieurs 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 à partir d'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 permettant de 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 bogue 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 créateur de liens à l'adresse suivante: http://itunes.apple.com/linkmaker/
Ceci fonctionne et lie directement dans ios5
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 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:
- Importer le StoreKit:
import StoreKit
2.Conformez le protocole
SKStoreProductViewControllerDelegate
3.Appliquez 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)
}
- Comment utiliser:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")
Remarque:
Il est très important de saisir l'identifiant exact de votre application. Parce que cela cause une erreur (ne montre pas le journal des erreurs, mais rien ne fonctionne pour cette raison)
Je peux confirmer que si vous créez une application dans iTunes Connect, vous obtenez son identifiant d'application avant de le soumettre.
Par conséquent ..
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];
Travaille 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 seraient trouvés et créés au moment de l'exécution (la bibliothèque vérifierait l'ID de l'application et le système d'exploitation sur lequel elle s'exécute, et déterminerait le lien approprié. créé). Le meilleur atout de cette méthode est qu'il n'est pas nécessaire 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 du 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 existe un très bon document pour toute la bibliothèque et un exemple de projets pour iPhone et Mac.
Au moins iOS 9 et supérieur
- Ouvrir directement dans l'App Store
Une application
itms-apps://itunes.apple.com/app/[appName]/[appID]
Liste des applications du développeur
itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
Selon le dernier document d'Apple . Vous devez utiliser
appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"
ou
SKStoreProductViewController
Si vous avez l'identifiant de l'App Store, il est préférable 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 cet identifiant, 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);
}
Malgré les tonnes de réponses, aucune des suggestions de liens vers les applications pour développeurs ne semble plus fonctionner.
Lors de ma dernière visite, j'ai pu le faire fonctionner au format suivant:
itms-apps://itunes.apple.com/developer/developer-name/id123456789
Cela ne fonctionne plus, mais la suppression du nom du développeur entraîne:
itms-apps://itunes.apple.com/developer/id123456789
Essayez de cette façon
http://itunes.apple.com/lookup?id= & "votre identifiant d'application ici &" renvoyer json. À partir de là, recherchez la clé & "; trackViewUrl &"; et value est 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, cliquez sur 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 et utilisez 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