iOS 10.3 開(kāi)始請(qǐng)求應(yīng)用商店評(píng)分的正確姿勢(shì):SKStoreReviewController

App 開(kāi)發(fā)者的最主要目標(biāo)之一就是獲得更多曝光,并且從用戶(hù)那里接收反饋從而改進(jìn) app,以便鼓勵(lì)其他用戶(hù)嘗試使用。多年以來(lái),開(kāi)發(fā)者都在使用第三方方法來(lái)建議用戶(hù)去商店打分,大部分是基于用戶(hù)使用 app 的時(shí)長(zhǎng)和頻率。但使用這些第三方方法會(huì)導(dǎo)致體驗(yàn)不夠理想。通常用戶(hù)會(huì)被送到 AppStore app 來(lái)撰寫(xiě)評(píng)價(jià),甚至用戶(hù)還要手動(dòng)選擇“評(píng)論”標(biāo)簽頁(yè)才能開(kāi)始寫(xiě)評(píng)價(jià)。

在 iOS 10.3 的更新里,Apple 在 iOS 平臺(tái)上做了幾個(gè)重要改動(dòng),最受開(kāi)發(fā)者歡迎的就是向用戶(hù)詢(xún)問(wèn)評(píng)分的官方方式。所以從 10.3 開(kāi)始,我們可以用 StoreKit 來(lái)詢(xún)問(wèn)用戶(hù)評(píng)分,并且 StoreKit 會(huì)替我們處理剩下的工作??梢钥?a target="_blank" rel="nofollow">這里的文檔。理論上來(lái)說(shuō),開(kāi)發(fā)者只要加一行代碼即可請(qǐng)求評(píng)分,但還有幾點(diǎn)值得注意。

根據(jù)文檔所述,請(qǐng)求評(píng)分函數(shù)使用了私有方法來(lái)分析當(dāng)前是否是向用戶(hù)詢(xún)問(wèn)評(píng)分的好時(shí)機(jī),所以 Apple 強(qiáng)烈建議開(kāi)發(fā)者不要在相應(yīng)用戶(hù)行為時(shí)調(diào)用此方法。例如,如果你把請(qǐng)求評(píng)分放在按鈕觸摸的回調(diào)函數(shù)里,但此時(shí) iOS 可能決定不顯示評(píng)分,所以用戶(hù)就會(huì)認(rèn)為 app 的功能出現(xiàn)了問(wèn)題。另一方面,也不要太早讓用戶(hù)評(píng)分,最好等 app 運(yùn)行幾次之后再詢(xún)問(wèn)評(píng)分。盡管我們并不了解 Apple 的算法,但我們知道此方法的行為模式,所以最好在確定用戶(hù)處于合適的時(shí)間時(shí)再進(jìn)行詢(xún)問(wèn)。

注意:在開(kāi)發(fā)時(shí),所有評(píng)分請(qǐng)求都會(huì)通過(guò),也就是說(shuō)每次請(qǐng)求評(píng)分,評(píng)分對(duì)話(huà)框都會(huì)顯示,但無(wú)法提交評(píng)分。在 Testflight 中,請(qǐng)求都不會(huì)被通過(guò),所以如果 Testflight 測(cè)試時(shí)評(píng)分對(duì)話(huà)框沒(méi)有正確顯示,不要慌張。app 上架后,就會(huì)使用 Apple 方法在合適的時(shí)間顯示對(duì)話(huà)框了。

不多說(shuō)了,下面是用 Swift 實(shí)現(xiàn)請(qǐng)求評(píng)分的方式。

  1. 首先,import StoreKit
import StoreKit
  1. 現(xiàn)在就可以如下詢(xún)問(wèn)評(píng)分了
SKStoreReviewController.requestReview()

就這么簡(jiǎn)單!比想象中容易多了吧!

如果你想支持老的 iOS 版本,最好這么做:

if #available(iOS 10.3, *) {
    SKStoreReviewController.requestReview()
           
} else {
    // 退回老的版本
    // 嘗試手寫(xiě)或用第三方方法。
}

一步步來(lái)

在我看來(lái),實(shí)現(xiàn) RequestReview 的正確姿勢(shì)是:

  1. 在項(xiàng)目里創(chuàng)建新的 Swift 文件
  2. 導(dǎo)入所需框架
import Foundation
import StoreKit
  1. 定義設(shè)置變量
let runIncrementerSetting = "numberOfRuns"  // 用于存儲(chǔ)運(yùn)行次數(shù)的 UserDefauls 字典鍵
let minimumRunCount = 5 // 詢(xún)問(wèn)評(píng)分的最少運(yùn)行次數(shù)       
  1. 然后寫(xiě)一個(gè)運(yùn)行計(jì)數(shù)器,功能就是在 UserDefaults 存儲(chǔ)運(yùn)行次數(shù)。此計(jì)數(shù)器需要兩個(gè)函數(shù)。一個(gè)從 UserDefaults 里讀取,另一個(gè)將其加一并存回 UserDefaults。
