[App開發分享]整合 In-App Review API
這兩天登入 Google Play Console 時發現它提醒已經開始提供 In-App Review API 了,這個 API 是用來提供更好的使用者體驗的,不用離開原本的 app 跑到 Google Play 去給評與留言,避免有些人因此中途離開而失去了解使用者意見的機會了。
這樣的設計還蠻方便而且整合一點也不困難,剛好有個空檔來研究順便紀錄。
官方說明文件在這裡。要執行這個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 的畫面了,不過因為這是個測試功能,所以提交按鈕是反白無法點擊的。