我该如何使用Swift添加一个评分按钮的链接?

80

在提交我的应用之前,我不知道如何获取链接,而且这个链接是针对每个国家的应用商店还是通用的?

另外,我不知道怎样做,是只需在那里放入链接即可吗?

@IBAction func rate(sender: AnyObject) {
    UIApplication.sharedApplication().openURL(NSURL(string : "webLinkHere")!)
}

还是应该用另一种方法来做这件事吗?

谢谢


4
前往您的itunesconnect账户 -> 我的应用程序 -> 点击“+”按钮 -> 新建iOS应用程序 -> 填写所需细节 -> 填写完所有详细信息后,前往您的应用程序 -> 点击更多按钮 -> 在AppStore上查看 -> 它将重定向您到您的应用程序URL,这将是通用的,并且在您的应用程序上线后仍将保持不变。 - Krunal Darji
非常感谢,那么我只需要在“webLinkHere”处放置我的链接,它就可以正常工作了,对吗? - Luis Felipe
嗯,它会将您重定向到您的应用程序,您应该点赞我的答案。 - Krunal Darji
我尝试了您的答案,但itunes说:您请求的项目目前在印度或美国商店不可用 - @Krunal Darji - amar
1
@amar 仔细阅读问题。 - Krunal Darji
是的,我明白了 @karun Darji - amar
13个回答

149

尝试这个,在你的方法中将 appId 更改为你的 App ID

Swift 5

import StoreKit

func rateApp() {
    if #available(iOS 10.3, *) {
        SKStoreReviewController.requestReview()

    } else if let url = URL(string: "itms-apps://itunes.apple.com/app/" + "appId") {
        if #available(iOS 10, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)

        } else {
            UIApplication.shared.openURL(url)
        }
    }
}

Swift 3 \ 4

func rateApp() {
    guard let url = URL(string: "itms-apps://itunes.apple.com/app/" + "appId") else {
        return
    }
    if #available(iOS 10, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)

    } else {
        UIApplication.shared.openURL(url)
    }
}

id959379869是你的应用在Itunes页面上的ID。

例如 : https://itunes.apple.com/fr/app/hipster-moustache/id959379869?mt=8

如何获取ID:

  1. 登录Itunesconnect账户
  2. 点击"My Apps"
  3. 点击"+"按钮
  4. 选择"New iOS App"
  5. 填写必要细节
  6. 填写完所有细节后进入你的App
  7. 点击"More"按钮
  8. 选择"View on AppStore"
  9. 它会将您重定向到您的应用程序URL,这将是通用的
  10. 查看Http URL,其最后一部分即为ID

3
我在App Store上有一个现成的应用程序。以上代码百分百有效,我刚刚测试过了。对于那些寻找“当前”解决方案的人来说,这就是它 :-) - Paul Metas
2
iOS 10上的守卫似乎不必要? - thibaut noah
1
@YannickSteph 如果你遵循指南,它不是一个 if 语句,而应该使用 if 语句代替。 - thibaut noah
1
这是在使用Swift4时对我有效的唯一一个,谢谢! - Brewski
5
苹果文档就SKStoreReviewController.requestReview的使用确切说明如下:"虽然你应该在你的应用程序用户体验流程中合理调用此方法,但实际的评分/审查请求视图的显示受App Store政策的约束。由于此方法可能或可能不会呈现警报,因此不适合在响应按钮点击或其他用户操作时调用它。" - TheTeacher33
显示剩余3条评论

27

Swift 4

let url = URL(string: "itms-apps:itunes.apple.com/us/app/apple-store/id\(YOURAPPID)?mt=8&action=write-review")!
UIApplication.shared.openURL(url)

3
好的,这正是我在寻找的。 - Mrugesh Tank

26

这对我来说是最有效的方法。直接引导用户进入应用程序的“撰写评论”编辑器。

Swift 3.1(支持iOS10及以下版本)

引入新的action=write-review

let appID = "959379869"

if let checkURL = URL(string: "http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=\(appID)&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8") {
    open(url: checkURL)
} else {
    print("invalid url")
}

...

func open(url: URL) {
    if #available(iOS 10, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: { (success) in
            print("Open \(url): \(success)")
        })
    } else if UIApplication.shared.openURL(url) {
            print("Open \(url)")
    }
}

已在Swift 2.2上进行测试并且可行。

let appID = "959379869" // Your AppID
if let checkURL = NSURL(string: "http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=\(appID)&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8") {
    if UIApplication.sharedApplication().openURL(checkURL) {
        print("url successfully opened")
    }
} else {
    print("invalid url")
}

4
你的评论字符串没有被使用到,伙计。 - thibaut noah
1
但是代码应该经过测试,因为reviewString没有被使用。还有一个\(success)变量在else语句中被使用,但没有声明。 - MBH
1
请注意,这段代码在iOS 9和iOS 10上运行良好,但在iOS 11上无法正常工作。我的测试是基于旧版App Store,可能与新版有所不同。 - Markus
有没有适用于IOS 11及之前版本的解决方案? - MobileGeek
1
@Alfi的答案适用于Swift4和iOS 11.*设备。 - Surendra Kumar
显示剩余3条评论

