“为此应用程序评分/评论”的App Store链接

222

我想在我的应用程序中添加一个“评分/评论此应用程序”的功能。

是否有一种方式可以直接链接到应用商店中的屏幕,以便他们可以对应用程序进行评论?这样客户就不必通过主要应用程序链接点击。谢谢。

编辑:由于缺乏回应,我在此启动了悬赏。 只是为了确保非常清楚:我知道我可以链接到应用商店中我的应用程序页面,并要求用户从那里单击“评论此应用程序”屏幕。 问题是是否可能直接链接到“评价此应用程序”屏幕,以便他们不必点击任何内容。


1
在这里看一下我的答案:http://stackoverflow.com/questions/3011246/alert-a-user-to-rate-an-application-from-itunes/3011331#3011331 - iwasrobbed
这里没有人提到过。它只能在设备上运行,不能在模拟器上运行! - Gustavo Baiocchi Costa
29个回答

362

对于iOS 7以下的版本,请使用旧版:

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

在我的设备上(Xcode 5 - iOS 7 - 设备),这个方法可行:

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

针对iOS 8或更高版本:

itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=YOUR_APP_ID&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software
<p>代码片段(你可以直接复制和粘贴):</p>
#define YOUR_APP_STORE_ID 545174222 //Change this one to your ID

static NSString *const iOS7AppStoreURLFormat = @"itms-apps://itunes.apple.com/app/id%d";
static NSString *const iOSAppStoreURLFormat = @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%d";

[NSURL URLWithString:[NSString stringWithFormat:([[UIDevice currentDevice].systemVersion floatValue] >= 7.0f)? iOS7AppStoreURLFormat: iOSAppStoreURLFormat, YOUR_APP_STORE_ID]]; // Would contain the right link

176
注意——“type=Purple+Software”这个东西必须存在,而且必须字面上是“Purple Software”,这不是你公司的名字,而是 iPhone 应用的代号:) 在我弄清楚之前,我浪费了一小时时间... - Kuba Suder
16
值得注意的是,这在模拟器上不起作用,但在实际设备上可以。 - Joseph
1
FYI,这在iPad上似乎可以工作,但只有第二次尝试时才有效。 (在关闭iTunes和App Store应用程序后) - Michael
13
在iOS 7上,这将带我到商店页面,但不会选中评论选项卡。 - devios1
45
作为iOS 10.3的一部分,有一个新的查询参数可以添加到URL中:action=write-review。我已经在iOS 10.2上进行了测试,它可以正常工作,但我不知道它能向后兼容到多少版本。这将打开“撰写评论”对话框,而不仅仅是显示评论选项卡。例如:https://itunes.apple.com/gb/app/id929726748?action=write-review&mt=8 - Joseph Duffy
显示剩余17条评论

90

更新:

Swift 5.1,Xcode 11

已在真实设备iOS 13.0上测试(保证可用)

import StoreKit

func rateApp() {

    if #available(iOS 10.3, *) {

        SKStoreReviewController.requestReview()
    
    } else {

        let appID = "Your App ID on App Store"
        let urlStr = "https://itunes.apple.com/app/id\(appID)" // (Option 1) Open App Page    
        let urlStr = "https://itunes.apple.com/app/id\(appID)?action=write-review" // (Option 2) Open App Review Page
        
        guard let url = URL(string: urlStr), UIApplication.shared.canOpenURL(url) else { return }
        
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url) // openURL(_:) is deprecated from iOS 10.
        }
    }
}

1
适用于iOS 10.3。 - Vladimir Shutyuk
从appID字符串中去掉括号,它就能正常工作了。 - richc
9
这不再起作用了。现在有效的是<product-url>?action=write-review。请查看此文档以获得更好的理解:https://developer.apple.com/documentation/storekit/skstorereviewcontroller/2851536-requestreview#discussion - Karthik Kannan
它仍然在我使用的真正iPhone 11 Pro设备上运行,且iOS 14也能兼容。 - user3788747

45

编辑:iOS 11解决方案

这是我原来答案的解决方案(请参见下文)。在使用iOS 11时,以下链接格式将起作用:

https://itunes.apple.com/us/app/appName/idAPP_ID?mt=8&action=write-review

