StoreKit框架詳細(xì)解析(二) —— 請(qǐng)求應(yīng)用評(píng)級(jí)和評(píng)論(一)

版本記錄

版本號(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)秀資源:

后記

本篇主要講述了請(qǐng)求應(yīng)用評(píng)級(jí)和評(píng)論,感興趣的給個(gè)贊或者關(guān)注~~~

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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