22

iOS 10.3+之后

SKStoreReviewController允许用户通过对话框直接从应用程序中对应用程序进行评级。唯一的缺点是,您只能请求StoreKit显示对话框,但不能确定它是否会显示。

import StoreKit

func requestToRate() {
    SKStoreReviewController.requestReview()
}

这是正确的答案。这就是高流量应用程序获得成千上万条评论的方法。 - Lucas Chwe
SKStoreReviewController是获取应用反馈的好方法。但是,您应该知道,在365天内,提示只会显示给用户最多三次。更多信息请参见:https://developer.apple.com/documentation/storekit/skstorereviewcontroller/requesting_app_store_reviews - Bhaumik
1
很遗憾,在iOS 14上它已经被弃用了。 - Ahmadreza

17

Swift 5.1:以下函数可以将您的用户直接发送到任何商店的评论部分,而不仅限于美国商店:

func rateApp(id : String) {
    guard let url = URL(string : "itms-apps://itunes.apple.com/app/id\(id)?mt=8&action=write-review") else { return }
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url)
    }
}

用法:

rateApp(id: "1287000522")

重要提示:此方法无法在模拟器上运行!请在真实设备上测试。


这个有效,我刚在App Store上的我的应用中测试过。 - Zhou Haibo

13
您可以使用以下函数,将APP_ID替换为您自己的ID。调用此函数将打开应用商店链接,并显示用户的评论页面,用户可以轻松地点击并编写评论。

您可以使用以下函数,将APP_ID替换为您自己的ID。调用此函数将打开应用商店链接,并显示用户的评论页面,用户可以轻松地点击并编写评论。

func rateApp(){
   UIApplication.sharedApplication().openURL(NSURL(string : "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=\(APP_ID)&onlyLatestVersion=true&pageNumber=0&sortOrdering=1)")!);
}

APP_ID的格式是"id912873918273"、"912873918273"或者"com.Companyname.Appname"吗? - vkalit
3
AppStore已经打开,但出现了错误:“您的请求产生了一个错误。[newNullResponse]” - Tai Le
现在我只使用这个: UIApplication.sharedApplication().openURL(NSURL(string : "https://itunes.apple.com/app/id_APPID")!) - Mahmud Ahsan
@MahmudAhsan,你的链接末尾有一个自动完成错误,在字符串内多了一个不应该存在的括号结尾,由于它只是一个字符,我无法编辑它。 - thibaut noah

9

对于 iOS 10.3+,您可以使用简单的对话框和警报式窗口来选择评分,使用 SKStoreReviewController 完成。为了使用它,您需要导入 StoreKit 库。因此,在应用内部进行评分的通用方法如下:

import StoreKit

func rateApp(){
   if #available(iOS 10.3, *) {
      SKStoreReviewController.requestReview()
   } else {
      guard let url = URL(string: "itms-apps://itunes.apple.com/ru/app/cosmeteria/id1270174484") else {
         return
      }

      if #available(iOS 10.0, *) {
         UIApplication.shared.open(url, options: [:], completionHandler: nil)
      } else {
         UIApplication.shared.openURL(url)
      }
   }
}

当您尝试在模拟器中启动时,您将看不到App Store窗口,请在设备上尝试,它会起作用。该方法涵盖了所有iOS版本,使用所有功能。在您应用程序地址中的路径部分“/us/app”表示您的App Store本地化,例如,“us”表示美国。您可以通过在任何浏览器中打开App Store中的应用程序来轻松找到应用程序ID。要获取链接,只需复制浏览器中的地址。将“https://”更改为“itms-apps://”可让您在App Store应用程序中打开应用程序,而“https”则在Safari中打开Web页面。


1
“requestReview” 不能保证在真实设备上每次都会显示。 - Amr Lotfy
这应该是新的批准答案。由于10.3应该是几乎所有人的目标,这将消除重定向的丑陋并直接发送到商店。非常干净。 - Jason Short

7

警告:如果您在模拟器上运行应用程序

 UIApplication.sharedApplication().openURL(NSURL(string : "url")!) 

在模拟器中将无法工作,因为没有应用商店。为了测试这个功能,您必须在设备上运行您的应用程序。


这是不正确的。 "openURL" 函数在模拟器和设备上都可以工作。但是,根据您提供的 URL,模拟器可能无法处理它。 - Sam Spencer

2

Swift 3

  func rateApp(){
UIApplication.shared.open(URL(string : "itms-apps://itunes.apple.com/app/id959379869")!, options: [:]) { (done) in
  // Handle results

}}

id959379869是您在应用程序的iTunes页面上使用的标识符。


1
前往您的itunesconnect帐户->我的应用程序->单击“+”按钮->新iOS应用程序->填写必要细节->填写完所有细节后,进入您的应用程序->单击“更多”按钮->在AppStore上查看->它将重定向您到您的应用程序URL,这将是通用的,并且在您的应用程序上线后将保持不变。

这是我的链接,它显示为美国,现在我不确定它是否是全球通用的。 - Luis Felipe
是的,这是通用的,你可以继续操作。目前你还没有经过批准的二进制文件,因此显示为该项不可用。 - Krunal Darji

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