只需将APP_ID替换为您具体的应用程序ID即可。让链接起作用的关键是国家代码。上面的链接使用了us代码,但实际上使用哪个代码并不重要。用户将自动重定向到他的商店。

iOS 11更新:

似乎其他答案中提供的所有解决方法都不能在iOS 11上直接转至评论页面。

问题很可能是因为iOS 11 App Store应用程序中的应用程序页面不再有评论选项卡。取而代之的是,评论现在直接位于说明和屏幕截图下方。当然,仍然可以直接到达此部分(例如使用某种锚点),但似乎这不受苹果支持/意图。

使用以下链接之一不再起作用。它们仍然将用户带到App Store应用程序,但只有一个空白页面:

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

每个仍在使用这些链接的人都应尽快更新他们的应用程序,因为引导用户前往空白的应用商店页面可能不是您想要的结果。

但是,不引用评论页面而引用应用程序页面的链接仍然有效,例如:

itms-apps://itunes.apple.com/app/idYOUR_APP_ID   (same as above, but without write-review parameter)

所以,你仍然可以将用户引导到你的应用商店页面,但不能直接进入评论部分了。现在用户必须手动滚动到评论部分来留下反馈。

毫无疑问,这对用户体验是一个“巨大而棒的好处,将帮助开发人员吸引用户留下高质量的评论,而不会让他们感到烦恼”。干得好,苹果......


SKStoreReviewController.requestReview() 是否起作用了? - dev_m
1
关于SKStoreReviewController:“请求StoreKit要求用户对应用进行评论。这可能会显示任何UI”。因此,SKStoreReviewController不是解决方案。我尽量避免使用它。 - Fallstreak

38

以上内容全部正确。这只是一个示例,可以插入到应用程序中,并将 {YOUR APP ID} 更改为实际的应用程序 ID,该 ID 可从 iTunes Connect 中获取以显示“评价”页面。请注意,如上所述,它在模拟器上无法工作,仅适用于设备。

  • 由于 iOS 7 的更改进行了更正。
  • 由于 iOS 10+ 的 openURL 更改进行了更正。
  • 对于 iOS 13.6+,使用早期版本(6.0 之前)使用的评价 URL 可以访问。它直接驱动到评价页面。代码已更新。
    NSString * appId = @"{YOUR APP ID}";
    NSString * theUrl = [NSString  stringWithFormat:@"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=%@&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software",appId];
    int vers = (int) [[UIDevice currentDevice].systemVersion integerValue];
    if (vers > 6 && vers < 12 ) theUrl = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@",appId];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:theUrl] options:@{} completionHandler:nil];

这似乎只是显示一个空的应用商店页面。似乎你需要在实际的ID之前添加“id”。 - Gerard
需要为appId加上括号吗?因为我忘记加了,但是速率函数仍然可以正常工作。 - Glenn Posadas
1
使用数字而不是{YOUR APP ID},表示为@"5555555555" - 括号只是表示它是一个值。 - ETech

26

所有上述方法都是正确的,但现在使用 SKStoreProductViewController 可以提供更好的用户体验。要使用它,您需要执行以下操作:

  • 在您的应用程序委托中实现SKStoreProductViewControllerDelegate协议
  • 添加所需的productViewControllerDidFinish方法:

    - (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
      [viewController dismissViewControllerAnimated: YES completion: nil];
    }
    
  • 检查SKStoreProductViewController类是否可用,如果可用则显示它,否则切换到App Store:

  • extern NSString* cAppleID; // must be defined somewhere...
    
    if ([SKStoreProductViewController class] != nil) {
      SKStoreProductViewController* skpvc = [[SKStoreProductViewController new] autorelease];
      skpvc.delegate = self;
      NSDictionary* dict = [NSDictionary dictionaryWithObject: cAppleID forKey: SKStoreProductParameterITunesItemIdentifier];
      [skpvc loadProductWithParameters: dict completionBlock: nil];
      [[self _viewController] presentViewController: skpvc animated: YES completion: nil];
    }
    else {
      static NSString* const iOS7AppStoreURLFormat = @"itms-apps://itunes.apple.com/app/id%@";
      static NSString* const iOSAppStoreURLFormat = @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@";
      NSString* url = [[NSString alloc] initWithFormat: ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0f) ? iOS7AppStoreURLFormat : iOSAppStoreURLFormat, cAppleID];
      [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
    }
    

