Google Play 商店是不是容忍华为 HMS?

Posted

技术标签:

【中文标题】Google Play 商店是不是容忍华为 HMS?【英文标题】:Is Huawei HMS tolerated on Google Play Store?Google Play 商店是否容忍华为 HMS? 【发布时间】:2021-01-13 10:42:47 【问题描述】:

我有一个包含常用 Google 广告和应用内付款内容的应用。它已经被 Play 商店接受了。现在我想让它同时支持 GMS 和 HMS(根据相应服务的可用性,应用程序可以决定使用哪个平台)。该应用内置了华为功能,在我自己的设备上进行测试时运行良好。

但是,一旦华为的库与应用程序捆绑在一起,Play 商店控制台就会拒绝它。没有错误信息,只有一个红色感叹号。毫无疑问,我开始把华为相关的部分一个一个的去掉,最后一个去掉,bundle又被自动接受了。

是的,当然,我可能犯了一些我不知道的错误,但情况非常可疑。如果这有什么不同,我会使用 Flutter 并尝试上传应用程序包,而不是 APK,这些天照常进行。似乎成功或失败的 HMS 库是来自 https://developer.huawei.com/repo/ 的 maven 存储库的 com.huawei.hms:hwid:4.0.0.300

那么,我是不是只看到了一些东西?

更新:

好的,任务继续。

这是最近的新闻:https://support.google.com/googleplay/android-developer/answer/9934569

当前使用替代计费系统的任何现有应用 将需要将其删除以符合此更新。对于这些应用,我们 提供延长宽限期至 2021 年 9 月 30 日 任何必要的更改。 2021 年 1 月 20 日之后提交的新应用程序将 需要遵守。

无论政策如何规定,Play 管理中心似乎已经强制执行。正如我通过查看应用程序包发现的那样,风味方法还不够。即使使用另一种风格,Flutter 仍然会引用一些包。可能只是引用的名字,而不是摇树后的实际代码,但这已经足够拒绝了。

所以,归根结底,如果我们真的想编写跨生态系统、单一来源的 Flutter 应用程序,我真的认为需要解决这个问题,并为我们自己和开发人员找到一些明确的指导方针。至于我,我当然想做。

【问题讨论】:

Google Play 商店中有许多应用程序,其中包括华为移动和谷歌移动服务。在某些情况下,Play Store Console 可能会拒绝华为 IAP SDK,建议使项目支持不同渠道的不同应用包,以适应不同的应用商店需求。 这就是问题所在,请仔细阅读。 :-) 虽然这在早些时候是正确的,但随着 Play 商店即将发生的变化,谷歌现在开始拒绝不使用 HMS 代码但仍然有一些元引用的两种风格的包。当我创建两种风格,一种 appgallery 和一种 googleplay 时,Google 将拒绝 googleplay 一种。我不是在谈论 appgallery 的味道,这很明显。 是的,如果包含HMS IAP代码,会被GP拒绝。 【参考方案1】:

不同的 App Store 对 In-App Purchase Kit 有不同的要求。 Play Store Console拒绝您的应用的可能原因是您的应用集成了其他IAP Kit,并且不符合应用商店审核指南的要求。建议您的项目支持不同渠道的不同应用包,以适应不同的应用商店需求。

支持多种口味

如果您的应用需要支持多种构建类型或风格,请配置从 AppGallery Connect 下载的 agconnect-services.json 配置文件,以便您的应用实现该功能。 agconnect-services.json 文件提供了您的 AppGalleryConnect 项目中各种服务所需的配置信息。因此,如果您需要使用多种风格发布不同的应用版本,请将agconnect-services.json文件复制到每个风格的文件夹并进行配置。

支持多种渠道

如果您的项目需要支持不同渠道的不同应用包,包名需要根据渠道而有所不同。修改app目录下build.gradle文件productFlavor中的包名。