func incrementAppRuns() {                   // app 運(yùn)行次數(shù)計(jì)數(shù)器??梢栽?App Delegate 中調(diào)用此方法
    
    let usD = UserDefaults()
    let runs = getRunCounts() + 1
    usD.setValuesForKeys([runIncrementerSetting: runs])
    usD.synchronize()
    
}
func getRunCounts () -> Int {               // 從 UserDefaults 里讀取運(yùn)行次數(shù)并返回。
    
    let usD = UserDefaults()
    let savedRuns = usD.value(forKey: runIncrementerSetting)
    
    var runs = 0
    if (savedRuns != nil) {
        
        runs = savedRuns as! Int
    }
    
    print("已運(yùn)行\(zhòng)(runs)次")
    return runs
    
}
  1. 下一步是用于請(qǐng)求評(píng)分的函數(shù)。我們需要在此函數(shù)里考慮兩個(gè)因素。首先,是否有足夠的運(yùn)行次數(shù)來(lái)詢(xún)問(wèn)評(píng)分。其次,檢查是否是 iOS10.3 及以上版本,這樣我們才能調(diào)用此函數(shù)。
func showReview() {
    
    let runs = getRunCounts()
    print("顯示評(píng)分")
    
    if (runs > minimumRunCount) {
        
        if #available(iOS 10.3, *) {
            print("已請(qǐng)求評(píng)分")
            SKStoreReviewController.requestReview()
            
        } else {
            // 回到老版本
        }
        
    } else {
        
        print("請(qǐng)求評(píng)分所需的運(yùn)行次數(shù)不足!")
        
    }
    
}
  1. 下一步就是從 App Delegate 里調(diào)用運(yùn)行計(jì)數(shù)器。所以在 app 的 didFinishLaunchingWithOptions 函數(shù)里添加如下內(nèi)容:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        incrementAppRuns()
        return true
 }
  1. 最后一步是在合適的時(shí)間里調(diào)用 showReview()。我的建議是在用戶(hù)完成 app 中某項(xiàng)主要工作后調(diào)用此函數(shù)。例如你在開(kāi)發(fā)游戲,向用戶(hù)展示分?jǐn)?shù)時(shí)就可以調(diào)用此函數(shù)。記住如果要把它放在按鈕回調(diào)里,就要和其它任務(wù)一起才行。例如,在 Shuffle 里面,我把 showReview() 函數(shù)放在壁紙的下載按鈕中。所以用戶(hù)下載完壁紙后,如果 requestReview 決定顯示評(píng)分,就會(huì)顯示在下載完成的壁紙上。這樣就可以確保按鈕總是能夠正確工作,同時(shí)還能確保用戶(hù)在 app 中完成主要任務(wù)時(shí)可以顯示請(qǐng)求評(píng)分頁(yè)面。
showReview()

好啦!現(xiàn)在可以運(yùn)行你的 app 來(lái)看看效果。

需要的話(huà),可以從 GitHub 上下載我的腳本,包含了此教程中的 1-5 步。點(diǎn)擊下載代碼。

歡迎在下面評(píng)論。編程愉快!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 版本記錄 前言 StoreKit框架,支持應(yīng)用內(nèi)購(gòu)買(mǎi)和與App Store的互動(dòng)。接下來(lái)幾篇我們就一起看一下這個(gè)框...
    刀客傳奇閱讀 3,022評(píng)論 0 9
  • 評(píng)分與評(píng)論 關(guān)于評(píng)分與評(píng)論,相信不僅僅是開(kāi)發(fā)者,甚至任何一個(gè) iPhone 用戶(hù)都不陌生。 因?yàn)楹芏?App 在使...
    Lision閱讀 2,630評(píng)論 0 7
  • 今天我們上體育課又是跳繩了,我們一星期有好幾節(jié)體育課,上體育課就是為了讓我們鍛煉身體,我們只有身體好才能不生病,天...
    姚姚乖乖寶閱讀 165評(píng)論 0 1
  • 陽(yáng)光在最后一顆白楊下流連 前面的兄弟 或戰(zhàn)死沙場(chǎng) 或倉(cāng)惶逃離 空氣中雨滴不為所動(dòng) 喉嚨里最后的聲音進(jìn)退不得 星空不...
    陳阿臣閱讀 201評(píng)論 0 0
  • 清早,聽(tīng)著歌漫步、看旭日東升 慢慢出行、漫無(wú)目的 擇一佳地 停下來(lái),仔細(xì)陳釀 不知覺(jué)間、許久許久過(guò)去 我也就轉(zhuǎn)頭...
    鄉(xiāng)里白頭翁閱讀 161評(píng)論 0 3

友情鏈接更多精彩內(nèi)容