web-dev-qa-db-fra.com

URL de révision de iTunes et iOS 7 (demandez à l’utilisateur d’évaluer notre application) AppStore affiche une page vierge

Est-ce que quelqu'un sait si la technique utilisée pour demander à l'utilisateur d'évaluer notre application et de lui ouvrir l'App Store directement sur la page d'évaluation fonctionne toujours sur iOS 7?

J'avais l'habitude d'ouvrir cette URL depuis mon application:

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=353372460&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software

Mais il semble que cela ne fonctionne plus (AppStore affiche une page vierge). J'ai aussi essayé cette url sans chance:

http://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?pageNumber=0&sortOrdering=1&type=Purple+Software&mt=8&id=353372460
158
Samuel

À partir de iOS7, l'URL a été modifiée et ne peut pas être dirigée vers la page de révision, mais uniquement vers l'application.

itms-apps://iTunes.Apple.com/app/idAPP_ID

APP_ID doit être remplacé par votre ID d'application. Basé sur l'ID de l'application de la question, il s'agirait de:

itms-apps://iTunes.Apple.com/app/id353372460

Notez que l'id devant le numéro ... de la chaîne est id 353372460, pas seulement 353372460

Pour tout ce qui précède iOS7, il est nécessaire d’utiliser l’ancienne URL "ancienne". Seuls ceux-ci peuvent vous rendre directement à la page de révision. Vous devez également prendre note que ces appels ne fonctionneront que sur les appareils . Leur exécution dans le simulateur ne fera rien car l'appli App Store n'est pas installée sur le simulateur.


Regardez par exemple Appirater pour une implémentation. https://github.com/arashpayan/appirater

Je ne peux pas vous aider avec les spécificités de PhoneGap (jamais utilisé). Mais il s’agit essentiellement de vérifier la version iOS que votre utilisateur exécute, puis d’utiliser soit l’ancienne URL, soit la nouvelle URL iOS7.

198
Frank

L'URL suivante fonctionne parfaitement sur iOS 7.1:

http://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=xxxxxxxx&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8

xxxxxxxx est votre identifiant d'application.

UPDATE. Fonctionne sur iOS 9.3.4 et iOS 10 GM (par Jeet)

165
mkll

Cela fonctionne de mon côté (Xcode 5 - iOS 7 - Device!):

itms-apps://iTunes.Apple.com/app/idYOUR_APP_ID

Pour les versions inférieures à iOS 7, utilisez l'ancienne:

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=YOUR_APP_ID
47
Idan

Alternative simple à une ligne de code: ** Voir également les commentaires du simulateur ci-dessous **

http://iTunes.Apple.com/app/idAPP_ID

EDIT: Maintenant que iOS 7.1 permet un lien direct vers l'onglet Commentaires de l'App Store, cela vaut la peine d'investir des lignes de code supplémentaires pour y arriver directement: voir les autres réponses pour le reste.

nous utilisons ici http: au lieu de itms-apps:, laisse iOS faire le reste du travail

Les mêmes résultats sont testés sur les appareils iOS 6.1 et 7 (iPad/iPhone/iPod touch 4).

Plus précisément, ceci raccourci, pour iOS 6 amène l'utilisateur à l'onglet Details et non à l'onglet Reviews.

Le lien Purple+Software permet à l'utilisateur d'accéder à l'onglet Commentaires dans iOS 6, ce qui est évidemment préférable si vous savez comment vérifier le système d'exploitation.

Remarque importante: Ceci provoquera une erreur dans le simulateur pour iOS 5.1, 6.1 et 7.
Impossible d'ouvrir la page Safari ne peut pas ouvrir la page car l'adresse n'est pas valide (nous savons qu'il s'agit d'une URL valide en dehors du simulateur, sur tous les navigateurs).

Juste pour être clair: Sur iOS 7: http:// fournit la même expérience que itms-apps: sans délai notable.

* N'oubliez pas que le comportement du simulateur indiqué ci-dessus. Ce n'est pas tout à fait différent d'essayer d'accéder à la caméra via un simulateur: le simulateur n'est pas l'endroit pour le tester. *

18
Jason R. Escamilla

L'ouverture de la page de révision directement depuis l'application est possible sous iOS7. Veuillez utiliser l'URL suivante ...

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=YOUR_APP_ID

Cela fonctionnera certainement .. :)

17
Murali

Les versions d'iOS prises en charge ne sont pas claires, mais dans iOS 10.3, un nouveau paramètre de requête peut être ajouté à l'URL: action=write-review. J'ai testé cela sur iOS 10.2 et 9.3.5 et cela fonctionne. Cependant, cela ne fonctionne pas sur iOS 7.1.2, un support a donc été ajouté entre iOS 8.0 et 9.3.5. Une enquête plus approfondie est nécessaire!

Exemple: https://iTunes.Apple.com/app/id929726748?action=write-review&mt=8

Ceci ouvrira la boîte de dialogue "Rédiger une critique" , plutôt que d'afficher uniquement l'onglet de révision.

16
Joseph Duffy

Le lien de vérification s’est à nouveau rompu dans iOS9. En faisant des essais, j'ai découvert que Apple revenait à ce qu'il était avant iOS7. Donc vous devez faire:

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=247423477&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software

247423477 est votre identifiant d'application à 9 chiffres (la principale différence est que vous devez ajouter &onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software après l'identifiant d'application).