productFlavors  
    huawei 
        // Unique package name. 
        applicationId "com.example.demo.huawei" 
        resValue "string", "app_name", "Huawei" 
     
    amazon 
        applicationId "com.example.demo.amazon" 
        resValue "string", "app_name", "Amazon" 
     

上述示例代码展示了针对不同渠道华为和亚马逊的不同包装配置。两个频道的包名称不同。如果两个通道使用同一个agconnect-services.json文件,包名校验失败。 要支持多渠道,您需要将agconnect-services.json文件添加到仅华为渠道的flavor文件夹中,并确保项目中的AppGallery Connect插件版本为1.2.1.301或后面的classpath'com.huawei.agconnect:agcp:1.2.1.301')。如果插件版本低于 1.2.1.301,请升级到 1.2.1.301 或更高版本。

有关详细信息,请参阅docs。

【讨论】:

是的,我非常了解风味方法。如果可能的话,我试图避免它,因为在这两种情况下使用一个应用程序会更舒服。如果我使用两个具有冲突agconnect 的服务,我可以非常理解,这肯定会导致问题(尽管不是在捆绑上传期间而是在使用中),但是,现在我只需要一个支持 AG 的方案。问题是,如果我省略了与 IAP 和广告相关的所有内容,并且只在我的应用中调用isHuaweiMobileServicesAvailable() 留下单行,我会被拒绝。 我怀疑你可能以某种方式连接到华为。你能看看我的更新吗?这种方法在过去可能行得通,但现在似乎还行不通。 归结起来可能是这样的:我可以处理包含在我的应用程序中的各种口味。但是我无法处理我引用的插件(例如huawei_iap)决定包含自己的内容。 "isHuaweiMobileServicesAvailable()" 不是HMS Flutter Plugins中暴露或包含的方法。您可能使用了第三方插件或使用了基础 HMS SDK 中公开的插件。 “申请仍然被拒绝” 任何最小的可重现项目都可能有助于分析问题。请参考Cloud Debugging。 是华为自家的huawei_iapFlutter插件。此后,我在 GitHub 上的相应队列中打开了一个问题,它已分配给您的一位同事,但还没有解决方法。【参考方案2】:

我终于找到了一种解决方法,不是自动的,而是一种可用的方法。

在您的项目中创建两个子包。它们看起来像普通的 Flutter 包,但驻留在您的应用程序中。基本上,在您通常的lib 旁边创建两个文件夹,gms_supporthms_support。两者都是具有通常结构的包:

库 lib\Xms_support.dart lib\src lib\pubspec.yaml

将所有依赖于供应商的内容放入各自的lib\src 文件夹内的结构相同的文件中,并确保两个XXX_support.dart 文件都以通常的方式导出它们。实现应该使用相同的类和相同的签名。每个pubspec.yaml 都引用了其自己的、特定于供应商的 Flutter 插件,这些插件是其实现所需的。

您的主应用 pubspec.yaml 包含两个引用:

dependencies:
  ...
  gms_support:
    path: gms_support/
  hms_support:
    path: hms_support/

另外,在您的主应用中添加另一个 support.dart

export 'package:gms_support/gms_support.dart';
export 'package:hms_support/hms_support.dart';

只要您在应用中需要特定于供应商的行为,您就可以导入并使用此 support.dart 文件。

然后,当您必须从一种口味更改为另一种口味时,您总是必须同步更改三个

风味(请参阅 IDE 的详细信息) 注释掉support.dart 中的另一个导出 注释掉pubspec.yaml 中的其他引用并进行发布更新

【讨论】:

以上是关于Google Play 商店是不是容忍华为 HMS?的主要内容,如果未能解决你的问题,请参考以下文章

打开游戏的时候提示没有google play 服务怎么办?

如何将国产android机添加到google play?

当我将 Android 应用程序转移到其他 Google Play 开发者帐户时,它是不是仍可在 Google Play 商店中使用?

无法确定 Android 设备上是不是安装了 Google Play 商店

avd 模拟器是不是支持 Google Play 商店?

华为手机无法连接谷歌商店怎么办?