Nie znaleziono pasującego klienta dla nazwy pakietu (Google Analytics) - wiele smaków i typów produktów [zamknięte]


383

Kontekst:

Próbuję skonfigurować Google Analytics dla mojej aplikacji. (mając 4 niestandardowe buildTypesi więcej niż kilka productFlavors)

Działa dobrze, gdy wybieram, Build Variantktóry ma applicationIdustawiony na com.my.app.package.name(nazwa pakietu używana podczas generowania google-services.json). Ale moje inne smaki mają różne zastosowania.

Poszedłem za oficjalnym przewodnikiem, aby go skonfigurować.

Występuje błąd, gdy wybrany jest inny wariant kompilacji w Build Variants Tab(który ma inny applicationId(nazwa pakietu):

Błąd: wykonanie nie powiodło się dla zadania „: app: processAllcategoriesDebugfreeGoogleServices”.

Nie znaleziono pasującego klienta dla nazwy pakietu „com.my.app.package.name.debug”

Objaśnienie komunikatu o błędzie:

W nazwie zadania w powyższym komunikacie o błędzie Debugfreejest mój niestandardowy buildTypei Allcategoriesjest jednym z moich productFlavors.

Rozumiem błąd i wiem, że nazwa pakietu różni się od tego, którego użyłem podczas generowania JSON, ale staram się to rozwiązać.

Problem:

Teraz google-services.jsonrezyduje w appfolderze i dlatego nie jestem w stanie ich rozdzielić dla każdego smaku produktu, upuszczając je w folderze zestawu źródłowego określonego smaku.

Pytania:

  1. Mój zwyczaj byildTypedebugowania sufiksów .debugdo applicationId(nazwa pakietu). Czy jest jakiś sposób, aby zmusić go do pracy z google-services.jsonwersją, która ma moje wydanie applicationId(tj. Bez sufiksu .debug)
  2. Czy istnieje sposób skonfigurowania wielu smaków produktu w tym samym google-services.jsonpliku bez użycia osobnych plików i zadań do skopiowania wymaganego pliku do appfolderu. Wiem, że można to zrobić za pomocą, taskjak wspomniano w tym poście . Czy istnieje prostszy sposób, aby mieć tylko jeden plik lub wybrać odpowiedni plik na podstawie konfiguracji stopni?
  3. Widzę, że package_namepole google-services.jsonma nazwę pakietu com.my.app.package.name. Czy mogę ręcznie dodać wiele nazw pakietów, aby działały dla wszystkich wariantów kompilacji? Jeśli tak, jak to zrobić? Nie można znaleźć żadnych instrukcji w dokumentacji.

1
Czy znalazłeś coś dla swojego trzeciego pytania?
Mate

Jestem w podobnych sytuacjach. Potrzebuję wsparcia analitycznego tylko dla jednej wersji smakowej wydania. Mógłbym ograniczyć dodatkową zależność do prod-flavour, ale nadal szuka odpowiedniego pakietu jako części pliku son. Jakieś sugestie !
CoDe,

1
Mam również ten sam problem. Daj mi znać, jeśli ktoś znajdzie rozwiązanie tego problemu?
Deepanshu Sinha

Odpowiedzi:


381

Sprawdź nazwę pakietu w pliku google-services.json , powinna być taka sama jak nazwa lokalnego pakietu aplikacji

Przykład

"client_info": {
    "mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
    "android_client_info": {
      "package_name": "com.my.app.package.name"
    }

W tym przypadku nazwa mojego lokalnego pakietu to com.my.app.package.name, więc również zmieniłem nazwę mojego pakietu w google-services.json na nazwę mojego lokalnego pakietu


google-services.json to plik !!! w katalogu aplikacji. Powinien znaleźć ten plik za pomocą Eksploratora Windows (na przykład). Powinien edytować ten plik zwykłym edytorem.
user_MGU,

aby to znaleźć, przejdź do widoku Projekt w Android Studio i wyszukaj w pakiecie aplikacji
Gastón Saillén

12
Nie ... wszyscy wiemy, że google-services.json jest nieprawidłowy w tym numerze ... Chcemy, aby rozwiązać ten problem w wariancie kompilacji !!
MJ Studio

witamy karmę Yudi
Muhammed Fasil

Jeśli Twoja aktywność znajduje się w pod-pakiecie, takim jak: com.example.aaron.myproject22.Activities .... musisz przejść do google-services.json i zmienić nazwę_pakietu klienta na com.example.aaron.myproject22 Upewnij się również zastosowałeś wtyczkę: „com.google.gms.google-services” u dołu build.grade (aplikacja modułu)
WHOATEMYNOODLES

224

Znajdź to:

Plik google-services.json jest zwykle umieszczany w katalogu app /, ale od wersji 2.0.0-alpha3 dodano obsługę wtyczek dla typów kompilacji , dzięki czemu następująca struktura katalogów będzie poprawna:

app/src/
    main/google-services.json
    dogfood/google-services.json
    mytype1/google-services.json
    ...

Źródło

Źródło 2


16
Czy jest jakiś sposób na łatwe wyłączenie analityki dla typu kompilacji? Chcę to wyłączyć w celu debugowania? Myślałem, że zostanie wyłączony, jeśli nie dodam pliku usług Google, ale nawet jeśli wyłączę, nadal prosi o plik usług Google.
Gokhan Arik,

2
Jaka byłaby różnica w każdym pliku josn dodanym w każdym smaku?
Android

2
Czy istnieje możliwość korzystania z usług Google wewnątrz modułu (który współużytkują dwie aplikacje) ... ponieważ nie mogę nawet zsynchronizować stopni bez posiadania pliku usługi Google dla tego pakietu ... aplikacja do osadzania powinna zapewnić JSON, ale nie moduł. czy to jest w ogóle możliwe?
Georg

99

Nie znaleziono pasującego klienta dla nazwy pakietu „com.tf” Jestem prawie pewien, że „nazwa_pakietu” w google-services.json nie pasuje do twojego „applicationId” w klasie aplikacji.

stopień aplikacji:

defaultConfig {
        applicationId "com.tf" //replace with the package_name in google-services.json =
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 7
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

google-services.json

"client_info": {
        "mobilesdk_app_id": "1:23978655351:android:2b2fece6b961cc70",
        "android_client_info": {
          "package_name": "in.ac.geu.debug"
        }
      },

Rozwiązanie : Po prostu upewnij się, że package_namei applicationIdmuszą być takie same.


4
Autor pytał o obejście tego problemu. Mają różne typy kompilacji z różnymi aplikacjami
Dmitrij Guselnikov

podałeś najbardziej aktualne rozwiązanie. Kudos stary !!
Devansh sadhotra

Stopień application idw aplikacji go przybił
BlackPearl

69

upewnij się, że nazwa pakietu w pliku „google-services.json” jest taka sama jak nazwa pakietu aplikacji.


4
częsty problem podczas tworzenia repozytorium dla nowego projektu.
Zapnologica

1
tak, jeśli nazwa obu pakietów nie jest taka sama, jak nie działa
Priya

63

Znalazłem rozwiązanie:

Musimy stworzyć dwie „aplikacje” w projekcie firebase, a następnie możemy pobrać plik json z dowolnej aplikacji (pobrałem z aplikacji o smaku). Będzie zawierał dane obu aplikacji. Możemy po prostu skopiować plik json do katalogu głównego aplikacji.

Źródło: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html


10
To najlepsza odpowiedź, ponieważ wszystkie smaki produktu mogą być objęte jednym plikiem json. Nie ma potrzeby tworzenia innych zestawów źródeł.
Tash Pemhiwa

2
Pamiętaj, że musisz utworzyć aplikacje w ramach tego samego projektu. Przegląd projektu w lewym górnym rogu ma ikonę ustawień. Naciśnij go, a otworzy się karta Ogólne, przewiń w dół i pod sekcją Twoje aplikacje znajduje się przycisk Dodaj aplikację
galaxigirl

Największy problem pojawi się, gdy zapomnisz zmienić google-service.json i popchniesz go do prod.
Edgar Khimich

36

Musisz umieścić google-services.jsonw app/reż. I dla każdego typu kompilacji powinien znajdować się odpowiedni dyrektor w app/srcfolderze.

Na przykład, jeśli masz wersję i debugujesz:

app/google-services.json
app/src/debug/google-services.json

We wszystkich plikach google-services.json należy podać poprawne package_namezgodnie z typem kompilacji.

Na przykład powinien wyglądać wewnętrzny katalog debugowania {com.myapp}.debug


5
Najwyraźniej możesz nawet po prostu zduplikować element zestawu głównego w "client"tablicy (dodać przecinek między elementami) i zmienić tylko "package_name"wartość nowego elementu, aby uwzględnić .debugsufiks. Następnie odbuduj. To działało dla mnie w AS 2.3.3.
et_l

36

Ten błąd występuje, gdy masz pobrany plik Json usług Google w swoim projekcie, którego nazwa pakietu nie zgadza się z nazwą pakietu projektu .

Ostatnio zmieniłeś nazwę pakietu projektu?

Aktualizuje wszystkie klasy, ale nie plik Gradle . Więc sprawdź, czy nazwa pakietu jest poprawna w twoim Gradle, a może także Manifest.


1
dziękuję, że było pomocne
Sirwan Rahimi,

32

Za każdym razem, gdy tworzysz lub aktualizujesz package nameUpewnij się, że nazwa pakietu jest dokładnie taka sama [Duże i małe litery mają znaczenie]

Wykonaj poniżej kroku.

1). Sprawdź applicationIdw gradlepliku na poziomie aplikacji ,

2). Sprawdź package_namew swoim google-services.jsonpliku,

3). Sprawdź packagew swoim AndroidManifestpliku