5
这看起来是一个很好的解决方案,但我一直无法让它工作。 “撰写评论”按钮被禁用了。起初我以为这是因为我一直在运行我的开发版本,可能需要安装应用商店版本。所以我创建了一个全新的捆绑标识并将其与应用商店版本一起运行,但仍然没有成功。根据这篇文章,在iOS 7+中,“撰写评论”按钮被禁用了:https://dev59.com/b2Ik5IYBdhLWcg3wr_5o - Matt R
3
如何在此实现中默认打开“评论”选项卡?苹果文档只提供了3个参数,但似乎都与我所需的无关:SKStoreProductParameterITunesItemIdentifier、SKStoreProductParameterAffiliateToken和SKStoreProductParameterCampaignToken。 - Jovan
@KamranKhan,我也遇到了同样的问题。我在想这个功能是否在开发版本中被禁用了。你尝试过在已发布的应用程序(已签名)中测试它是否可行吗? - Shammi
@Shammi 不,我还没有检查过。 - Kamran Khan
从StoreProductViewController中为应用程序评分是否可能?对我来说似乎不可能...如果评论选项卡可以默认打开,那就更好了。 - benrudhart
显示剩余3条评论

17

iOS 11的解决方案

在新的iOS 11 App Store中,短的应用商店URL无法正确打开“撰写评论”界面。例如,以下URL就无法正常工作:

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

解决方法是在URL中加入两个字母的国家代码和应用名称,如下所示:

https://itunes.apple.com/us/app/twitter/id333903271?mt=8&action=write-review

或者

itms-apps://itunes.apple.com/us/app/twitter/id333903271?mt=8&action=write-review

您可以从这里获取您的应用程序的完整URL:https://linkmaker.itunes.apple.com/

这将成功地在iOS 11 App Store中打开“撰写评论”界面。

编辑:如@Theo在下面提到的那样,国家代码不需要本地化,并且URL中的应用程序名称如果更改也不需要更新。

希望苹果公司会很快修复这个问题,使更短的URL也能正常使用。请参见rdar://34498138


4
这是iOS 11的正确方式,由WWDC Session 303介绍。请注意,参数mt=8不是必需的。此外,显然URL中的国家代码和应用程序名称是必需的,但会被忽略。因此,当应用程序名称更改时,无需对URL进行本地化或更新。 - Theo
@Theo,你是正确的,只有ID需要更改:itms-apps://itunes.apple.com/xy/app/foo/id{your_app_id}?action=write-review - DaveAlden
4
真的吗?为了避免这种情况,我们需要观看多少小时的WWDC?!? - thibaut noah
1
仅供其他人参考,新的深度链接自iOS 10.3以来就可用,如WWDC Session 303所述。 - Kjuly

12

iOS 11+(新的应用商店)中,有一种新的方法可以直接打开“撰写评论”对话框。

iOS 11 示例:

itms-apps://itunes.apple.com/us/app/id1137397744?action=write-review

或者
https://itunes.apple.com/us/app/id1137397744?action=write-review

注:

  • 需要一个国家代码/us/)。任何国家代码都可以,没有关系。
  • 将应用程序ID (1137397744) 更改为您的应用程序ID (从iTunes URL获取)。
  • 如果要支持旧版iOS版本 (11之前的版本),则需要一些条件逻辑来仅在操作系统版本大于或等于11时链接此方式。

12

Swift 2版本

func jumpToAppStore(appId: String) {
    let url = "itms-apps://itunes.apple.com/app/id\(appId)"
    UIApplication.sharedApplication().openURL(NSURL(string: url)!)
}

11

1
在苹果开发者文库中,没有官方链接可以直接跳转到“评论标签页”。然而,自iOS4以来,你会发现保留关键字,如viewContentsUserReviews或id,这些仍然被苹果用作URL获取参数。如果你想保险起见,使用官方的Link Maker https://linkmaker.itunes.apple.com/en-us/。 - Satinos
1
@Ms.Nehal,这个问题要求提供链接。它们就是实际的答案,而不是指向答案的指针。 - Tobi Nary

11

2
这是在电子邮件中发送链接时的一个好答案,因为如果有人在桌面或非苹果设备上打开链接,它仍然会打开一个页面并显示需要在移动设备上打开链接以进行审查。 - Manuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接