ITunes revisão URL e iOS 7 (peça ao usuário para avaliar o nosso app) AppStore mostrar uma página em branco

Alguém sabe se a técnica usada para pedir ao usuário que avalie nosso aplicativo e abra para ele a App Store diretamente na página de sorting ainda está funcionando no iOS 7?

Eu costumava abrir esse URL do meu aplicativo:

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

Mas parece que não está mais funcionando (a AppStore mostra uma página em branco). Eu também tentei este URL sem sorte:

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

A partir do iOS7, o URL foi alterado e não pode ser direcionado para a página de revisão, mas apenas para o aplicativo

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

Onde APP_ID precisa ser substituído por seu ID de aplicativo. Com base no ID do aplicativo da pergunta, seria o seguinte

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

Observe o id na frente do número … essa cadeia é o ID 353372460, não apenas 353372460

Para qualquer coisa pré-iOS7, o URL “antigo” precisa ser usado, apenas aqueles que podem levá-lo diretamente para a página de revisão. Você também deve observar que essas chamadas funcionarão somente em dispositivos . Executá-los no simulador não fará nada, pois o simulador não tem o aplicativo App Store instalado.


Dê uma olhada, por exemplo, no Appirater para uma implementação. https://github.com/arashpayan/appirater

Não posso te ajudar com especificidades de phonegap (nunca usei). Mas basicamente se trata de verificar a versão do iOS em que o usuário está executando e usar o URL antigo ou o novo URL do iOS7.

O seguinte URL funciona perfeitamente no iOS 7.1:

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

onde xxxxxxxx é o seu ID de aplicativo.

ATUALIZAÇÃO Funciona no iOS 9.3.4 e no iOS 10 GM (pelo Jeet)

Isso funciona do meu jeito (Xcode 5 – iOS 7 – Device !):

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

Para versões inferiores ao iOS 7, use o antigo:

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

Alternativa simples de uma linha de código: ** Veja também os comentários do simulador abaixo **

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

EDIT: Agora que o iOS 7.1 permite link direto para a guia Comentários na App Store, vale a pena investir as linhas extras de código para chegar diretamente: veja outras respostas para o resto.

aqui estamos usando http: vez de itms-apps: deixe o iOS fazer o resto do trabalho

Eu recebo o mesmo teste de resultados em dispositivos iOS 6.1 e 7 (iPad / iPhone / iPod touch 4)

Especificamente, esse atalho , para o iOS 6, leva o usuário à guia Details e não à guia Reviews .

O link Purple+Software leva o usuário até a guia Reviews no iOS 6, que obviamente é preferível se você souber como verificar o sistema operacional.

Nota importante : Isso causará erro no simulador para iOS 5.1, 6.1 e 7.
Não é possível abrir a página O Safari não pode abrir a página porque o endereço é inválido (sabemos que é um URL válido fora do simulador, em qualquer navegador)

Só para deixar claro : no iOS 7: http:// fornece a mesma experiência que itms-apps: sem atraso perceptível.

* tenha em mente que o comportamento do simulador mencionado acima. Isso não é totalmente diferente de tentar acessar a câmera através de um simulador: o simulador não é o lugar para testá-lo. *

Abrir a página de revisão diretamente do aplicativo é possível no iOS7. Por favor, use o seguinte url …

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

Isso definitivamente vai funcionar .. 🙂

Não está claro em quais versões do iOS isso é suportado, mas como parte do iOS 10.3, há um novo parâmetro de consulta que pode ser adicionado à URL: action=write-review . Eu testei isso no iOS 10.2 e 9.3.5 e funciona. No entanto, ele não funciona no iOS 7.1.2, portanto, o suporte foi adicionado entre o iOS 8.0 e o 9.3.5. Mais investigações são necessárias!

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

Isso abrirá o diálogo “Escrever uma revisão” , em vez de apenas mostrar a guia de revisão.

O link de revisão quebrou novamente no iOS9. Ao fazer algumas experiências, descobri que a Apple revertia para o modo como era antes do iOS7. Então você tem que fazer:

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

Onde 247423477 é o seu ID de aplicativo de nove dígitos (a principal diferença é que você deve append &onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software após o ID do aplicativo).

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

Todas as respostas acima foram descontinuadas (iOS 7, mas podem funcionar), portanto, forneço a nova maneira recomendada pela Apple de fornecer links para os Aplicativos. O link para o seu aplicativo é o do iTunes (use o link de cópia), este é recomendado para uso no código:

Swift 3.0

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

Ou melhor – trate o opcional corretamente e lide com a possibilidade de não conseguir acessar o link:

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

Objetivo-C

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

então você pode ligar para APP_URL_STRING em seu código:

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

Observe que esse é o caminho recomendado agora pela Apple, pois o método anterior de processamento de links de redirecionamento foi preterido e não é suportado.

O link para todos os seus aplicativos, se você tiver mais de um:

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

O link do aplicativo acima é recomendado para uso em códigos ou links que não são vistos diretamente pelo usuário. Se você quiser fornecer um link que possa ser visto e lembrado pelo usuário, use o seguinte: http://appstore.com/calcfast

Usando este URL foi a solução perfeita para mim. Leva o usuário diretamente para a Write a Review section . Créditos para @Joseph Duffy.

Para um código de amostra, tente isto:

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

Aqui showAlert é uma function personalizada para um UIAlertController .

Eu tenho isso para obter o ID do produto automaticamente e gerar links para a página de revisão e produto da 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]; } } 

Página de Revisão do aplicativo aberto

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

Abra a página da App Store

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

Diz-se que este bug será corrigido no iOS7.1. Leia aqui no fórum corona e aqui no iPhoneDevSDK .