iTunes审查URL和iOS 7(要求用户评价我们的应用程序)AppStore显示一个空白页面

是否有人知道是否用来让用户评价我们的应用程序,并直接在评级页面上打开他的App Store的技术仍然在iOS 7上工作?

我曾经从我的应用程序打开此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 

从iOS7开始,URL已经更改,不能直接进入评论页面,而只能到达应用程序

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

APP_ID需要用您的应用程序IDreplace。 基于这个问题的应用程序ID将是以下内容

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

注意号码前面的id …那个string是id 353372460,不只是353372460

对于iOS7之前的任何东西,都需要使用“旧”URL,只有这些URL才能让您直接进入评论页面。 您还应该注意这些电话只能在设备上使用 。 在模拟器中运行它们将不会执行任何操作,因为模拟器没有安装App Store应用程序。


看看例如Appirater的一个实现。 https://github.com/arashpayan/appirater

不能帮助你的电话细节(从来没有使用过)。 但是,基本上来说,检查用户正在运行的iOS版本,然后使用旧的URL或新的iOS7 URL。

以下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是您的应用程序ID。

更新 。 适用于iOS 9.3.4和iOS 10 GM(Jeet)

这在我的工作(Xcode 5 – iOS 7 – 设备 !):

 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 

一行代码简单的select: **另请参见模拟器评论下面**

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)上获得了相同的testing结果,

具体来说, iOS 6的这个快捷方式将用户带到“ Details选项卡,而不是“ Reviews选项卡。

Purple+Software链接让用户一路进入iOS 6的评论选项卡,如果您知道如何检查操作系统,显然是首选。

重要提示 :这将导致iOS 5.1,6.1和7的模拟器出错。
无法打开页面Safari无法打开页面,因为地址是无效的(我们知道它是在模拟器之外的任何浏览器上的有效URL)

只是要清楚 :在iOS 7上: http://提供与itms-apps:相同的体验itms-apps:没有明显的延迟。

*请记住上面提到的模拟器行为。 这与试图通过模拟器访问摄像机并不完全不同:模拟器不是testing它的地方。 *

在iOS7中直接从应用打开评论页面是可能的。 请使用下面的url…

 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上testing过了,它可以工作。 但是,它不适用于iOS 7.1.2,因此在iOS 8.0和9.3.5之间添加了支持。 需要进一步调查!

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

这将打开“撰写评论”对话框 ,而不是只显示评论标签。

评论链接在iOS9中再次被打破。 在做一些试验的时候,我发现苹果已经恢复到了iOS7之前的状态。 所以你必须这样做:

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

其中247423477是您的9位数应用程序ID(主要区别在于您必须在应用程序ID后添加&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,但可能工作),因此,我提供了苹果build议提供链接到应用程序的新方法。 您的应用程序的链接是从iTunes的链接(使用复制链接),这一个build议用于代码:

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现在推荐的方式,因为之前处理redirect链接的方法已被弃用,不受支持。

所有应用程序的链接,如果你有多个:

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

上面的App链接build议用于用户不能直接看到的代码或链接。 如果您想提供可能被用户看到和记住的链接,请使用以下内容: http://appstore.com/calcfast : http://appstore.com/calcfast

使用这个url是我的完美解决scheme。 它将用户直接带到“ Write a Review section 。 感谢@Joseph Duffy。

对于示例代码尝试这一点:

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的自定义函数。

我有这个自动获取产品ID,并生成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]]; } 

据说这个bug将在iOS7.1上修复。 在电晕论坛上阅读 ,并在iPhoneDevSDK上阅读 。