i dla pełnego potwierdzenia ustaw nazwę katalogu pakietu roboczego, tj. („com.example.app”) jest również taka sama.


2
Dzięki, Bro, to zadziałało dla mnie. W pliku stopni na poziomie aplikacji mój pakiet był inny. Kiedy to zmieniłem, zadziałało dla mnie
fazil 16.08.18

wit come @fazil
Ravi Vaniya

Nie musisz zmieniać packagemanifestu (i wszystkich plików we wszystkich pakietach), ponieważ applicationIdzmieni się identyfikator aplikacji.
CoolMind,

22

Po pierwsze, dodaj przyrostek do pakietu aplikacji w Gradle:

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

Spowoduje to nazwanie twojego pakietu

com.domain.yourapp.yourFlavor

Następnie przejdź do Firebase w ramach bieżącego projektu i dodaj do niego kolejną aplikację na Androida o tej nazwie pakietu.

Następnie zastąp istniejący plik google-services.json nowym plikiem wygenerowanym za pomocą nowej aplikacji.

W rezultacie powstanie coś, co ma wiele sekcji „client_info”. Powinieneś skończyć z czymś takim:

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO",
    "android_client_info": {
      "package_name": "com.domain.yourapp"
    }
  }

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO - will be different then other app info",
    "android_client_info": {
      "package_name": "com.domain.yourapp.yourFlavor"
    }
  }

