版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2018.12.18 星期二 |
前言
StoreKit框架,支持應(yīng)用內(nèi)購(gòu)買和與App Store的互動(dòng)。接下來(lái)幾篇我們就一起看一下這個(gè)框架。感興趣的看下面幾篇文章。
1. StoreKit框架詳細(xì)解析(一) —— 基本概覽(一)
Why Do Ratings and Reviews Matter? - 為什么評(píng)級(jí)和評(píng)論很重要?
首先看下寫作環(huán)境
Swift 4.2, iOS 12, Xcode 10
在本教程中,您將學(xué)習(xí)如何使用SKStoreReviewController和其他可用API在iOS應(yīng)用程序中請(qǐng)求應(yīng)用程序評(píng)級(jí)和評(píng)論。
在本教程中,您將學(xué)習(xí)如何在iOS應(yīng)用中請(qǐng)求評(píng)分和評(píng)論。從iOS 10.3開始,Apple推出了新的SKStoreReviewController類來(lái)標(biāo)準(zhǔn)化這種交互。在本教程中,您將學(xué)習(xí)如何正確實(shí)現(xiàn)此API,以及了解如何最大限度地從您的快樂(lè)用戶那里獲得好評(píng)的機(jī)會(huì)。
iOS App Store上有超過(guò)一百萬(wàn)個(gè)應(yīng)用程序,在任何給定的應(yīng)用程序類別中都有數(shù)百或數(shù)千個(gè)應(yīng)用程序。用戶越來(lái)越難以知道應(yīng)用程序是否值得下載和嘗試。
在做出購(gòu)買決定時(shí),用戶也習(xí)慣于依賴評(píng)級(jí)和評(píng)論,無(wú)論是在亞馬遜上購(gòu)買產(chǎn)品,尋找餐館,預(yù)訂酒店還是看電影。因此,在下載應(yīng)用程序之前,潛在用戶可以訪問(wèn)所需的信息至關(guān)重要。高評(píng)級(jí)和大量評(píng)論也會(huì)給這些潛在用戶留下積極印象,并增加他們安裝您應(yīng)用的可能性。
評(píng)級(jí)和評(píng)論有助于提高您在App Store上的排名的另一個(gè)方面。根據(jù)Forrester的一項(xiàng)研究study,63%的應(yīng)用程序是通過(guò)App Store搜索發(fā)現(xiàn)的。你如何讓你的應(yīng)用程序排名更高,并在如此擁擠的市場(chǎng)中脫穎而出? App Radar所做的研究Research表明,評(píng)級(jí)的數(shù)量和平均值以及評(píng)論數(shù)量對(duì)您的應(yīng)用在App Store搜索結(jié)果中的排名有很大影響。
為了提高應(yīng)用在App Store中的可發(fā)現(xiàn)性,以及在應(yīng)用到達(dá)應(yīng)用頁(yè)面后增加安裝應(yīng)用的用戶數(shù)量,重要的是您的應(yīng)用會(huì)有大量的評(píng)分和評(píng)價(jià)。
在開始之前,您可能仍然想知道內(nèi)置提示要求用戶為您的應(yīng)用評(píng)分的重要性?為了向您展示它的有效性,讓我們來(lái)看看App Store上的另一個(gè)流行應(yīng)用程序 - Instagram。

正如你在上圖中看到的那樣,2017年8月發(fā)生了一些事情,但它有什么可能呢? 來(lái)自Medium post from Clément Delangue指出,Instagram此時(shí)將SKStoreReviewController添加到其應(yīng)用程序中 - 只需看看它的影響!
接下來(lái),您將看到如何與用戶實(shí)現(xiàn)類似的結(jié)果。
開始
在本教程中,您將獲取一個(gè)應(yīng)用程序,該應(yīng)用程序提供可搜索的鳥類聲音列表,并使用SKStoreReviewController提示用戶對(duì)應(yīng)用程序進(jìn)行評(píng)級(jí)。
要開始使用,打開開始項(xiàng)目,導(dǎo)航到Chirper-Starter文件夾并在Xcode中打開Chirper.xcodeproj。 構(gòu)建并運(yùn)行應(yīng)用程序,您將看到以下內(nèi)容:

