Nic Lin's Blog

喜歡在地上滾的工程師

[ReactNative] 如何在 iOS APP 上主動要求用戶評分

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 還是會幫你決定可以實際顯示的情況就是囉

comments powered by Disqus