To właściwa odpowiedź! Potrzebujesz obu aplikacji (identyfikatorów) w pliku google-services.json.
Bojan Hrnkas

to jest sposób. +1, oto stara dyskusja dotycząca tego problemu
lasec0203

Prosty i prosty.
Umair

20

sprawdź, czy client_idi package_namew google-services.json pliku ma prawidłową wartość zgodnie z nazwą pakietu.

Należy dodać wspomniany plik do katalogu flavours z odpowiednią nazwą pakietu w polu client_idi package_name.


20

1. Sprawdź nazwę pakietu i identyfikator aplikacji powinny być takie same

2. Sprawdź nazwę pakietu google-services.json, który jest dostępny w folderze aplikacji



17

Otwórz plik Google-services.json i poszukaj tej sekcji w pliku:

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:857242555489:android:46d8562d82407b11",
    "android_client_info": {
      "package_name": "com.example.duke_davis.project"
    }
  }

sprawdź, czy paczka jest taka sama jak nazwa paczki. Mój był inny, więc go zmieniłem i zadziałało.


Pracowałem :) Dzięki
Spirit Solution

11

Pochodzę z React Native, ale myślę, że dotyczy to również tego pytania. Sprecyzować.

W obrębie pliku android/app/build.gradlewyszukaj applicationId(w android, defaultConfig)

i upewnij się, że ta wartość jest taka sama

client[0]client_info.android_client_info.package_name

jako wartość w ciągu google-services.json.


Ja też, dzięki, że to jest najbardziej odpowiednie
Jason Sebring


8

Jeśli nazwa pakietu w pliku Google-services.json jest w porządku, przejdź do pliku gradle.properties. Następnie zmień APPLICATION_ID = "com.yourpackage.name"


5

Myślę, że dodałeś plik firebase json „google-services” .json do nowego pliku. Upewnij się, że utworzyłeś nowy plik, sprawdź link jak utworzyć plik json z firebase i powinien pasować do nazwy twojego pakietu

Po drugie, jeśli zmieniasz nazwę pakietu, użyj opcji „zamień w ścieżce”, kiedy klikniesz prawym przyciskiem myszy pod plikami, kiedy wybierzesz projekt z menu rozwijanego. Musisz wyszukać nazwę pakietu w całym projekcie i zastąpić go!

Mam nadzieję że to pomoże !


4

jeśli nic z tego nie działało dla jednego z was, mój problem dotyczył nazwy pakietu, która nie zaczynała się od „com”. zmieniłem to, teraz działa.

mam nadzieję, że to pomaga


pracował dla mnie, dzięki
Hasan Shouman

4
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

upewnij się, że identyfikator aplikacji Gradle.app jest taki sam jak nazwa pakietu. mój problem był taki i tak rozwiązałem


3

przejdź do katalogu projektu i utwórz foldery na ścieżce app / src, które nazwają smaki Twojego produktu (takie jak Alpha, Beta, Store lub jakkolwiek nazwa Twojego smaku). następnie skopiuj plik google-services.json do każdego folderu. nie zapomnij zmienić pola „nazwa_pakietu” w pliku google-services.json każdego smaku produktu, który podfolderowałeś.