Requesting App Ratings - 申請(qǐng)應(yīng)用評(píng)級(jí)
通過(guò)向項(xiàng)目添加新文件開始。 右鍵單擊項(xiàng)目導(dǎo)航器中的黃色Chirper文件夾,然后選擇New File ...,從顯示的選項(xiàng)中選擇Swift File,單擊Next并將其命名為AppStoreReviewManager.swift。
將以下內(nèi)容粘貼到新創(chuàng)建的文件中:
import StoreKit
enum AppStoreReviewManager {
static func requestReviewIfAppropriate() {
}
}
你在這里做了一些重要的事情:
- 1) 導(dǎo)入
StoreKit框架。 StoreKit允許您執(zhí)行與Apple商店相關(guān)的許多操作,例如管理應(yīng)用內(nèi)購(gòu)買,檢查Apple Music功能或在應(yīng)用內(nèi)顯示產(chǎn)品推薦。 但是,在本教程中,您將使用它來(lái)觸發(fā)評(píng)分提示。 - 2) 創(chuàng)建一個(gè)名為
AppStoreReviewManager的枚舉。 您將使用它作為命名空間來(lái)包裝其中的靜態(tài)函數(shù)和屬性。 枚舉對(duì)此很有用,因?yàn)槿绻鼈儧](méi)有聲明任何情況,就無(wú)法初始化它們。
接下來(lái),您需要讓StoreKit向用戶請(qǐng)求審核。 您可以使用靜態(tài)SKStoreReviewController.requestReview()來(lái)完成此操作。 將以下內(nèi)容添加到requestReviewIfAppropriate():
SKStoreReviewController.requestReview()
為了測(cè)試它是否有效,請(qǐng)?jiān)谟脩舨シ怕曇魰r(shí)調(diào)用此方法。 打開BirdSoundTableViewCell.swift并在startPlaying(with:)結(jié)束時(shí)調(diào)用你的新函數(shù):
AppStoreReviewManager.requestReviewIfAppropriate()
構(gòu)建并運(yùn)行應(yīng)用程序。 點(diǎn)擊其中一個(gè)聲音上的Play按鈕。 你會(huì)看到一個(gè)提示,要求你給應(yīng)用評(píng)分!

很好! 只需一行代碼,您就可以請(qǐng)求用戶為您的應(yīng)用評(píng)分!

注意:由于您處于開發(fā)模式,
Submit按鈕將顯示為灰色。 對(duì)于通過(guò)App Store使用您的應(yīng)用的用戶,它就會(huì)被啟用。

