Flutter 谷歌Play商店是否容忍华为HMS?

Flutter 谷歌Play商店是否容忍华为HMS?,flutter,google-play-console,huawei-mobile-services,Flutter,Google Play Console,Huawei Mobile Services,我有一个应用程序,上面有通常的谷歌广告和应用内支付功能。游戏商店已经接受了。现在我想让它同时支持GMS和HMS(根据适当服务的可用性,应用程序可以决定使用哪个平台)。该应用程序内置华为功能,在我自己的设备上测试时运行良好 然而,一旦华为的库与该应用捆绑,Play Store控制台就会拒绝它。没有错误消息,只有一个红色感叹号。毫无疑问,我开始一个接一个地移除华为相关部件,当最后一个部件被移除后,捆绑包又自动接受了 是的,当然,我可能犯了一些我不知道的错误,但是情况很可疑。如果有什么不同的话,我会使

我有一个应用程序,上面有通常的谷歌广告和应用内支付功能。游戏商店已经接受了。现在我想让它同时支持GMS和HMS(根据适当服务的可用性,应用程序可以决定使用哪个平台)。该应用程序内置华为功能,在我自己的设备上测试时运行良好

然而,一旦华为的库与该应用捆绑,Play Store控制台就会拒绝它。没有错误消息,只有一个红色感叹号。毫无疑问,我开始一个接一个地移除华为相关部件,当最后一个部件被移除后,捆绑包又自动接受了

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

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

更新: 好了,任务还在继续

这是最近的消息:

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

不管政策怎么说,游戏机似乎已经开始执行了。正如我在查看应用程序包时发现的那样,仅仅使用味道方法是不够的。即使是其他口味的,仍然会有一些被flifter引用的包。也许只是引用的名称,而不是树摇动后的实际代码,但这已经足够拒绝了


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

不同的应用商店对应用内购买套件有不同的要求。Play Store控制台拒绝您的应用的可能原因是您的应用与其他IAP工具包集成,并且不符合《应用商店审查指南》的要求。建议您的项目支持不同渠道的不同应用程序包,以适应不同的应用程序商店要求

支持多种口味

如果您的应用程序需要支持多种构建类型或风格,请为您的应用程序配置从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或更高版本的类路径“com.Huawei.agconnect:agcp:1.2.1.301”)。如果插件版本早于1.2.1.301,请将其升级到1.2.1.301或更高版本


有关更多信息,请参阅。

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

在项目中创建两个子包。它们看起来像普通的颤振软件包,但驻留在你的应用程序中。基本上,在通常的
lib
旁边创建两个文件夹,
gms\u support
hms\u support
。两者都是具有通常结构的包:

  • 解放党
  • lib\Xms\u support.dart
  • lib\src
  • lib\pubspec.yaml
将所有依赖于供应商的内容放入相应的
lib\src
文件夹中结构相同的文件中,并确保这两个
XXX\u支持.dart
文件以常规方式导出它们。实现应该使用相同的类和相同的签名。每个
pubspec.yaml
都引用了其实现所需的特定于供应商的颤振插件

您的主应用程序
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
    中的其他引用,并进行发布更新

是的,我非常了解风味方法。如果可能的话,我尽量避免使用它,因为在两种情况下使用一个应用程序更舒适。我非常理解如果我使用了两个冲突的
agconnect
服务,那肯定会导致问题(尽管不是在bundle uploa期间)