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.

Другие вопросы по тегам