[App開發分享]整合 In-App Review API

Kevin Chung
5 min readAug 26, 2020

--

這兩天登入 Google Play Console 時發現它提醒已經開始提供 In-App Review API 了,這個 API 是用來提供更好的使用者體驗的,不用離開原本的 app 跑到 Google Play 去給評與留言,避免有些人因此中途離開而失去了解使用者意見的機會了。

圖片來源 https://developer.android.com/images/google/play/in-app-review/iar-flow.jpg

這樣的設計還蠻方便而且整合一點也不困難,剛好有個空檔來研究順便紀錄。

官方說明文件在這裡。要執行這個API 的裝置,需求是執行 Android 5.0 以上且已安裝 Google Play 的手機或平板。

這個 API 並非是獨立的而是內含在 Play Core Library 中,而且是 1.8.0 以上版本才有包含這個功能,如果已經有使用這 library 了,記得檢查一下版本是否符合。

在 module level 的 build.gradle 中加入 play core library 的 dependency

dependencies {
...
implementation 'com.google.android.play:core:1.8.0'
...
}

整合的部份非常簡單,只要在需要跳出 In-App Review 對話窗的地方先加入以下的程式,這段程式主要的目的是取得 ReviewInfo 這個物件。

但由於這個物件的取得是非同步的,而且只會在一定的時間內有效,所以建議在有確定要執行 review 流程之前先執行,並把結果先 cache 起來。


ReviewInfo mReviewInfo = null;
// 先建立 ReviewManager 的物件
ReviewManager manager = ReviewManagerFactory.create(this);
// 要求建立 ReviewFlow,這個主要是要先取得 ReviewInfo 這個回傳物件
Task<ReviewInfo> request = manager.requestReviewFlow();
request.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
// 成功執行後,將結果存到 global 變數中
mReviewInfo = task.getResult();
}
});

要開始顯示 Review 畫面時,就可以呼叫 launchReviewFlow() 這個函數來達成。

// 呼叫 lanuchReviewFlow,並使用之前取得的 ReviewInfo 當作參數傳入
Task<Void> flow = manager.launchReviewFlow(activity, mReviewInfo);
flow.addOnCompleteListener(task -> {
// 這個 task 將不會回傳任何結果,這裡只是通知已經執行完畢
});

這裡有個需要注意的重點是,不能假設這個函數並一定會成功顯示 Review 畫面,主要是因為 Google 為了避免這個 API 被過度使用而干擾使用者,呼叫是有 quota 的限制,雖然文件沒有提到明確的限制,但是有建議不要使用按鈕的方式來開始 Review 流程,避免在使用者點了以後卻沒有任何東西顯示,反而看起來很奇怪。

程式整合的部份非常容易,接下來要測試看看能不能成功執行起來,文件提供了兩種測試方法,內部測試內部應用程式分享這兩種。

內部測試的限制比較多,所以不推薦,我使用的是內部應用程式分享的方式來測試。

首先將整合 In-App Review API 的 apk 或 bundle 透過 https://play.google.com/console/internal-app-sharing 上傳測試版本,不需要 sign 過的 debug 版即可。

上傳成功後,點擊複製圖示把連結複製起來,然後在 emulator 上開啟瀏覽器,貼上連結輸入,順利的話就會導向 Google Play 並出現以下的畫面。

如果你的 Google Play 之前沒有啟用開發人員設定,而且開啟 “內部應用程式分享”的話, 要記得到設定中,一直點擊版本就會出現這個選項。

安裝測試版本後,順利的話就會看到 In-App Review 的畫面了,不過因為這是個測試功能,所以提交按鈕是反白無法點擊的。

--

--

Responses (1)