SKStoreReviewController Limitations - SKStoreReviewController限制
Apple確實(shí)對(duì)您使用此API的方式施加了某些限制:
- 無(wú)論您請(qǐng)求評(píng)分提示多少次,系統(tǒng)都會(huì)在365天內(nèi)最多顯示三次提示。
- 調(diào)用方法并不能保證提示會(huì)顯示。 這意味著響應(yīng)按鈕點(diǎn)擊或其他用戶操作調(diào)用API是不合適的。
- 系統(tǒng)未必顯示與當(dāng)前
bundle version匹配的應(yīng)用程序包版本的提示。 這可確保不要求用戶多次review相同版本的應(yīng)用。
注意:根據(jù)您運(yùn)行的構(gòu)建類型,審閱提示的行為會(huì)有所不同:
- 開發(fā):每次請(qǐng)求提示時(shí)顯示。
- 測(cè)試飛行:從不顯示提示。
- App Store:顯示上述限制。
Finding the Right Time to Request a Rating - 找到申請(qǐng)?jiān)u級(jí)的合適時(shí)間
選擇顯示此提示的位置和時(shí)間對(duì)于您使用此API的成功至關(guān)重要。
在請(qǐng)求應(yīng)用評(píng)級(jí)時(shí),系統(tǒng)向用戶顯示提示的那一刻可能會(huì)對(duì)結(jié)果產(chǎn)生很大影響。例如,當(dāng)用戶處于任務(wù)中間時(shí),您不應(yīng)要求進(jìn)行評(píng)級(jí)。此外,如果您跟蹤應(yīng)用程序崩潰,您應(yīng)該確保在請(qǐng)求評(píng)級(jí)之前等待一天或更長(zhǎng)時(shí)間。
相反,當(dāng)用戶滿意時(shí),您應(yīng)該努力詢問(wèn)評(píng)級(jí)。例如,在用戶重復(fù)返回您的應(yīng)用程序,完成游戲級(jí)別或完成視頻通話等后,無(wú)論您選擇跟蹤并觸發(fā)評(píng)級(jí)提示,都要確保用戶有機(jī)會(huì)體驗(yàn)應(yīng)用程序的全部?jī)r(jià)值主張 - 這樣,可能產(chǎn)生更積極的評(píng)論結(jié)果。
注意:按照上述建議后,您可能想知道為何在播放錄音時(shí)觸發(fā)提示。它不會(huì)只是惹惱用戶并導(dǎo)致評(píng)級(jí)不佳嗎?你是對(duì)的;在播放結(jié)束時(shí)觸發(fā)提示會(huì)更合適。要使本教程中的測(cè)試變得簡(jiǎn)單,您可以將其保留在原來(lái)的位置,但是,如果您真的想要,可以將調(diào)用移到
BirdSoundTableViewCell.didPlayToEndTime(_ :)。
Adding Review Request Logic in the Sample App - 在示例應(yīng)用程序中添加Review請(qǐng)求邏輯
在示例應(yīng)用程序中,您將使用一種策略,一旦他們至少播放了三個(gè)錄音,您將要求用戶進(jìn)行評(píng)級(jí)。 這個(gè)數(shù)字是故意低的,所以你可以測(cè)試這個(gè)概念。 在真實(shí)世界的應(yīng)用程序中,您可能希望將此數(shù)字保持在更高的類似用戶操作。
打開AppStoreReviewManager.swift并使用以下內(nèi)容替換requestReviewIfAppropriate():
// 1.
static let minimumReviewWorthyActionCount = 3
static func requestReviewIfAppropriate() {
let defaults = UserDefaults.standard
let bundle = Bundle.main
// 2.
var actionCount = defaults.integer(forKey: .reviewWorthyActionCount)
// 3.
actionCount += 1
// 4.
defaults.set(actionCount, forKey: .reviewWorthyActionCount)
// 5.
guard actionCount >= minimumReviewWorthyActionCount else {
return
}
// 6.
let bundleVersionKey = kCFBundleVersionKey as String
let currentVersion = bundle.object(forInfoDictionaryKey: bundleVersionKey) as? String
let lastVersion = defaults.string(forKey: .lastReviewRequestAppVersion)
// 7.
guard lastVersion == nil || lastVersion != currentVersion else {
return
}
// 8.
SKStoreReviewController.requestReview()
// 9.
defaults.set(0, forKey: .reviewWorthyActionCount)
defaults.set(currentVersion, forKey: .lastReviewRequestAppVersion)
}
下面進(jìn)行詳細(xì)分解:
- 1) 聲明一個(gè)常量值,以指定用戶必須執(zhí)行具有
review功能的操作的次數(shù)。 - 2) 從
User Defaults中讀取用戶自上次請(qǐng)求的review以來(lái)執(zhí)行的當(dāng)前操作數(shù)。
注意:此示例項(xiàng)目使用
UserDefaults上的擴(kuò)展來(lái)消除在訪問(wèn)值時(shí)使用“字符串”鍵入的鍵的需要。這是一個(gè)很好的做法,以避免意外錯(cuò)誤鍵入一個(gè)鍵,因?yàn)樗赡軙?huì)導(dǎo)致您的應(yīng)用程序中很難找到錯(cuò)誤。您可以在UserDefaults + Key.swift中找到此擴(kuò)展程序。
- 3) 增加從
User Defaults讀取的操作計(jì)數(shù)值。 - 4) 將遞增計(jì)數(shù)設(shè)置回
User Defaults,以便下次觸發(fā)該功能。 - 5) 檢查操作計(jì)數(shù)是否已超過(guò)觸發(fā)review的最小閾值。如果沒(méi)有,該函數(shù)現(xiàn)在將返回。
- 6) 閱讀當(dāng)前
bundle version以及上次提示期間使用的最后一個(gè)bundle version(如果有)。 - 7) 在繼續(xù)之前,請(qǐng)檢查這是否是此版本應(yīng)用的第一個(gè)請(qǐng)求。
- 8) 請(qǐng)求
StoreKit要求review。 - 9) 重置操作計(jì)數(shù)并將當(dāng)前版本存儲(chǔ)在
User Defaults中,以便您不再在此版本的應(yīng)用程序上請(qǐng)求。
Putting It All Together
構(gòu)建并運(yùn)行應(yīng)用程序。 這一次,如果您播放聲音,它將不會(huì)立即顯示review提示。 再播放兩次聲音,只有這樣,應(yīng)用程序才會(huì)顯示評(píng)級(jí)提示。 您還會(huì)注意到,無(wú)論您播放多少條錄音,都不會(huì)再次顯示提示。
單擊項(xiàng)目導(dǎo)航器中的Chirper項(xiàng)目圖標(biāo),然后再單擊提供目標(biāo)列表下的Chirper。 更新Build字段中的值以更新應(yīng)用程序Info.plist中的CFBundleVersion值。

