ITunes 查看 URL 和 iOS7(要求用户评价我们的应用程序) AppStore 显示一个空白页面

有没有人知道用来要求用户对我们的应用程序进行评级并直接在评级页面上打开应用程序商店的技术是否仍然适用于 iOS7?

我过去常常从我的应用程序中打开这个网址:

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

但它看起来不再工作了(AppStore 显示一个空白页)。我也尝试过这个网址,但没有成功:

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

从 iOS7开始,URL 已经改变,不能直接指向评论页面,而只能指向应用程序

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

其中 APP _ ID 需要替换为应用程序 ID。根据问题中的应用程序 ID,应用程序 ID 如下所示

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

注意数字前面的 身份证... 字符串是 身份证353372460,而不仅仅是353372460

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


例如,看看 Appirater 的实现

无法帮助您的电话空白具体(从来没有使用它)。但是它基本上归结为检查用户正在运行的 iOS 版本,然后要么使用旧的 URL,要么使用新的 iOS7 URL。

这在我这边是可行的(Xcode 5-iOS 7-装置!) :

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

对于低于 iOS7的版本,使用旧版本:

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

单行代码简单替代: * * 也请参见下面的模拟器注释 * *

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

编辑: 既然 iOS 7.1允许直接链接到 App Store 中的 Reviews 选项卡,那么投入额外的代码直接到达那里是值得的: 查看其他答案。

这里我们使用了 http: 而不是 itms-apps:,< em > 让 iOS 来完成剩下的工作

我在 iOS6.1和 iOS7设备(iPad/iPhone/iPod touch 4)上得到了同样的结果

具体来说,对于 IOS6,这个 捷径将用户带到 Details选项卡,而不是 Reviews选项卡。 < br >

Purple+Software链接可以让用户直接访问 iOS6中的 Reviews 选项卡,如果您知道如何检查该操作系统,那么这个选项卡显然是首选的。

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

需要说明的是: 在 iOS7上,http://提供了与 itms-apps:相同的体验,没有明显的延迟。请记住上面提到的模拟器行为。这与试图通过模拟器访问相机没有完全不同: 模拟器不是测试它的地方。*

据说这个漏洞将在日冕论坛的 iOS7.1、 看这里这里是 iPhoneDevSDK上修复。

下面的 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。

更新 . 适用于 iOS9.3.4和 iOS10GM (by Jeet)

以上所有的答案现在都已经被否定了(iOS7,但可能有用) ,因此,我提供了苹果推荐的提供应用程序链接的新方式。 你的应用程序的链接来自 iTunes (使用拷贝链接) ,建议在代码中使用这个链接:

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

目标 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];

请注意,这是苹果现在推荐的方法,因为以前处理重定向链接的方法已经过时,不受支持。

所有应用程序的链接,如果你有一个以上:

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

上面的 App 链接推荐用于用户不能直接看到的代码或链接。如果你想提供用户可能看到和记住的链接,那么使用以下方法: http://appstore.com/calcfast

在 iOS7中可以直接从应用程序打开评论页面。 请使用以下网址..。

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

这绝对有用. . :)

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

IOS9中的评论链接再次被打破。在做了一些实验后,我发现苹果把它恢复到了 iOS7之前的样子。所以你必须这样做:

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

Where 247423477 is your 9 digit app ID (the main difference is you have to append &onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software after the app ID).

我有这个得到 自动产品 ID和生成 应用程序商店评论和产品页面链接

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

打开应用程序的应用程序商店页面

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

目前还不清楚 iOS 支持哪些版本,但是作为 iOS 10.3的一部分,有一个 新的查询参数可以添加到 URL: action=write-review。我已经在 iOS10.2和9.3.5上测试过了,它运行良好。但是,它不能在 iOS7.1.2上工作,因此在 iOS8.0和9.3.5之间添加了支持。需要进一步调查!

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

这将打开“ Write a Review”对话框 ,而不仅仅是显示审查选项卡。

使用这个 URL 对我来说是完美的解决方案。它将用户直接带到 Write a Review section。感谢@Joseph Duffy。

对于示例代码,请尝试这样做:

斯威夫特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的自定义函数。