Wird Huawei HMS im Google Play Store toleriert?
Ich habe eine App mit der üblichen Google-Anzeige und In-App-Zahlungsmaterial. Es wird in den Play Store aufgenommen. Jetzt möchte ich dafür sorgen, dass sowohl GMS als auch HMS gleichzeitig unterstützt werden (basierend auf der Verfügbarkeit der entsprechenden Dienste kann die App entscheiden, welche Plattform verwendet werden soll). Die App mit der integrierten Huawei-Funktionalität funktioniert einwandfrei beim Testen auf meinen eigenen Geräten.
Sobald jedoch die Bibliotheken von Huawei mit der App gebündelt sind, lehnt die Play Store Console diese einfach ab. Keine Fehlermeldung, nur ein rotes Ausrufezeichen. Es besteht kein Zweifel, ich habe begonnen, die Huawei-bezogenen Teile nacheinander zu entfernen, und sobald das letzte Bit entfernt wurde, wurde das Bundle automatisch wieder akzeptiert.
Ja, sicher, ich habe möglicherweise einen Fehler gemacht, den ich nicht kenne, aber die Situation ist ziemlich verdächtig. Wenn es einen Unterschied macht, verwende ich Flutter und versuche, ein App-Bundle hochzuladen, keine APKs, wie es heutzutage üblich ist. Die HMS-Bibliothek, die es zu schaffen oder zu brechen scheint, stammt com.huawei.hms:hwid:4.0.0.300aus dem Maven-Repo bei https://developer.huawei.com/repo/.
Sehe ich nur Dinge oder nicht?
Aktualisieren:
OK, die Quest geht weiter.
Dies sind ziemlich aktuelle Nachrichten: https://support.google.com/googleplay/android-developer/answer/9934569
Jede vorhandene App, die derzeit ein alternatives Abrechnungssystem verwendet, muss es entfernen, um diesem Update zu entsprechen. Für diese Apps bieten wir eine verlängerte Nachfrist bis zum 30. September 2021 an, um die erforderlichen Änderungen vorzunehmen. Neue Apps, die nach dem 20. Januar 2021 eingereicht wurden, müssen den Anforderungen entsprechen.
Unabhängig davon, was in der Richtlinie angegeben ist, scheint die Play Console dies bereits durchzusetzen. Und wie ich beim Betrachten des App-Bundles festgestellt habe, reicht der Geschmacksansatz einfach nicht aus. Selbst mit dem anderen Geschmack bleiben einige Pakete übrig, auf die Flutter verweist. Vielleicht nur die Namen, auf die verwiesen wird, nicht der eigentliche Code nach dem Schütteln des Baumes, aber das reicht bereits für die Ablehnung.
Letztendlich denke ich, dass diese Frage geklärt und einige klare Richtlinien für und von uns Entwicklern gefunden werden müssen, wenn wir wirklich ökosystemübergreifende Flutter-Apps aus einer Hand schreiben möchten. Ich möchte es auf jeden Fall tun.
Antworten
Unterschiedliche App Stores haben unterschiedliche Anforderungen an das In-App Purchase Kit. Die mögliche Ursache dafür, dass die Play Store Console Ihre App ablehnt, ist, dass Ihre App in ein anderes IAP-Kit integriert ist und nicht den Anforderungen des App Store-Überprüfungshandbuchs entspricht. Es wird empfohlen, dass Ihr Projekt verschiedene App-Pakete für verschiedene Kanäle unterstützt, um unterschiedliche Anforderungen an den App Store anzupassen.
Unterstützung mehrerer Geschmacksrichtungen
Wenn Ihre App mehrere Build-Typen oder -Varianten unterstützen muss , konfigurieren Sie die von AppGallery Connect heruntergeladene Konfigurationsdatei agconnect-services.json, damit Ihre App die Funktion implementiert. Die Datei agconnect-services.json enthält Konfigurationsinformationen, die von verschiedenen Diensten in Ihrem AppGalleryConnect-Projekt benötigt werden. Wenn Sie mehrere Varianten verwenden müssen, um verschiedene App-Versionen freizugeben, kopieren Sie die Datei agconnect-services.json in den Ordner jeder Variante und konfigurieren Sie sie.
Unterstützung mehrerer Kanäle
Wenn Ihr Projekt unterschiedliche App-Pakete für unterschiedliche Kanäle unterstützen muss, muss der Paketname je nach Kanal variieren. Ändern Sie den Paketnamen in productFlavor in der Datei build.gradle im App-Verzeichnis.
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"
}
}
Der vorstehende Beispielcode zeigt verschiedene Verpackungskonfigurationen für verschiedene Kanäle, Huawei und Amazon. Die Paketnamen sind für die beiden Kanäle unterschiedlich. Wenn für die beiden Kanäle dieselbe Datei agconnect-services.json verwendet wird, schlägt die Überprüfung des Paketnamens fehl. Um mehrere Kanäle zu unterstützen, müssen Sie die Datei agconnect-services.json nur dem Flavour-Ordner des Huawei-Kanals hinzufügen und sicherstellen, dass die AppGallery Connect-Plug-In-Version im Projekt 1.2.1.301 oder höher classpath'com.huawei ist. agconnect: agcp: 1.2.1.301 '). Wenn die Plug-In-Version älter als 1.2.1.301 ist, aktualisieren Sie sie auf 1.2.1.301 oder höher.
Weitere Informationen finden Sie in den Dokumenten .
Ich habe endlich eine Art Problemumgehung gefunden, nicht automatisch, sondern einen brauchbaren Ansatz.
Erstellen Sie zwei Unterpakete in Ihrem Projekt. Sie sehen aus wie normale Flutter-Pakete, befinden sich jedoch in Ihrer App. Erstellen Sie grundsätzlich zwei Ordner gms_supportund hms_supportneben Ihren üblichen lib. Beide sind Pakete mit der üblichen Struktur:
- lib
- lib \ Xms_support.dart
- lib \ src
- lib \ pubspec.yaml
Legen Sie all Ihre herstellerabhängigen Daten in identisch strukturierten Dateien in den jeweiligen lib\srcOrdnern ab und stellen Sie sicher, dass beide XXX_support.dartDateien sie auf die übliche Weise exportieren. Die Implementierungen sollten dieselben Klassen und Signaturen verwenden. Jedes pubspec.yamlbezieht sich auf seine eigenen herstellerspezifischen Flutter-Plugins, die für ihre Implementierung erforderlich sind.
Ihre Haupt-App pubspec.yamlenthält beide Referenzen:
dependencies:
...
gms_support:
path: gms_support/
hms_support:
path: hms_support/
Fügen Sie außerdem eine weitere support.dartin Ihre Haupt-App ein:
export 'package:gms_support/gms_support.dart';
export 'package:hms_support/hms_support.dart';
Überall dort, wo Sie herstellerspezifisches Verhalten in Ihrer App benötigen, importieren und verwenden Sie diese support.dartDatei.
Wenn Sie dann von einem Geschmack zum anderen wechseln müssen, müssen Sie immer drei Dinge synchron ändern :
- den Geschmack (siehe Details Ihrer IDE)
- Kommentieren Sie den anderen Export in aus
support.dart - Kommentieren Sie die andere Referenz aus
pubspec.yamlund führen Sie ein Pub-Update durch