構(gòu)建并運(yùn)行應(yīng)用程序。 再次,播放更多錄音。 一旦.reviewWorthyActionCount值再次超過(guò)3,則步驟7中的版本檢查將成功,并且由于您已更改了bundle version,系統(tǒng)會(huì)再次提示您為新版本的應(yīng)用程序提供另一個(gè)評(píng)級(jí)。
Manually Requesting a Review - 手動(dòng)請(qǐng)求Review
因此,現(xiàn)在您知道如何在使用應(yīng)用程序時(shí)提示用戶提供評(píng)級(jí),您將繼續(xù)探索如何讓用戶手動(dòng)review應(yīng)用程序,而無(wú)需等待AppStoreReviewManager決定是否應(yīng)該。
1. App Store Product Page URL - App Store產(chǎn)品頁(yè)面URL
首先,您需要知道App Store上的應(yīng)用程序的URL。 如果您的應(yīng)用已經(jīng)上線,那么這很容易;您可以在Google中搜索自己的應(yīng)用并復(fù)制網(wǎng)址。 或者,您可以在App Store上找到它并點(diǎn)擊產(chǎn)品頁(yè)面上的...按鈕以顯示Share App ...選項(xiàng),該選項(xiàng)允許您將鏈接復(fù)制到剪貼板。

如果您仍在構(gòu)建應(yīng)用程序的第一個(gè)版本但尚未在App Store上發(fā)布,請(qǐng)不要擔(dān)心;只要您已經(jīng)使用App Store Connect設(shè)置了應(yīng)用程序,那么在將最終提交到App Store Review之前,您仍然可以獲得該鏈接。 要找到此鏈接:
- 1) 登錄App Store Connect。
- 2) 選擇
My Apps。 - 3) 單擊
App Information中的應(yīng)用程序,然后您將在該頁(yè)面底部找到指向View on App Store的鏈接。
您最終獲得的URL將如下所示:
https://itunes.apple.com/us/app/rwdevcon-conference/id958625272?mt=8
在繼續(xù)之前,您將稍微清理URL,因?yàn)槟承┙M件不是必需的,并且可能會(huì)隨時(shí)間而變化。 您可以從URL中排除國(guó)家/地區(qū)代碼,應(yīng)用名稱和查詢參數(shù),以便上面的示例將變?yōu)橐韵率纠?/p>
https://itunes.apple.com/app/id958625272
上面的確切URL已包含在示例項(xiàng)目中的SettingsViewController.swift中。 如果您想替換自己的應(yīng)用程序的URL,請(qǐng)繼續(xù)更改productURL常量,否則保持原樣并且您將查看RWDevCon應(yīng)用程序。
Writing a Review - 寫評(píng)論
現(xiàn)在您有了應(yīng)用程序的產(chǎn)品URL,您可以使用它來(lái)直接將用戶帶到App Store中的Write a Review操作。 您所要做的就是將一個(gè)帶有name操作和值write-review的查詢參數(shù)附加到product page URL,然后,在iOS設(shè)備上打開它直接進(jìn)入App Store應(yīng)用程序。
將此功能添加到示例應(yīng)用程序!
打開SettingsViewController.swift并將以下代碼添加到writeReview():
// 1.
var components = URLComponents(url: productURL, resolvingAgainstBaseURL: false)
// 2.
components?.queryItems = [
URLQueryItem(name: "action", value: "write-review")
]
// 3.
guard let writeReviewURL = components?.url else {
return
}
// 4.
UIApplication.shared.open(writeReviewURL)
當(dāng)用戶點(diǎn)擊示例應(yīng)用程序的Settings屏幕中的Write a Review單元格時(shí),上面的代碼將運(yùn)行。 細(xì)看下代碼:
- 1) 使用您之前找到的產(chǎn)品頁(yè)面URL創(chuàng)建
URLComponents實(shí)例。 URLComponents是一個(gè)結(jié)構(gòu),可以幫助以安全的方式解析和構(gòu)造URL對(duì)象。 使用URLComponents而不是僅僅將字符串附加在一起通常是一種好習(xí)慣。 - 2) 將查詢項(xiàng)數(shù)組設(shè)置為包含具有名稱和值的單個(gè)項(xiàng),以匹配將觸發(fā)
App Store打開提示的要求。 - 3) 根據(jù)您在上一步中修改的組件創(chuàng)建URL對(duì)象。
- 4) 請(qǐng)求共享的
UIApplication實(shí)例打開給定的URL。
注意:由于iOS模擬器不包含App Store應(yīng)用程序,因此您必須在物理設(shè)備上構(gòu)建并運(yùn)行示例項(xiàng)目才能嘗試此操作。 為此,您需要選擇一個(gè)
Development Team并更改項(xiàng)目設(shè)置中的Bundle Identifier。
在您的設(shè)備上構(gòu)建并運(yùn)行應(yīng)用程序。 點(diǎn)擊導(dǎo)航欄中的Settings圖標(biāo),然后點(diǎn)擊Write a Review。 您將從示例應(yīng)用程序中進(jìn)入App Store,您將看到以下屏幕:

