URL-адрес обзора ITunes и iOS 7 (попросите пользователя оценить наше приложение) AppStore показать пустую страницу
Кто-нибудь знает, все еще работает ли iOS iOS 7, чтобы попросить пользователя оценить наше приложение и открыть для него App Store непосредственно на странице рейтинга?
Я использовал, чтобы открыть этот URL из моего приложения:
itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=353372460&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software
Но похоже, что он больше не работает (AppStore показывает пустую страницу). Я также попробовал этот URL без удачи:
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?pageNumber=0&sortOrdering=1&type=Purple+Software&mt=8&id=353372460
12 ответов
Начиная с iOS7, URL-адрес изменился и не может быть направлен на страницу обзора, а только на приложение
itms-apps://itunes.apple.com/app/idAPP_ID
Где APP_ID необходимо заменить вашим идентификатором приложения. На основании идентификатора приложения из вопроса это будет следующим
itms-apps://itunes.apple.com/app/id353372460
Обратите внимание на идентификатор перед номером... эта строка является идентификатором353372460, а не только 353372460
Для всего, что было до iOS7, необходимо использовать "старый" URL, только те, которые могут привести вас прямо к странице обзора. Вы также должны принять к сведению, что эти вызовы будут работать только на устройствах. Запуск их в симуляторе ничего не даст, так как на симуляторе не установлено приложение App Store.
Взгляните, например, на Appirater для реализации. https://github.com/arashpayan/appirater
Не могу помочь вам с особенностями телефонной щели (никогда не использовал его). Но в основном это сводится к проверке версии iOS, которую использует ваш пользователь, а затем либо использует старый URL, либо затем новый URL iOS7.
Следующий URL отлично работает на iOS 7.1:
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=xxxxxxxx&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8
где xxxxxxxx
это идентификатор вашего приложения.
ОБНОВЛЕНИЕ. Работает на iOS 9.3.4 и iOS 10 GM (от Jeet)
Это работает на моем конце (Xcode 5 - iOS 7 - Device!):
itms-apps://itunes.apple.com/app/idYOUR_APP_ID
Для версий ниже iOS 7 используйте старую:
itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=YOUR_APP_ID
Непонятно, в каких версиях iOS это поддерживается, но в составе iOS 10.3 есть новый параметр запроса, который можно добавить к URL: action=write-review
, Я проверил это на iOS 10.2 и 9.3.5, и это работает. Однако это не работает на iOS 7.1.2, поэтому была добавлена поддержка между iOS 8.0 и 9.3.5. Требуется дальнейшее расследование!
Пример: https://itunes.apple.com/app/id929726748?action=write-review&mt=8
Это откроет диалоговое окно "Написать отзыв ", а не просто показывает вкладку обзора.
Простая альтернатива из одной строки кода: ** Также см. Комментарии симулятора ниже **
http://itunes.apple.com/app/idAPP_ID
РЕДАКТИРОВАТЬ: Теперь, когда iOS 7.1 позволяет прямую ссылку на вкладку "Обзоры" в App Store, стоит потратить дополнительные строки кода, чтобы попасть туда напрямую: см. Другие ответы для остальных.
здесь мы используем http:
вместо itms-apps:
пусть iOS сделает всю остальную работу
Я получаю те же результаты тестирования на устройствах iOS 6.1 и 7 (iPad/iPhone/iPod touch 4)
В частности, этот ярлык для iOS 6 переводит пользователя на Details
вкладка, а не Reviews
Вкладка.
Purple+Software
ссылка ведет пользователя к вкладке "Обзоры" в iOS 6, что, очевидно, предпочтительнее, если вы знаете, как проверить ОС.
Важное примечание: это приведет к ошибке в симуляторе для iOS 5.1, 6.1 и 7.
Невозможно открыть страницу Safari не может открыть страницу, поскольку адрес недействителен (мы знаем, что это допустимый URL вне симулятора в любом браузере)
Просто чтобы быть ясно: на iOS 7: http://
обеспечивает такой же опыт, как itms-apps:
без заметной задержки.
* имейте в виду, что поведение симулятора отмечено выше. Это не совсем то же самое, что пытаться получить доступ к камере с помощью симулятора: на симуляторе нет места для его тестирования. *
Открытие страницы обзора прямо из приложения возможно в iOS7. Пожалуйста, используйте следующий URL...
itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=YOUR_APP_ID
Это определенно работает..:)
Ссылка на обзор снова сломалась в iOS9. Проводя некоторые эксперименты, я понял, что Apple вернула его обратно к тому, что было до iOS7. Итак, вы должны сделать:
itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=247423477&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software
куда 247423477
Ваш 9-значный идентификатор приложения (главное отличие заключается в добавлении &onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software
после идентификатора приложения).
+ (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;
}
Все приведенные выше ответы устарели (iOS 7, но может работать), поэтому я предоставляю новый способ, который Apple рекомендует предоставлять ссылки на Приложения. Ссылка для вашего приложения - ссылка из iTunes (используйте Copy Link), эта рекомендуется для использования в коде:
Swift 3.0
let path = URL(string: "https://itunes.apple.com/us/app/calcfast/id876781417?mt=8")
UIApplication.shared.open(path!)
Или лучше - относитесь к необязательному правилу правильно и учитывайте возможность невозможности добраться до ссылки:
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"
тогда вы можете позвонить APP_URL_STRING
в вашем коде:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: APP_URL_STRING] options:@{} completionHandler:nil];
Обратите внимание, что сейчас Apple рекомендует этот способ, поскольку предыдущий метод обработки перенаправленных ссылок устарел и не поддерживается.
Ссылка для всех ваших приложений, если у вас более одного:
#define MYCOMPANY_URL_PATH @"http://appstore.com/mycompany"
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: MYCOMPANY_URL_PATH] options:@{} completionHandler:nil];
Ссылка на приложение выше рекомендуется для использования в коде или ссылках, которые не видны непосредственно пользователю. Если вы хотите предоставить ссылку, которая может быть просмотрена и запомнена пользователем, используйте следующее:http://appstore.com/calcfast
Использование этого URL было идеальным решением для меня. Это берет пользователя непосредственно к Write a Review section
, Кредиты @ Джозефу Даффи.
Для примера кода попробуйте это:
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 является пользовательской функцией для UIAlertController
,
У меня есть это для автоматического получения идентификатора продукта и создания ссылок на обзор 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];
}
}
Открыть страницу обзора приложения
- (IBAction) rateButton: (id)sender {
NSString *appStoreReviewLink = appStoreReviewLink;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appStoreReviewLink]];
}
Откройте страницу App Store в приложении
- (IBAction) openAppPageButton: (id)sender {
NSString *appStoreLink = appStoreLink;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: appStoreLink]];
}
Говорят, что эта ошибка будет исправлена на iOS7.1. Читайте здесь, на форуме Corona, и здесь, на iPhoneDevSDK.