iTunes 评论 URL 和 iOS 7(要求用户评价我们的应用) AppStore 显示空白页
Posted
技术标签:
【中文标题】iTunes 评论 URL 和 iOS 7(要求用户评价我们的应用) AppStore 显示空白页【英文标题】:ITunes review URL and iOS 7 (ask user to rate our app) AppStore show a blank page 【发布时间】:2013-09-25 04:30:06 【问题描述】:是否有人知道用于要求用户对我们的应用程序进行评分并直接在评分页面上为他打开 App Store 的技术在 ios 7 上是否仍然有效?
我曾经从我的应用程序中打开此网址:
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
【问题讨论】:
看了UAAppReviewManager的源码,貌似确实有iOS7的pb。所以他们使用标准的App URL,所以用户需要搜索rate button :-/ 看起来 ios 7 的评论链接不起作用。我会将我的代码更改为常规的应用程序链接网址。用户必须点击查看按钮。 您发布的第二个链接现在适用于 iOS 7!直接进入评论页面 对我来说....第一个 URL 似乎有效。我刚换了身份证号码 App store link for "rate/review this app"的可能重复 【参考方案1】:从 iOS7 开始,URL 发生了变化,不能直接指向评论页面,只能指向应用程序
itms-apps://itunes.apple.com/app/idAPP_ID
其中 APP_ID 需要替换为您的应用程序 ID。根据问题中的 App ID,它将是以下内容
itms-apps://itunes.apple.com/app/id353372460
注意数字前面的 id ...该字符串是 id353372460,而不仅仅是 353372460
对于 iOS7 之前的任何内容,都需要使用“旧”网址,只有那些才能让您直接进入评论页面。您还应该注意,这些调用仅在设备上有效。因为模拟器没有安装 App Store 应用,所以在模拟器中运行它们不会有任何效果。
查看例如 Appirater 的实现。 https://github.com/arashpayan/appirater
无法帮助您了解 phonegap 细节(从未使用过)。但它基本上归结为检查您的用户正在运行的 iOS 版本,然后使用旧 URL 或新的 iOS7 URL。
【讨论】:
实际上这会打开应用程序而不是评论标签。 是的,确实如此,但目前在 iOS7 下这是目前可以实现的最佳效果。 新的 Facebook 应用在 iOS 7 中显示应用商店页面内部。有人知道他们是怎么做到的吗? 与 iRate 不同,您必须使用上面的链接和 /LANGUAGE/app/idAPP_ID 信息 您想删除语言,Appirater 也有同样的问题,如果设备设置为不等同于 iTunes 商店的语言,您会得到一个空白页面(例如英国英语),如果您删除语言位它仍然有效并且商店以所有者的语言打开。【参考方案2】:以下 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 提供)
【讨论】:
这在 8.0 DP 5 中再次被破坏!现在将其作为一个错误报告,并希望我们能在生产版本中修复它。 适合我直接进入 App Store.app 评论页面。使用 Xcode 6 构建。在 iOS 8.0、iOS 7.1.2、iPhone 5 和 iPhone 4 中验证。 我发现了。类型应始终等于紫色软件 - 这是苹果的东西。 它在 iOS 8.3 的 iPhone 和 iPad 上都能正常工作。刚刚测试:) 谢谢! 在 iPod Gen 5、iOS 9.0.1 上运行良好。【参考方案3】:这适用于我(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
【讨论】:
这在我的 iOS7 设备(使用 Xcode 5)上给出了一个空白屏幕,这是我仍然用于 iOS6 的 URL。对于 iOS 7,我正在使用答案中详细说明的那个。奇怪的是它对你有用。 @Frank 你如何打开这个链接?我正在使用 iRate,它正在使用此链接,也许尝试使用它并检查与您的代码到底有什么区别。 我正在使用以下代码[[UIApplication sharedApplication] openURL:[NSURL URLWithString:ITUNES_APP_URL_IOS7]];
self.appStoreID 甚至无法编译
在 iOS 8 DP5 中又被破坏了。开始将此报告为错误并希望他们通过生产修复!否则我们将再次等到 8.1。【参考方案4】:
单行代码简单替代方案: ** 另请参阅下面的模拟器评论 **
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:
相同的体验,没有明显延迟。 * 请记住,模拟器行为已注明更多。这与尝试通过模拟器访问相机并没有完全不同:模拟器不是测试它的地方。 *
【讨论】:
我不确定你是如何回答这个问题的。您提供的此链接不符合 OP 的要求,即在 App Store 中打开“评论”页面。直接链接到应用程序本身很简单。 鉴于您在 iOS7 中无法直接链接到评论,这似乎是一个非常合理的解决方案。 虽然目前是真的,但不能保证 http 会继续路由到 App Store 应用程序。苹果可能会决定在未来向 Safari 发送 http 应用链接,谁知道呢?使用直接协议更安全。 除了Apple更改了直接协议,因此它在iOS7中不起作用,除非您使用不同的格式。所以根本不是真的“更安全”。 关于http:
与 itms-apps:
我可以在 iOS 7.1.1 上使用 itms-apps
而不是 http
直接链接到评论选项卡。【参考方案5】:
目前尚不清楚哪些版本的 iOS 支持此功能,但作为 iOS 10.3 的一部分,可以将 new query parameter 添加到 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
这将打开“写评论”对话框,而不仅仅是显示评论标签。
【讨论】:
干杯兄弟 :) 这是迄今为止最好的解决方案。切中要害,完全达到目的。对我来说,这是可以接受的答案。经测试可在 9.3.5 和 iOS 10.2.1 上运行。直接打开写评论。我用这个:itms-apps://itunes.apple.com/gb/app/id1136613532?action=write-review&mt=8,让用户直接写评论。 ...但是 gb 不是指英国吗?如果是这样,这会将所有用户推荐给英国 App Store? @Robert Yeh,我最初拥有 /gb 的链接。我认为它仍然会向用户的商店开放,但我已将其从答案中删除 它适用于 iOS10,但似乎不适用于 iOS11(使用 beta 9)。如果有变化有什么想法吗? 这适用于 iOS 11.1.1。谢谢!应该是公认的答案,@astrocb【参考方案6】:在 iOS7 中可以直接从应用打开评论页面。 请使用以下网址...
itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=YOUR_APP_ID
这肯定行得通.. :)
【讨论】:
我不知道..你签入iOS8了吗? 不,它没有。提交错误报告! 我在 iOS 8.1.1 上,这个 URL 直接进入评论页面。 什么是字符串中的“type=Purple+Software”?【参考方案7】:+ (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;
【讨论】:
Appirater 已再次更新以解决另一个问题。主要更改包括将检查从< 7.1
更改为< 8.0
,以便templateReviewURLiOS7
链接用于所有7.x iOS 版本,而不是对>=7.1 和
【参考方案8】:
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 位应用 ID(主要区别是您必须在应用 ID 后附加 &onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software
)。
【讨论】:
【参考方案9】:以上所有答案现在都已被弃用(iOS 7,但可能有效)因此,我提供了 Apple 推荐的新方式来提供应用程序的链接。 您的应用程序的链接是来自 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)")
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];
建议在用户无法直接看到的代码或链接中使用上面的 App 链接。如果您想提供用户可以看到和记住的链接,请使用以下内容:
http://appstore.com/calcfast
【讨论】:
这没有链接到评论页面 @ngb 你只能链接到应用程序或开发者页面。请在否决投票时给出正当理由或失败。我没有显示评论页面的链接,但用户可以轻松点击评分。 这是正确的 Apple 推荐方法。其他任何东西都是 hack。 @Bingo 你什么意思?我提供的链接以 &mt=8 结尾,是指向评论页面的链接。在我的回答中,我指的是 Apple 的建议,您的链接现在可能有效,也可能适用于您的情况,但它是否适用于其他国家/地区的用户,或者您确定它不会改变?【参考方案10】:使用此 URL 对我来说是完美的解决方案。它将用户直接带到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
的自定义函数。
【讨论】:
【参考方案11】:我用它来自动获取产品 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]];
【讨论】:
【参考方案12】:据说这个bug会在iOS7.1上修复。 Read here 在电晕论坛上,here on the iPhoneDevSDK。
【讨论】:
不幸的是,iOS 7.1 现已发布,但仍然无法正常工作。 它再次在 iOS 7.1 上为我工作(直接转到评论页面),其他人在 devsdk 链接中也表示了相同的内容。对我来说,我只需要将方案从 itms-apps 更改为 http,它就可以在 iOS 7.1 上完美运行。在 iOS 7.0 上,它仍然只进入应用程序主页面,但至少 http 链接有效,不像旧的 itms-apps 链接只会显示一个白页。 我现在可以肯定地确认“旧”(紫色+软件)方法在 iOS7.1 中完美运行您可以在我的应用程序中看到一个证明:j.mp/josegg 在主屏幕上单击“设置” -> 点击“Get Free Js” -> 然后点击“Rate Us” -> 您将直接进入应用商店中我的应用页面的评论选项卡(显然仅适用于 iOS 7.1+ 或 iOS 6.1.4-)以上是关于iTunes 评论 URL 和 iOS 7(要求用户评价我们的应用) AppStore 显示空白页的主要内容,如果未能解决你的问题,请参考以下文章
新改版(2015 年 9 月)iTunes 连接 UI 中的 iOS 应用客户评论部分在哪里
商店工具包交易错误:iOS 7 设备上的“无法连接到 iTunes Store”
是否可以在 iOS 7 中将 PHG 附属参数添加到这些新的 App Store 启动 URL?