任何人都希望自己得到别人的肯定,我们开发者也不例外。通常我们的做法是在应用内预置一个弹窗,在合适的时机弹出,引导应用去应用商店评价。这种做法需要应用间跳转,有一定割裂感。前段时间Google 推出了 应用内评价(In-App Review)的API,我们团队在第一时间进行了适配。
注:此API仅适用于Google Play 上上架的App。
环境要求
- 需要至少Android5.0 以上的设备并且安装了Google Play
- 需要
Play core Library
版本至少在1.8.0 以上
集成In-App Review
- 使用需要添加
Play core
的依赖。
dependencies {
// 核心库
implementation 'com.google.android.play:core:1.8.0'
// 非强制要求,如果项目使用了Kotlin 可以集成,用协程消除了请求过程中的回调
implementation 'com.google.android.play:core-ktx:1.8.1'
...
}
-
通过
ReviewManagerFactory
创建ReviewManager
对象,用于启动应用内评价的流程。val manager = ReviewManagerFactory.create(context)
-
获取
ReviewInfo
对象。当我们判断可以让用户进行评价时,使用ReviewManager
创建一个任务,用于真正启动应用内评价流程。这里谷歌文档中中建议提前一点缓存好ReviewInfo
对象。val request = manager.requestReviewFlow() request.addOnCompleteListener { request -> if (request.isSuccessful) { // We got the ReviewInfo object val reviewInfo = request.result } else { // There was some problem, continue regardless of the result. } }
-
经过一系列准备之后,直接调用
launchReviewFlow
来启动评价流程,剩下的事情就交给Google 了。val flow = manager.launchReviewFlow(activity, reviewInfo) flow.addOnCompleteListener { _ -> // The flow has finished. The API does not indicate whether the user // reviewed or not, or even whether the review dialog was shown. Thus, no // matter the result, we continue our app flow. }
测试
上面集成的代码并没有什么难度,只是测试起来比较麻烦,需要注意点比较多:
- 使用应用内评价(In-App Review)需要你的应用已经在Google Play 中上架,在测试的时候,可以将应用发布至
Internal Testing
渠道,然后从Google Play 中下载应用即可; - 如果你的Google 账号之前评价过此应用,则无法展示评价弹窗;
- 不能使用类似Button 的方式触发评价流程,Google 限制了评价弹窗出现的次数,当超过次数之后,弹窗不会出现。不过,在
Internal Testing
渠道的时候没有次数限制; - 最后的
Comletelistener
中,除了通知开发者评价流程结束之外,不会包含任何信息,比如弹窗是否展示,用户评价的结果等等,都是玄学 - 可以使用
FakeReviewManager
来创建ReviewManager
,虽然不包含评价弹窗的部分,不过可以用于集成测试和单元测试等; - 也可以使用
core-ktx
提供的方式来继承,内部提供了协程的方式来消除回调
2020/11/13新增
上文说到,我们发布在Internal Testing Track
的应用是没有弹窗次数限制的。这没问题,但是有一个例外,如果我们已经提交过了评价,那么提交的评价会显示在开发者评价中,同时之后不会显示弹窗了,除非删除评论或者更换谷歌账号。感谢 @huyang102220 的提醒。
总结
总的来说,In-App Review 是一个不错的功能,能够让用户不跳转页面就写下自己真是的感受,也是之前开发者一直向Google 官方建议的功能。不过,这个API 设计个人觉得并不是特别优雅,总觉得哪里有点奇怪。然而,最麻烦的还是测试,诸多限制,属于开发几分钟,测试几小时的那种,并且中途还走了一些弯路😂😂,好在最后解决还是比较顺利。如果你的应用也需要在Google Play 上线并且比较在意用户评价,可以考虑接入。
最后,上两张效果图,Enjoy!