iOS 在 10.3 版本之後引入 SKStoreReviewController
來做到更好的評分 UI 交互,也就是說你不必讓使用者跳脫應用程式導向 app store 再進行評分。
可以以一個 pop up 給用戶在應用程式內進行評分
評分和評論的重要性
在 iOS 商店有超過一百萬個應用程式,用戶難已知道這些 App 是否值得下載和試用。
在現在這個人人都有網路的情況下,無論現在尋找餐廳、外賣、還是預定酒店等等,用戶在做出購買決定時都會習慣依靠評價和評論,因為用戶在接觸你以前這是他們唯一能知道的訊息,高評分和高評論也會給潛在用戶留下好的印象,進一步增加他們安裝你的 App 可能性。
評分和評論的幫助還有一部份是在 App Store 上提高排名,根據 App Radar 的研究表示,評分的平均值及評論數量,對排名有一定程度的影響。
在 2017 年 8 月時,有趣的是 Instagram 應該是在這個時候使用了新的 API 來主動要求用戶評分,所以當時才推出一個禮拜的版本竟然有了 200 萬用戶評分
那麼要在什麼時機請用戶評分呢?
SKStoreReviewController
的限制
這裡很有趣,跳出 popup 的評分提示並不是你想跳幾次就跳幾次。
- 無論你請求提示多少次,依目前限制是 365 天內最多 3 次
- 直接 call 該 API 並「不能保證」會直接顯示,這也就是說功能不建議綁訂在按鈕或讓用戶操作來調用
- 系統版本建議綁定彈跳評分,可以確保用戶不會在同一個版本內看到多次的彈跳視窗
什麼時候才合適向用戶要求評分
前陣子我寫了個 Side project,有趣的是在 iOS 上我們有總用戶數將近 70% 的部分,但評分數量卻只有 50 個,而且保持了將近三個月都沒有在新增過。
於是在這次更新版本的部分,加上了主動式要求評分的功能,但合適的時機是什麼呢?
這裡要注意的是,如果 App 太爛或是在不對的時機跳出,很有可能會惹惱用戶拿到爛評分 XD
在這邊我的策略是,每次用戶開啟 App 時,Count 就 + 1,並且持久化的儲存在 local storage 內,當 Count 超過 5 次,表示用戶已經對我們的 App 有一定程度的熟悉,這時候就可以來詢問用戶可不可以給我們個評價囉,為了避免過度彈跳,所以我另外記錄一個版本最多跳三次。
這裡用 React Native 進行實作,主要會是 2 個套件
- 持久化本地儲存的
async-storage
- 彈跳評分的
react-native-store-review
import AsyncStorage from "@react-native-community/async-storage";
import * as StoreReview from 'react-native-store-review';
import Config from "../config/config.env"
// 啟動時才 call 這個 function,每次都增加進度,直到可以顯示就跳顯示
// actionCount 觸發計算
// versionCount 該版本跳過幾次
export async function requestReviewIfAppropriate() {
if (!StoreReview.isAvailable) {
return
}
const appVersion = Config.APP_VERSION
const cacheKey = "requestReview"
const defaultReviewStoreJSON = JSON.stringify({ version: appVersion, actionCount: 0, versionCount: 0 })
try {
const reviewStoreJSON = await AsyncStorage.getItem(cacheKey) || defaultReviewStoreJSON
const reviewStore = JSON.parse(reviewStoreJSON)
const { version, actionCount, versionCount } = reviewStore
let newActionCount = actionCount + 1
let newVersionCount = versionCount
if (version == appVersion && actionCount >= 5 && versionCount <= 3) {
StoreReview.requestReview();
newActionCount = 0
newVersionCount += 1
} else {
newActionCount += 1
}
AsyncStorage.setItem(cacheKey, JSON.stringify({ version: appVersion, actionCount: newActionCount, versionCount: newVersionCount}))
} catch (error) {
console.log(error)
}
}
接著只要在啟動的地方 call requestReviewIfAppropriate()
就可以了
執行成果
- 未執行前,已經 2 個月以上沒有用戶給予評分,評分總數停留在 48 個。
- 執行後, 2 個禮拜內增加了 140 個評分。
實際上 production 後發現,一個版本不會真的跳三次,就像上面提到要注意的部分,App Store 還是會幫你決定可以實際顯示的情況就是囉