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

所谓"坑",总结到最后大多数都是自己对平台的流程和细节不熟悉,自己给自己挖的坑。本篇内容记录我第一次上架 google play 过程中遇到的不常见的"坑",供大家参考,少走弯路,共勉。

一、关于google 签名的 "坑"

如果你们的应用打算上架多个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的签名密钥导出到本地使用,但他们不提供导出,所以这条路不通。

以下是邮件的回复

markdown 复制代码
经过检查您的签名已经生效,该应用是使用正确的应用程序签名密钥​进行签名的。您可以查阅附件截图。  
关于您的问题重要的是要了解,具有相应密钥升级请求的唯一可用选​项是"请求对 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已经上架了并且已经有几个下载量,导致在线的项目不能删除,所以我们最终的方案,重新创建项目并且换包名,更新所有平台的包名等一系列工作。

二、关于调用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,有缓存。

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

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

三、关于部分手机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服务全。

相关推荐
jiet_h40 分钟前
Android Kotlin 算法详解:链表相关
android·算法·kotlin
爱意随风起风止意难平2 小时前
003 flutter初始文件讲解(2)
学习·flutter
@老蝴2 小时前
C语言 — 动态内存管理
android·c语言·开发语言
每次的天空4 小时前
Android第十一次面试flutter篇
android·flutter·面试
renxhui5 小时前
Android 性能优化(四):卡顿优化
android·性能优化
二流小码农6 小时前
鸿蒙开发:UI界面分析利器ArkUI Inspector
android·ios·harmonyos
CYRUS_STUDIO6 小时前
FART 精准脱壳:通过配置文件控制脱壳节奏与范围
android·安全·逆向
小疯仔6 小时前
使用el-input数字校验,输入汉字之后校验取消不掉
android·开发语言·javascript
墨狂之逸才7 小时前
Data Binding Conversion 详解
android
iceBin7 小时前
uniapp打包安卓App热更新,及提示下载安装
android·前端