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.
AndroidMechanic - Viral Patel
źródło
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

Muhammed Fasil
źródło
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

AndroidMechanic - Viral Patel
źródło
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.

Kailash Karki
źródło
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.

Cahit Beyaz
źródło
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

Usman
źródło
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

Bogdan Ustyak
źródło
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.

devDeejay
źródło
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.

Ravi Vaniya
źródło
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"
    }
  }
Droid Chris
źródło
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.

Shayan Amani
źródło
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

John Ruban Singh
źródło
18

Upewnij się, że zmieniłeś nazwę ApplicationId w pliku gradle po zmianie nazwy pakietu

Arsalan Shah
źródło
2
Uratował mnie Dzięki.
VipulKumar
cieszę się, że pomógł komuś
Arsalan Shah
1
dzięki! które rozwiązało mój problem.
Riddhi,
Rozwiązałem też mój problem!
Kanagalingam
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.

DAVIS BENNY 15MIS0426
źródł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.

ThomasReggi
źródło
Ja też, dzięki, że to jest najbardziej odpowiednie
Jason Sebring
9

Musisz także zmienić nazwę pakietu w google-services.json

SH Mehdi
źródło
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"

Dulal Kisku
źródło
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 !

Ashok Kumar KR
źródło
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

Eiran
źródło
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

Bayar Şahintekin
źródło
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ś.

Osman Yalın
źródło
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”;

Shah Rukh
źródło
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.

Abhiroj Panwar
źródło
2

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

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

Nabin Bhandari
źródło
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

Chaudhary Nouman
źródło
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.

mehmoodnisar125
źródło
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.

RileyManda
źródło
1

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

Arsalan Shah
źródło
1

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

wprowadź opis zdjęcia tutaj

Android 上 的 Android Android
źródło
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.

Prakash P.
źródło
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

James Idowu
źródło