flutter 项目 第一次上架 Google Play 的遇到过的 “坑”(持续更新2024.04.29)

1,669 阅读9分钟

我发现近期关于google play上架的过程资料很少而且散乱,我这边把上架过程遇到的些问题和心得写下来,供大家参考,让大家少走弯路,节约宝贵的时间,共勉。

所谓“坑”,总结到最后大多数都是自己对平台的流程和细节不熟悉,自己给自己挖的坑。本篇内容记录我第一次上架 google play 过程中遇到的不常见的“坑”。

更新时间:2024.4.1

一、关于google 签名的 “坑”

image.png

如果你们的应用打算上架多个android平台,选择签名密钥时,

千万不要选择让Google生成应用签名密钥!!!

千万不要选择让Google生成应用签名密钥!!!

千万不要选择让Google生成应用签名密钥!!!

重要的事情说三遍,要选择使用其他密钥,把本地的签名文件传上去。这一步走错,如果已经上架了并且已经有用户下载了,就只能重新创建新的项目换包名

很不幸,我就走了这一步,使用google生成的签名密钥,导致第三方登录无法正常使用,接下来我为了修复这个问题整整与google play的人员沟通了大半个月,最终我还是放弃妥协了。下面看我是怎么一步一步,直到妥协的过程的。

待解决问题1:签名信息不一致,导致第三方登录无法登录。

原因:签名信息不一致,如果你使用了google生成的签名密钥,你本地打好的release bundle包传到google play后台时,本地的签名会被google play后台替换掉,换成google生成的签名密钥。所以导致你在第三方登陆后台配置的签名信息与包的签名信息不一致。

然后我想到的第一解决方案是看 google play 后台是否有办法修改签名,不一会功夫就找到了入口,(当时心里想的是google play设计的还挺合理的,还好留了修改的入口),看到提醒信息,每年只能修改一次,当时有点紧张,一步搞错可能就一年都不能修改了。然后就小心翼翼的把本地的签名信息按照升级的步骤,完成了签名的更新,过程还比较顺利,心想这样应该可以了。当时是周五(当时项目也不太紧急),想想万一有个缓存什么的就没及时打包上传,等下周一在打包测试。

修改签名入口

到此问题1签名问题算是更新了,周一打包上传到google play后台内测,发现第三方登录还是显示签名不对,查了半天没有找到头绪,最后不得不联系google play的人员帮忙分析是什么问题:

待解决问题2:更新了签名,还是显示签名信息不一致。

有想过把google的签名密钥导出到本地使用,但他们不提供导出,所以这条路不通。

以下是邮件的回复

经过检查您的签名已经生效,该应用是使用正确的应用程序签名密钥​进行签名的。您可以查阅附件截图。  
关于您的问题重要的是要了解,具有相应密钥升级请求的唯一可用选​项是“请求对 Android N(API 级别 24)及更高版本上的所有安装进行密钥升级”,这意味着使用低于 Android T 版本(API 级别 33)的用户 ),以便使用您的旧密钥签署新安装或更新。 该应用程序将继续使用您的旧密钥进行签名,但会生成标牌中包含的​密钥轮换证明(以实现您之前的密钥 A 与新密钥 B 之间的信任),以便信任您使用的新密钥 一旦他们完全升级到 Android T 版本及更高版本,即已注册,此时新密钥将完全强制执行。

  


此外,请注意 API 32 及以下用户的附加条件:

-   对于 API 23 及更低版本,新密钥将作为密钥轮换标牌的一部分包含在内,但不起​作用。。
-   对于 API 24 至 API 32,新密钥将作为密钥轮换标牌的一部分包含在内,但旧密钥仍将​用于验证您的集成 API 服务或触发应用程序更新。 此外,如果用户设备当前启用了 Google Play Protect,系统将确保使用轮换密钥(即您的新密钥)对更新​进行签名。 因此,除非禁用 GPP,否则用户将无法从仅使用您的旧密钥签名的第三方源触发应​用程序更新)

您还可以查看以下链接以了解更多详细信息:

