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

Is Huawei HMS tolerated on Google Play Store?

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

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

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

的 Maven 仓库

那么,我到底是看见了还是没看见?

更新:

好的,任务继续。

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

Any existing app that is currently using an alternative billing system will need to remove it to comply with this update. For those apps, we are offering an extended grace period until September 30, 2021 to make any required changes. New apps submitted after January 20, 2021 will need to be in compliance.

无论政策怎么说,Play 管理中心似乎都已经强制执行了。正如我通过查看应用程序包发现的那样,风味方法是不够的。即使使用其他 flavor,Flutter 仍然会引用一些包。也许只是引用的名称,而不是摇树后的实际代码,但这已经足够拒绝了。

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

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

支持多种口味

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

支持多频道

如果您的项目需要为不同的渠道支持不同的应用程序包,包名称需要根据渠道而有所不同。更改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文件,则包名校验失败。 支持多渠道需要在只有华为渠道的flavor文件夹下添加agconnect-services.json文件,并保证AppGallery Connect plug-in项目中版本为1.2.1.301或更高版本classpath'com.huawei.agconnect:agcp:1.2.1.301')。如果plug-in版本低于1.2.1.301,请升级至1.2.1.301或更高版本。

有关详细信息,请参阅 docs

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

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

  • lib\Xms_support.飞镖
  • lib\src
  • lib\pubspec.yaml

将所有 vendor-dependent 内容放入各自 lib\src 文件夹中结构相同的文件中,并确保两个 XXX_support.dart 文件都以通常的方式导出它们。这些实现应该使用相同的 类 和相同的签名。每个 pubspec.yaml 指的是其实现所需的 vendor-specific 个 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';

无论您在应用中需要 vendor-specific 行为的什么地方,都可以导入并使用此 support.dart 文件。

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

  • 味道(详见你的IDE)
  • 注释掉 support.dart
  • 中的另一个导出
  • 注释掉 pubspec.yaml 中的其他参考并进行发布更新