9
Ser Pounce
+ (NSString *)getReviewUrlByAppId:(int)appId
{ 
    NSString *templateReviewURL = @"itms-apps://ax.iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APP_ID";
    NSString *templateReviewURLiOS7 = @"itms-apps://iTunes.Apple.com/app/idAPP_ID";
    NSString *templateReviewURLiOS8 = @"itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=APP_ID&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software";

    //ios7 before
    NSString *reviewURL = [templateReviewURL stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%d", appId]];

    // iOS 7 needs a different templateReviewURL @see https://github.com/arashpayan/appirater/issues/131
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 7.1) 
    {
        reviewURL = [templateReviewURLiOS7 stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%d", appId]];
    }
    // iOS 8 needs a different templateReviewURL also @see https://github.com/arashpayan/appirater/issues/182
    else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    {
        reviewURL = [templateReviewURLiOS8 stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%d", appId]];
    }

    return reviewURL;
}
9
Will

Toutes les réponses ci-dessus sont maintenant obsolètes (iOS 7, mais cela peut fonctionner). Par conséquent, je propose la nouvelle méthode Apple qui recommande de fournir des liens vers les applications. Le lien de votre application est celui d'iTunes (utilisez le lien Copier), celui-ci est recommandé pour une utilisation dans le code:

Swift 3.

let path = URL(string: "https://iTunes.Apple.com/us/app/calcfast/id876781417?mt=8")
UIApplication.shared.open(path!)

Ou mieux - traitez correctement l'option et gérez la possibilité de ne pas pouvoir accéder au lien:

if let path = URL(string: "https://iTunes.Apple.com/us/app/calcfast/id876781417?mt=8") {
    UIApplication.shared.open(path) {
        (didOpen:Bool) in
        if !didOpen {
            print("Error opening:\(path.absoluteString)")
        }
    }
}

Objective-C

#define APP_URL_STRING  @"https://iTunes.Apple.com/us/app/calcfast/id876781417?mt=8"

alors vous pouvez appeler APP_URL_STRING dans votre code:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: APP_URL_STRING] options:@{} completionHandler:nil];

Notez que c’est la méthode recommandée à présent par Apple, car la méthode de traitement des liens de redirection précédente était obsolète et n’était pas prise en charge.

Le lien pour toutes vos applications, si vous en avez plusieurs:

#define MYCOMPANY_URL_PATH @"http://appstore.com/mycompany"
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: MYCOMPANY_URL_PATH] options:@{} completionHandler:nil];

Le lien de l'application ci-dessus est recommandé pour une utilisation dans du code ou des liens non vus directement par l'utilisateur. Si vous souhaitez fournir un lien visible et mémorisable par l'utilisateur, utilisez ce qui suit: http://appstore.com/calcfast

5

Utiliser cette URL était la solution parfaite pour moi. Il emmène l'utilisateur directement sur le Write a Review section. Crédits à @ Joseph Duffy.

Pour un exemple de code, essayez ceci:

Swift 3, Xcode 8.2.1:

 let openAppStoreForRating = "itms-apps://iTunes.Apple.com/gb/app/id1136613532?action=write-review&mt=8"
 if UIApplication.shared.canOpenURL(URL(string: openAppStoreForRating)!) {
      UIApplication.shared.openURL(URL(string: openAppStoreForRating)!)
 } else {
      showAlert(title: "Cannot open AppStore",message: "Please select our app from the AppStore and write a review for us. Thanks!!")
 }

ShowAlert est ici une fonction personnalisée pour un UIAlertController.

4

J'ai ceci pour obtenir le ID de produit automatiquement et générer liens de révision de l'App Store et de la page du produit.

- (void) getAppStoreLinks {
productID = [[NSUserDefaults standardUserDefaults] objectForKey:@"productID"]; //NSNumber instance variable
appStoreReviewLink = [[NSUserDefaults standardUserDefaults] objectForKey:@"appStoreReviewLink"]; //NSString instance variable
appStoreLink = [[NSUserDefaults standardUserDefaults] objectForKey:@"appStoreLink"]; //NSString instance variable

if (!productID || !appStoreReviewLink || !appStoreLink) {
    NSString *iTunesServiceURL = [NSString stringWithFormat:@"https://iTunes.Apple.com/lookup?bundleId=%@", [NSBundle mainBundle].bundleIdentifier];
    NSURLSession *sharedSes = [NSURLSession sharedSession];
    [[sharedSes dataTaskWithURL:[NSURL URLWithString:iTunesServiceURL]
              completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

                  NSInteger statusCode = ((NSHTTPURLResponse *)response).statusCode;

                  if (data && statusCode == 200) {

                      id json = [[NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingOptions)0 error:nil][@"results"] lastObject];

                      //productID should be NSNumber but integerValue also work with NSString
                      productID = json[@"trackId"];

                      if (productID) {
                          appStoreReviewLink = [NSString stringWithFormat:@"itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=%d&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8",productID.integerValue];
                          appStoreLink = [NSString stringWithFormat:@"itms-apps://iTunes.Apple.com/app/id%d",productID.integerValue];

                          [[NSUserDefaults standardUserDefaults] setObject:productID forKey:@"productID"];
                          [[NSUserDefaults standardUserDefaults] setObject:appStoreReviewLink forKey:@"appStoreReviewLink"];
                          [[NSUserDefaults standardUserDefaults] setObject:appStoreLink forKey:@"appStoreLink"];

                      }
                  } else if (statusCode >= 400) {
                      NSLog(@"Error:%@",error.description);
                  }
              }
      ] resume];
}
}

Ouvrir la page de révision de l'application

- (IBAction) rateButton: (id)sender {
   NSString *appStoreReviewLink = appStoreReviewLink;
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appStoreReviewLink]];
}

Ouvrir la page App Store de l'application

 - (IBAction) openAppPageButton: (id)sender {
   NSString *appStoreLink = appStoreLink;
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString: appStoreLink]];
 }
3
Tibidabo

On dit que ce bug sera corrigé sur iOS7.1. Lire ici sur le forum Corona, et ici sur l'iPhoneDevSDK .

2
Joselito