-   [Android N 及更高版本上所有安装的关键升级](https://support.google.com/googleplay/android-developer/answer/9842756?hl=en#upgrade&zippy=request-a-key-upgrade-for-all-installs-on-android-t-api-level-and-above-recommended%2Crequest-a-key-upgrade-for-all-installs-on-android-n-api-level-and-above-recommended)
-   [应用程序更新的工作原理](https://developer.android.com/google/play/app-updates)

如果您对使用 Play 管理中心还有任何其他疑问,请告诉我,我很乐意为您提供帮助。

  


祝 一切顺心! Cece  
Google Play 开发者支持团队

大概得意思是他们为了做兼容,更新签名后,新包里面会存在多个签名,新的签名只有在Android T 版本及更高版本上,才会使用我的新密钥。心想这也太坑了,我们产品不能接收。 其实关于google签名的兼容,google登录后台是允许设置多个签名的,我试过,配置多个签名新旧签名都可以正常登录,但是国内的主流平台都只能配置一个签名(比如微信登录),国外的facebook也只能配置一个签名。

最后我们还做了很多尝试方法,比如不换包名,重新创建一个新的项目。由于我们的app已经上架了并且已经有几个下载量,导致在线的项目不能删除,所以我们最终的方案,重新创建项目并且换包名,更新所有平台的包名等一系列工作。

最后感谢评论区 JauneQ 帮我解惑, 虽然在评论区找到了可以有办法下载到 google 签名后的 apk 包,但是如果需要上架其他渠道或者 debug 每次都需要额外花不少时间成本,所以还是建议使用自己的本地生成的签名。

更新时间:2024.4.29

二、关于调用google支付前获产品列表的 “坑”

报错[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(getProducts, E_SERVICE_ERROR, Billing is unavailable. This may be a problem with your device, or the Play Store may be down., null)

原因1: google store 登录了多个账号(我遇到的问题这个方案没用)。

原因2: 同一个google play账号下,多个项目存在相同的 产品ID,有缓存(我遇到过)。

原因3: vpn 节点问题(我遇到过)。

解决方案1: 删除其他账号,只留一个账号。

解决方案2: 用前一个包在真机上走了一遍google支付流程(google支付框能弹出,但会报错,支付不会成功),然后用新包在走一遍google支付就不再报错了。所以得出了以上原因2的结论。至此我的新包能支付了,前一个包的价格我也没删除。

解决方案3: 多切几个节点试试,尽量选择靠近老美的地区优先试试。

三、关于部分手机google支付无法支付成功的 “坑”

W/BillingClient(26682): getSkuDetails() failed for queryProductDetailsAsync. Response code: 6 E/DoobooUtils(26682): Error Code : 6 E/flutter (26682): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(getProducts, E_UNKNOWN, An unknown or unexpected error has occured. Please try again later., null)

这个错误出现在 小米10一加9 上,没查出是什么原因。

目前我们的测试机中只有一款 SM G9860 (三星)手机,可以正常google支付。

备注:同一套代码,同样的手机环境,google服务全。

更新时间:2024.3.11

四、关于第三方登录接入的 “坑”。

很多上google play的产品大多数都会用到几个国外的第三方登录,比如 Facebook、Google、Twitter等,如果单一去找插件或者去写插件非常花费精力和时间,接入过程多多少少会遇到一些 “奇奇怪怪” 的问题,毕竟流程不熟悉,比如facebook的第三方的登录,填写资料的过程就比较繁琐且麻烦,还要申请权限。这里我推荐一个第三方平台,因为是我一直在用,也很喜欢的平台。www.mob.com/ 他们的 sharesdk 免费的,而且资料很齐全,国内外大小第三方登录都有,最关键的是使用他们平台的产品,在接入过程中遇到任何问题可以直接找他们客服解决,客服就是技术,直接对接,沟通起来很顺畅,能快速发现和解决问题。

这里我重点说一下,我是第一次接facebook 第三方登录时遇到的一些问题:

问题1:申请的第一个公司号居然被封了。

第一天申请的号,第二天就被封了。我也不知道咋回事,说我违反了他们的社群规定。google了一番,大概的意思是怀疑我是机器人注册的账号,广大网友提供了一些信息,知道了原因。

以下几个操作需要注册账号后操作一下:

  • 注册账号后,填写一下基础资料。
  • 上传一个你喜欢的头像。
  • 随便关注几个人。
  • 没事上去点点赞。(不必须)😒

这几个操作我第一个号都没有操作,所以被封了。后来重新申请了一个做了上述几个操作就没有被封了。

问题2:同一个号在多个设备IP上登录,导致短时间无法进行Business Verification

这里说下为什么要进行Business Verification,如果要使用facebook第三方登录获取用户信息,需要申请高级权限,而高级权限需要Business Verification

同一个号在多个设备IP上登录,facebook会被检测到账号有风险,会限制你在这个时间段内进行Business Verification,我们大概被这个卡了半个月左右的时间。

Business Verification后就可以申请高级权限了。

问题3:高级权限 public_profile 如果不申请跳转到facebook登录界面会报错。

错误信息:

Feature Unavailable: facebook login is currently unavailable for this app since we are updating additional details for this app. Please Try again

以下红框内的高级权限申请后该错误就不再有了。

高级权限

今天就到这,如果有遇到别的问题也欢迎评论区留言讨论。👏🏻