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上阅读 。