如题,用flutter开发应用内评分功能,搞了很久,最后解决了,记录下具体的步骤。

其实我想说的是,只要是google的东西都不好对接(例如google的内购,对接就是折磨人,关键你对接完了失败和成功根本就不知道为什么成功了),或者说看起来步骤很简单,但是涉及到东西真的是繁琐,特别是对于我们广大的中国开发小伙伴,真的不太友好。来吧,说说应用内评分这个功能。
 

1、我用的flutter插件是这个,

in_app_review: ^1.0.4,其实这个插件的版本已经更新到了2.0.2,但是我自己flutter 版本还是1.22.6的,所以我选用2.0以下的版本。

2、这个插件貌似在ios上,对接之后直接可以弹出内部评分框的,一两次就成功,但是android上面问题就来了,没那么简单,就像它文档中说的,测试起来各种不行 Testing requestReview() on Android isn't as simple as running your app via the emulator or a physical device. See Testing for more info.

而且在github上面也有很多人留言说对接了,但是就是弹框显示不了(https://github.com/britannio/in_app_review/issues/21

3、怎么解决呢?

4、集成,代码:

import 'package:in_app_review/in_app_review.dart';

final InAppReview inAppReview = InAppReview.instance;

if (await inAppReview.isAvailable()) {
    inAppReview.requestReview();
}

5、代码集成之后,还要按照文档的要求,上传app到google play Console的测试轨道(Internal testing track)中去,同时启用这个版本,加上test uers,测试用户列表;

Testers栏中要添加一些测试人员的google 账号,

注意,在添加测试账号时,文本框输完邮箱之后,要Enter键,才能确认。。。

6、再按照文档(https://developer.android.com/guide/playcore/in-app-review/test#internal-test-track)中的要求,

看看要求,

  1. 手机必须支持google服务,这是废话,同时将自己的账号(在Tseters列表中也要有这个账号),登录或者切换到google play中作为主账号选中;
  2. 如果app还没发布,直接传一个包到测试轨道中(你如果已经上线了,我觉得这里也传一个上去,在测试轨道,反正也不会怎么地),启用(active状态),别怕,在测试轨道中的app不会影响线上的东西,可以瞎搞没问题,各种确认;
  3. 另外评价过的要在google play中删除掉,再评价,这个一般也是废话,我既然要对接这个功能,肯定是没有评价过的,可以不用理它;
  4. 什么用完配额,这个也是废话,自己注意就行了,我刚开始对接,基本没有这个问题,直接忽略;
  5. google play如果切换了账号之后,注意在手机程序中,需要将google play的缓存清除,这个问题很常见,如果你切换了账号不清空缓存,那么有可能你支付啊啥的其他功能就会受到影响(这一点不是绝对的,我相信应该是跟具体开发人员所在公司的环境有关,我这边的环境就是要利用vpn去支撑google play的服务,所以每次如果vpn失效或者vpn没有打开,但是之前又打开过,如果你的google play账号登录/切换了但是没有清除缓存,那么问题就来了--直接没有什么效果,直接一直都是国内的环境或者没开启vpn但是又可以访问google play里面的东西,其实这都是假象,都是缓存导致的 。。。必须要记住清除google play缓存这一步。清除了之后,账号,点击游戏-付费,随便选中一款付费游戏,如果能够弹出google 支付面板则表示google play服务是正常的。。。哎,google服务被墙了之后,我们广大开发者们真的好难。);

7、那么我上面的东西都按照文档配置好了,都ok了,但是你打开app,去调用应用内评价时,根本就不行,不出现弹框。。。你懵逼了,我也懵逼了。

8、按道理说,这种方式其实可以调用成功的,可以显示弹框的,日志打印一切正常(如下),但是就是不显示弹框,而且有的同学就是底部栏有个弹框的闪烁。。。

I/InAppReviewPlugin(24245): isAvailable: called
I/InAppReviewPlugin(24245): isAvailable: playStoreInstalled: true
I/InAppReviewPlugin(24245): isAvailable:lollipopOrLater: true
I/InAppReviewPlugin(24245): isAvailable: The Play Store is available and Android 5 or later is being used
I/InAppReviewPlugin(24245): cacheReviewInfo: called
I/PlayCore(24245): UID: [10515] PID: [24245] ReviewService : requestInAppReview (com.hellotalk.aigrammar)
I/InAppReviewPlugin(24245): cacheReviewInfo: Requesting review flow
I/InAppReviewPlugin(24245): onComplete: Successfully requested review flow
I/flutter (24245): _showAppReView = true
I/InAppReviewPlugin(24245): requestReview: called
I/InAppReviewPlugin(24245): launchReviewFlow: called

9、好吧我反复尝试了100遍,无事于补,一直都是失败的;

 

其实到这里还差一步,这里后面会给出解释。就是差一步复制url链接,用手机去访问这个链接就会去下载这个包,测试就ok了。但是第一次完全没整明白还有这个操作。。。

 

 

10、还好有另外一种方式,我试试另外的方式:内部分享的方式(Internal app sharing)

这里需要接受条款,选中List name,同时Email lists栏里面要可以选中测试的用户;

注意,这里如果你不去勾选条款,那么你直接跳到Internal app sharing页面(https://play.google.com/console/internal-app-sharing)去上传包会报错的,如下。

勾选了条款之后,变成这样,

上传包,再确认,你会发现这个问题就没有了:

11、点击上图中的右侧的复制按钮,你会得到一个下载app的地址,(怎么让其他的手机下载这个地址的app呢,其实你可以用网上的在线生成二维码网站),

利用这个固定地址生成二维码,再让其他人扫码下载即可;

注意,这里问题又来了,你再扫码下载你刚才的地址时,手机端浏览器会提示“请在google play设置中开启内部应用分享”。。。又一脸懵逼,

来吧,这里怎么开启内部分享?看下图,

好深的机关,操作完毕之后,看这个,

只有开启了这个开关,才能下载分享链接,直接下载即可。

12、下载下来体验,点击内部评价功能,弹窗是可以正常显示的:

 

总结:

其实,作为google play的功能,内购和内部评价都需要手机设置开机密码,这一点需要注意下,不要忘记了。

 

完毕。

其实,我这里有个问题,就是第一种上传包的test track(测试轨道)中是无法弹框的,这个很奇怪,但是据说这种方式才能不受次数限额的影响,并且可以测试提交评价;

而第二种方式(内部分享配置链接、下载)这是可以的,但是提交按钮是不能点击的。

这两种方式的区别就是按钮是否可以点击,这个在官方文档上面也提到了,确实是这样的。但是我还是更倾向于第一种方式。。。目前还没搞清楚为什么第一只方式不行。

 

===============我是分割线======2021.05.08更新==============

后来我又尝试第一种方式:如下图,使用内部测试轨道测试:

首先创建新发布(Create new release),再保存(save),再发布。发布成功之后到测试组tab下,

 如图第3步,直接可以复制这个发布(只是内部测试,可以随便发布,不担心)成功的链接,拿到链接之后用二维码生成器,将这个链接生成二维码,再用手机去扫码,

注意,手机必须要支持google服务的(这个自然不必多说),同时手机中的google play必须登录账号,同时这个账号是测试组里面的账号,登录成功之后,再扫码进入页面。直接操作下载,这里操作可以将之前手机安装的这个包卸载掉,这个下载会进入到google play市场,因为你是测试用户,所以你会看到市场中的包后面有个提示是“内部测试包”等信息,直接下载安装,再进入应用,操作内部评分,发现是可以提交评分的。一切ok。

说明:

这里的操作评分提交之后可以反复的更改和提交,还有撤销,同时进入google play市场,会有个位置显示你刚才的内部评分,这个别人是看不到的,只针对当前用户可见。而且多次评价只显示最近的一条,意思是会覆盖之前的私下评价。而且注意一点,多次提交之后,一个账号是有配额限制的,只能提交一定的次数,在一定时间内达到次数上限之后,再无法弹出内部评分框了,必须重新更换google play中的测试账号。这个官方文档上 是有说明的,具体也没说是多少次。

 

总结:

1、测试系统内部评价的两种方式(其实还有用FakeReviewManager这种方式,但是这个不太适用,因为测试人员无法直观可见);

2、第一种是可以提交评价的,是可以提交私下反馈的,可以反复修改提交和撤销,还可以自己查看评价,不对外公开;而且这种评价是有次数限制的,一个账号只有指定次数,达到上限之后就不会再弹出评分框了;而且这种方式上传包到内部测试轨道build号是要逐步递增的,同一个build号上传两次会报错,这个需要注意。提交成功之后注意保存和发布,拿到地址生成二维码,当然不生成二维码也行,直接手机访问。再安装,可以看到效果的。

3、第二种分享的方式(分享地址https://play.google.com/console/internal-app-sharing/),是无法提交评价的(评价按钮一直置灰的),只能干望着,无法做任何的操作,但是这种是可以一直弹出的,这种方式上传包的时候,包的build号是可以重复的,重复的包也可以上传成功,成功之后生成二维码,再分享出去下载;

 

建议:

1、根据google的文档(https://developer.android.com/guide/playcore/in-app-review/test)建议和说明,内部评价是有弹出要求和时机的,不要试图去让我们app的产品业务逻辑

和系统的内部评分逻辑挂钩,因为很难挂起来,关联不了的,因为你无法检测到弹框的行为以及用户操作评分的行为。



笔者的疑惑:

1、我试图去将产品的业务逻辑和内部评价弹框逻辑挂钩发现根本就不好操作 ,因为我们不知道系统弹框什么时候结束,什么时候评价完毕(还有撤销操作等)以及对应的评分值是多少;笔者的产品要求我们弹出系统内部评分框之后,再跟我们自己的业务关联起来,最后发现无法实现,因为拿不到弹框的行为的节点和用户的行为节点。无能为力。有的同学可能会说去监听系统的底部弹框,其实我尝试过,根本就不是在同一个路由,监控不到,同时页面的生命周期也无法检测到是否弹出了内部评分框。。。

 

2、搞不懂为什么google 要推出第二种方式,关键是不能提交,只能看。。。理解不了;

3、我在尝试触发内部评分框的同时弹出自己的业务弹框,测试发现第一方式下载的包一直都只能看到自己的业务弹框,而看不到系统内部评分框,但是用第二种方式下载的包是可以看到两个弹框的(自己的弹框和系统内部评分框,如下图,点击具体按钮时同时弹出了两个框),甚是奇怪!由此看来第二种方式还有有点价值的,要不然都验证不了。

我的疑惑是,为什么第一种方式不行?而第二种方式就可以看到这种效果?目前只是开发阶段的测试效果和疑问,上线之后我会再次更新此文章。。。看具体上线之后是否能同时弹出这两个框(官方文档上面说了,好像不能在弹窗的时候再显示自己的弹框。。。)

 

再次完毕。

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