158

有人知道用于要求用户对我们的应用程序进行评分并直接在评分页面上为他打开​​ 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
4

12 回答 12

198

从 iOS7 开始,URL 发生了变化,不能直接指向评论页面,只能指向应用程序

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

其中 APP_ID 需要替换为您的应用程序 ID。根据问题中的 App ID,它将是以下内容

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

注意数字前面的id ...该字符串是id 353372460,而不仅仅是 353372460

对于 iOS7 之前的任何内容,都需要使用“旧”URL,只有那些才能让您直接进入评论页面。您还应该注意,这些调用仅适用于设备。由于模拟器没有安装 App Store 应用程序,因此在模拟器中运行它们将无济于事。


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

无法帮助您了解 phonegap 细节(从未使用过)。但它基本上归结为检查您的用户正在运行的 iOS 版本,然后使用旧 URL 或新的 iOS7 URL。

于 2013-09-19T23:01:22.853 回答
166

以下 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 提供)

于 2014-04-13T00:03:57.667 回答
47

这适用于我(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
于 2013-09-20T00:45:44.567 回答
18

单行代码简单替代方案: ** 另请参阅下面的模拟器评论 **

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:

于 2013-09-25T10:28:57.780 回答
18

目前尚不清楚哪些版本的 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

这将打开“写评论”对话框,而不仅仅是显示评论选项卡。

于 2017-01-25T17:12:22.063 回答
17

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

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

这肯定会奏效.. :)

于 2014-06-16T09:59:26.243 回答
9
+ (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;
}
于 2015-06-25T04:02:41.203 回答
9

评论链接在 iOS9 中再次断开。在进行一些实验时,我发现 Apple 将其恢复到 iOS7 之前的状态。所以你必须这样做:

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

您的 9 位数应用 ID在哪里247423477(主要区别是您必须&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software在应用 ID 后面附加)。

于 2016-01-06T00:18:11.023 回答
5

上面的所有答案现在都已被弃用(iOS 7,但可能有效),因此,我提供了 Apple 推荐的新方式来提供应用程序的链接。您的应用程序的链接是来自 iTunes 的链接(使用复制链接),建议在代码中使用此链接:

斯威夫特 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

于 2014-05-23T17:18:43.737 回答
4

使用这个 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

于 2017-03-08T10:20:24.213 回答
3

我有这个自动获取产品 ID并生成App Store Review 和 Product page links

- (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]];
 }
于 2016-05-26T03:43:56.713 回答
2

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

于 2014-02-12T14:36:57.553 回答