ITunes revisa la URL y iOS 7 (pide al usuario que califique nuestra aplicación) AppStore muestra una página en blanco

¿Alguien sabe si la técnica utilizada para pedirle al usuario que califique nuestra aplicación y abrirle la App Store directamente en la página de calificación sigue funcionando en iOS 7?

Solía ​​abrir esta URL desde mi aplicación:

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

Pero parece que ya no funciona (AppStore muestra una página en blanco). También probé esta URL sin suerte:

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?pageNumber=0&sortOrdering=1&type=Purple+Software&mt=8&id=353372460
Answer

A partir de iOS7, la URL ha cambiado y no se puede dirigir a la página de revisión, sino solo a la aplicación.

itms-apps://itunes.apple.com/app/idAPP_ID

Donde APP_ID debe reemplazarse con su ID de aplicación. Según el ID de la aplicación de la pregunta, sería lo siguiente

itms-apps://itunes.apple.com/app/id353372460

Observe la identificación delante del número ... esa cadena es la identificación 353372460, no solo 353372460

Para cualquier cosa anterior a iOS7, se debe usar la URL 'antigua', solo esas pueden llevarlo directamente a la página de revisión. También debe tener en cuenta que estas llamadas solo funcionarán en dispositivos . Ejecutarlos en el simulador no hará nada, ya que el simulador no tiene instalada la aplicación App Store.


Eche un vistazo, por ejemplo, a Appirater para una implementación. https://github.com/arashpayan/appirater

No puedo ayudarte con los detalles específicos de phonegap (nunca lo usé). Pero básicamente se trata de verificar la versión de iOS que está ejecutando su usuario y luego usar la URL anterior o luego la nueva URL de iOS7.

La siguiente URL funciona perfectamente en iOS 7.1:

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

donde xxxxxxxxes su ID de aplicación.

ACTUALIZAR . Funciona en iOS 9.3.4 y iOS 10 GM (por Jeet)

Esto funciona en mi extremo (Xcode 5 - iOS 7 - ¡ Dispositivo !):

itms-apps://itunes.apple.com/app/idYOUR_APP_ID

Para versiones inferiores a iOS 7, use la anterior:

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

Alternativa simple de una línea de código: ** Consulte también los comentarios del simulador a continuación **

http://itunes.apple.com/app/idAPP_ID

EDITAR: Ahora que iOS 7.1 permite el enlace directo a la pestaña Reseñas en la App Store, vale la pena invertir las líneas adicionales de código para llegar directamente: vea otras respuestas para el resto.

aquí estamos utilizando http: en lugar de itms-apps: , vamos iOS haga el resto del trabajo

Obtengo los mismos resultados en las pruebas en dispositivos iOS 6.1 y 7 (iPad / iPhone / iPod touch 4)

Específicamente, este acceso directo , para iOS 6, lleva al usuario a la Detailspestaña y no a la Reviewspestaña.

El Purple+Softwareenlace lleva al usuario hasta la pestaña Reseñas en iOS 6, que obviamente es preferible si sabe cómo verificar el sistema operativo.

Nota importante : Esto provocará un error en el simulador para iOS 5.1, 6.1 y 7.
No se puede abrir la página Safari no puede abrir la página porque la dirección no es válida (sabemos que es una URL válida fuera del simulador, en cualquier navegador)

Para que quede claro : en iOS 7: http://proporciona la misma experiencia que itms-apps:sin demoras perceptibles.

* Tenga en cuenta que el comportamiento del simulador mencionado anteriormente. Esto no es muy diferente de intentar acceder a la cámara a través de un simulador: el simulador no es el lugar para probarlo. *

No está claro qué versiones de IOS Esto es apoyado por, sino como parte de IOS 10.3 hay un nuevo parámetro de consulta que puede ser añadido a la URL: action=write-review. He probado esto en iOS 10.2 y 9.3.5 y funciona. Sin embargo, no funciona en iOS 7.1.2, por lo que se agregó compatibilidad entre iOS 8.0 y 9.3.5. ¡Se requiere más investigación!

Ejemplo: https://itunes.apple.com/app/id929726748?action=write-review&mt=8

Esto abrirá el cuadro de diálogo "Escribir una reseña" , en lugar de solo mostrar la pestaña de reseña.

Abrir la página de revisión directamente desde la aplicación es posible en iOS7. Utilice la siguiente URL ...

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

Esto definitivamente funcionará .. :)

+ (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;
}

El enlace de revisión se ha roto una vez más en iOS9. Al hacer algunos experimentos, descubrí que Apple volvió a ser como era antes de iOS7. Entonces tienes que hacer:

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

¿Dónde 247423477está su ID de aplicación de 9 dígitos (la principal diferencia es que debe agregarlo &onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Softwaredespués del ID de la aplicación)?

Todas las respuestas anteriores han quedado obsoletas (iOS 7, pero pueden funcionar), por lo tanto, proporciono la nueva forma que Apple recomienda para proporcionar enlaces a las aplicaciones. El enlace para su aplicación es el de iTunes (use Copiar enlace), este se recomienda para usar en el código:

Swift 3.0

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

O mejor, trate el opcional correctamente y maneje la posibilidad de no poder alcanzar el enlace:

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)")
        }
    }
}

C objetivo

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

entonces puede llamar APP_URL_STRINGen su código:

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

Tenga en cuenta que esta es la forma recomendada ahora por Apple, ya que el método anterior de procesamiento de enlaces de redireccionamiento ha quedado obsoleto y no es compatible.

El enlace para todas sus aplicaciones, si tiene más de una:

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

Se recomienda el enlace de la aplicación anterior para su uso en códigos o enlaces que el usuario no ve directamente. Si desea proporcionar un enlace que el usuario pueda ver y recordar, utilice lo siguiente: http://appstore.com/calcfast

Usar esta URL fue la solución perfecta para mí. Lleva al usuario directamente al Write a Review section. Créditos a @Joseph Duffy.

Para obtener un código de muestra, intente esto:

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

Aquí showAlert es una función personalizada para un UIAlertController.

Tengo esto para obtener la ID del producto automáticamente y generar vínculos a la página de producto y revisión de la App Store .

- (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];
}
}

Abrir la página de revisión de la aplicación

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

Abrir la página de la App Store de la aplicación

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

Se dice que este error se solucionará en iOS7.1. Lea aquí en el foro de corona y aquí en iPhoneDevSDK .