Sharing Your App - 分享您的應(yīng)用
當(dāng)用戶真正享受您的應(yīng)用時(shí),他們可能希望與朋友和家人分享他們的豐富體驗(yàn)。 由于目前沒(méi)有一種易于發(fā)現(xiàn)的方式直接與您的應(yīng)用分享鏈接,并且您已經(jīng)擁有指向應(yīng)用產(chǎn)品頁(yè)面的鏈接,因此您也可以為用戶提供一種方便的方式來(lái)共享鏈接。 畢竟,你擁有的用戶越多,你就越有樂(lè)趣!
您將為此稱為UIActivityViewController使用專用API。 為此,請(qǐng)打開SettingsViewController.swift并將以下代碼添加到share():
// 1.
let activityViewController = UIActivityViewController(
activityItems: [productURL],
applicationActivities: nil)
// 2.
present(activityViewController, animated: true, completion: nil)
UIActivityViewController通過(guò)接受一系列activity items來(lái)工作。 然后,它將顯示一個(gè)系統(tǒng)界面,其中包含啟動(dòng)設(shè)備上安裝的其他應(yīng)用程序的選項(xiàng),這些應(yīng)用程序已注冊(cè)了對(duì)任何提供的活動(dòng)項(xiàng)類型的支持。
在上面的代碼中,您提供了表示App Store產(chǎn)品頁(yè)面的URL對(duì)象,然后以模態(tài)方式顯示活動(dòng)視圖控制器。 然后,任何可以接受文本或鏈接的應(yīng)用程序或操作都會(huì)呈現(xiàn)給您,以便您可以隨意共享鏈接! 如果您愿意,甚至可以AirDrop到另一臺(tái)設(shè)備立即打開App Store。
將項(xiàng)目構(gòu)建并運(yùn)行到物理設(shè)備或模擬器上(模擬器將顯示更少的選項(xiàng)),您應(yīng)該看到如下內(nèi)容:

這些是提高應(yīng)用評(píng)級(jí)的其他方法,讓快樂(lè)的用戶宣傳它!
您已經(jīng)了解了有關(guān)為您的應(yīng)用請(qǐng)求應(yīng)用評(píng)級(jí)和評(píng)論以及如何在合適的時(shí)間執(zhí)行此操作的所有信息。 為了更進(jìn)一步,在您下次發(fā)布的更新中將SKStoreReviewController添加到您的應(yīng)用程序。 希望您會(huì)看到評(píng)論和評(píng)分?jǐn)?shù)量的增加以及App Store上應(yīng)用的更多流量。
要了解有關(guān)此主題的更多信息,請(qǐng)參閱以下其他一些優(yōu)秀資源:
- Requesting App Store Reviews
- Best Practices and What’s New with In-App Purchases
- App Store: Ratings, Reviews, and Responses
后記
本篇主要講述了請(qǐng)求應(yīng)用評(píng)級(jí)和評(píng)論,感興趣的給個(gè)贊或者關(guān)注~~~