3

Przejdź do pliku google-services.json, aw części klienta sprawdź nazwę pakietu i porównaj go z nazwą pakietu aplikacji, jeśli są one różne, a następnie zmień nazwę pakietu klienta zgodnie z nazwą pakietu aplikacji, dla mnie to zadziałało.

plik google-services.json-> „nazwa_pakietu”: „com.example.application.tracker”

Nazwa pakietu aplikacji-> pakiet „com.example.application.tracker”;


2

Rozwiązałem go, tworząc dwa zestawy źródłowe, jeden bezpłatny, a drugi płatny. Oba te foldery będą zawierać wymagany kod Java i pliki zasobów, które będą edytowane zgodnie z wymaganiami danego smaku. Na przykład chcesz usunąć kod AdMob w Płatne zarówno z klas Java, jak i plików układu.


2

Rozwiązałem ten sam problem, ponownie synchronizując plik google-services.json.

Narzędzia> Firebase> Połącz z Firebase> Synchronizacja


gdzie to zrobiłeś co dokładnie to zastępuje? Zrzut ekranu?
Nasenbaer

Możesz to zrobić w Android Studio (wtyczka Firebase musi być włączona). Aktualizuje plik google-services.json.
Nabin Bhandari

2

Rozwiązałem ten sam problem tutaj proste rozwiązanie: podczas tworzenia połączenia bazy ogniowej postępuj zgodnie z następującymi wskazówkami:

  • Dodaj nazwę aplikacji w Firebase

  • Dodaj nazwę pakietu aplikacji (napisz tę samą nazwę pakietu, której używasz w aplikacji)

  • kiedy firebase utworzy plik google-services.json , wystarczy go pobrać i wkleić w folderze aplikacji

  • Zsynchronizuj swój projekt Problem został rozwiązany :)

    Dziękuję Ci


2

Ten problem pojawia się również, gdy zmieniam nazwę pakietu mojej aplikacji.

W projekcie Android Studio znajdź plik „google-services.json”. Otwórz to. i sprawdź, czy nazwa pakietu aplikacji jest taka sama, jak zapisana w tym pliku.

Nazwa pakietu i nazwa pakietu zapisane w pliku „google-services.json” muszą być takie same.


1

Oznacza to, że plik google-services.json albo nie należy do Twojej aplikacji (Czy pobrałeś google-services.json dla innej aplikacji?) ... więc aby to rozwiązać, wykonaj następujące czynności:

1: Zaloguj się do Firebase i otwórz swój projekt. 2: Kliknij ikonę Ustawienia i wybierz Ustawienia projektu. 3: Na karcie Twoje aplikacje wybierz z listy nazwę pakietu aplikacji, dla której potrzebujesz pliku konfiguracyjnego. 4: Kliknij google-services.json. Po zakończeniu pobierania dodaj nowy plik google-services.json do folderu głównego projektu, zastępując istniejący .. lub po prostu usuń stary. Pobranie pliku google-services.json dla pierwszego projektu jest bardzo normalne, a następnie założyć lub zapomnieć, że ten konkretny plik google-services.json jest dostosowany tylko do bieżącego projektu, ponieważ nie ma go, ponieważ wszystkie projekty mają unikalną nazwę pakietu.


1

Sprawdź applicationIdSuffixw pliku build.gradle aplikacji. Sprawdź, czy łączy on dowolny tekst z Twoim applicationId. Jeśli tak, usuń go.


1

możesz to zrobić, aby rozwiązać ten problem.

wprowadź opis zdjęcia tutaj


3
To zamaskuje problem zamiast go rozwiązać. Zobacz inne odpowiedzi na rozwiązanie.
Vadim Kotov

Proszę użyć kodu zamiast zrzutu ekranu, moja odpowiedź jest dobra w moim przypadku, ponieważ chcę tylko utworzyć „makietę” klonu aplikacji.
user2078023,

-1

Poprostu. Wyloguj się z Android Studio, zamknij go całkowicie. Ponownie otwórz studio Android, a następnie ponownie Zaloguj się do Android Studio.

Następnie spróbuj połączyć się z firebase ze studia IDE systemu Android. Ta procedura zadziałała dla mnie.


to nie działa, jeśli istnieje plik google-services.json. musimy usunąć google-services.json, jeśli istnieje.
Dika

zadziała to tylko raz po zmianie nazwy pakietu w pliku json, a przed zapisem należy zamknąć studio Android, a następnie zapisać plik json i ponownie uruchomić studio.
Anish Kumar

-1

Rozwiązanie tego jest proste: upewnij się, że nazwa pakietu w pliku app / build.gradle ma taką samą nazwę, jak nazwa pliku manifestu aplikacji. i upewnij się, że nazwa pakietu jest poprawna. To powinno rozwiązać ten problem

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.