Paket adı için eşleşen müşteri bulunamadı (Google Analytics) - birden fazla ürün


383

Bağlam:

Uygulamam için Google Analytics kurmaya çalışıyorum. (4 özel buildTypesve birkaç taneden fazla productFlavors)

Ayarlanmış Build Variantolanı (oluştururken kullanılan paket adı ) seçtiğimde iyi çalışıyor . Ancak, diğer tatlarımın farklı uygulamaları var.applicationIdcom.my.app.package.namegoogle-services.json

Resmi devguide'i takip ettim için .

Build Variants Tab(Farklı bir applicationId(paket adı) olan başka bir yapı değişkeni seçildiğinde hata alıyorum :

Hata: ': app: processAllcategoriesDebugfreeGoogleServices' görevi için yürütme başarısız oldu.

'Com.my.app.package.name.debug' paket adı için eşleşen bir istemci bulunamadı

Hata Mesajının Açıklaması:

Yukarıdaki hata mesajındaki görev adında Debugfreebenim özel buildTypeve Allcategoriesbenim biridir productFlavors.

Hatayı anlıyorum ve paket adının json oluştururken kullandığımdan farklı olduğunu biliyorum, ama bu şekilde bir yol bulmaya çalışıyorum.

Sorun:

Şimdi, google-services.jsoniçinde bulunduğuapp klasörün ve dolayısıyla ben lezzet özgü kaynak seti klasöründe bırakarak her ürün lezzet için onları ayırmak mümkün değil.

Sorular:

  1. Benim özel byildTypeayıklama için son ekleri .debugiçin applicationId(paket adı). google-services.jsonSerbest bıraktığım applicationId(yani sonek olmadan .debug) çalışmasını sağlayabileceğim bir yol var mı
  2. google-services.jsonGerekli dosyayı appklasöre kopyalamak için ayrı dosyalar ve görevler kullanmadan aynı dosyada yapılandırılmış birden fazla ürün çeşidi bulundurmanın bir yolu var mı ? Bu yazıdatask bahsedildiği gibi yapılabilir biliyorum . Gradle yapılandırmasına göre sadece bir dosyaya sahip olmanın veya doğru dosyayı seçmenin daha kolay bir yolu var mı?
  3. Gördüğüm package_namealanın google-services.jsonpaket adı var com.my.app.package.name. Tüm derleme varyantlarında çalışmak için el ile birden çok paket adı ekleyebilir miyim? Cevabınız evet ise, nasıl yapılır? Belgelerde talimat bulunamadı.

1
Özellikle üçüncü sorunuz için bir çözüm buldunuz mu?
Mate

Ben benzer durumdayım. Yalnızca prod-release lezzet versiyonlarından biri için analiz desteğine ihtiyacım var. Ben prod-lezzet eklenen bağımlılığı sınırlamak mümkün ama yine de oğlu dosyasının bir parçası olarak doğru paket için arama. Herhangi bir öneri !
CoDe

1
Ben de aynı sorunla karşı karşıyayım, kimse bunun için bir çözüm bulursa bana bildirin?
Deepanshu Sinha

Yanıtlar:


381

Google-services.json adresindeki paket adınızı kontrol edin o uygulamanızın yerel paket adıyla aynı olmalıdır

Misal

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

Bu durumda benim yerel paket ismim com.my.app.package.name yani google-services.json'daki paket ismimi yerel paket isimle değiştirdim


google-services.json bir dosyadır !!! bir uygulama dizini içinde. Bu dosyayı Windows Gezgini yardımıyla bulmalısınız (örneğin). Bu dosyayı her zamanki düzenleyici tarafından düzenlemelisiniz.
user_MGU

bulmak için Android Studio'da Proje görünümüne gidin ve uygulama paketinizin içinde arama yapın
Gastón Saillén

12
Hayır ... hepimiz google-services.json'un bu sayıda geçersiz olduğunu biliyoruz ... İstediğimiz şey bu sorunu yapı varyantı durumunda nasıl çözeceğidir!
MJ Studio

Yudi karma
Muhammed Fasil

Etkinliğiniz com.example.aaron.myproject22.Activities .... gibi bir alt pakette bulunuyorsa, google-services.json adresine gitmeniz ve client_info'nun paket_adı değerini com.example.aaron.myproject22 olarak değiştirmeniz gerekir. eklenti uyguladınız: build.grade altındaki 'com.google.gms.google-services' (Modül uygulaması)
WHOATEMYNOODLES

224

Bunu buldum:

Google-services.json dosyası genellikle uygulama / dizine yerleştirilir, ancak derleme türleri için eklenti desteğinin 2.0.0-alpha3 sürümünden itibaren aşağıdaki dizin yapısını geçerli kılar:

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

Kaynak

Kaynak 2


16
Bir derleme türü için analizi kolayca devre dışı bırakmanın bir yolu var mı? Hata Ayıklama için devre dışı bırakmak istiyorum? Google-services dosyasını eklemezsem devre dışı bırakılacağını düşündüm, ancak devre dışı bıraksam bile yine de google-services dosyasını istiyor.
Gökhan Arik

2
Her bir lezzette her josn dosyasının farkı ne olur?
Android

2
Bir modül içinde google hizmetlerini kullanmak için bir olasılık var mı (iki uygulama paylaşıyor) ... çünkü bu paket için bir google hizmet dosyası olmadan gradle-sync bile yapamıyorum ... gömme uygulaması json sağlamalıdır, ancak modül değil. bu zaten mümkün mü?
Georg

99

'Com.tf' paket adı için eşleşen istemci bulunamadı google-services.json içindeki "package_name" eminim.

uygulama boyutu:

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"
        }
      },

Çözüm : package_nameve applicationIdöğesinin aynı olduğundan emin olun .


4
Yazar bunun için bir çözüm soruyordu. Farklı uygulamalara sahip farklı yapı tipleri var
Dmitry Guselnikov

en geçerli çözüme verdiniz. Kudos adam !!
Devansh sadhotra

application idUygulamanın gradle de çivilenmiş
BlackPearl

69

"google-services.json" dosyasındaki paket adınızın, uygulamanızın paket adıyla aynı olduğundan emin olun.


4
yeni bir proje için repo isterken yaygın bir sorun.
Zapnologica

1
evet eğer her iki paket adı da çalışmıyorsa aynı değil
Priya

63

Çözümü buldum:

Firebase projesinde iki "uygulama" oluşturmak zorundayız ve sonra herhangi bir uygulamadan (aromalı uygulamadan indirdim) json dosyasını indirebiliriz. Her iki uygulama için de veriler içerir. Json dosyasını uygulamanın kök dizinine kopyalayabiliriz.

Kaynak: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html


10
Tüm ürün lezzetleri bir json dosyası ile kaplanabileceğinden bu en iyi cevaptır. Başka kaynak setleri oluşturmaya gerek yok.
Tash Pemhiwa

2
Uygulamaları aynı proje içinde oluşturmanız gerektiğini lütfen unutmayın. Sol üst köşedeki Projeye Genel Bakış bir ayarlar simgesine sahiptir. Basın ve Genel sekmesine açılır, aşağı kaydırın ve Uygulamalarınız bölümünün altında Uygulama Ekle düğmesi vardır
galaxigirl

En büyük sorun, google-service.json'unuzu değiştirmeyi ve prod.
Edgar Khimich

36

Dir google-services.jsoniçine yerleştirmeniz gerekir app/. Ve her yapı türü için, app/src klasörde .

Örneğin, sürümünüz ve hata ayıklamanız varsa:

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

Tüm google-services.json dosyalarında package_namederleme türüne göre doğru belirtmelisiniz .

Örneğin, hata ayıklama dizininde şöyle olmalıdır {com.myapp}.debug


5
Görünüşe göre ana "client"dizinin elemanını 'dizisinde çoğaltabilir (elemanlar arasına virgül ekleyebilir) ve soneki "package_name"dahil etmek için yeni elemanın sadece değerini değiştirebilirsiniz .debug. Sonra yeniden inşa. Benim için AS 2.3.3 üzerinde çalıştı.
et_l

36

Bu hata, projenizde Paket adı Projenizin paket adıyla eşleşmeyen bir Google Services Json dosyanız indirildiğinde oluşur .

Son zamanlarda projenin paket adını yeniden adlandırdınız mı?

Gradle dosyasını değil, tüm sınıfları günceller . Bu nedenle paket adınızın Gradle'ınızda doğru olup olmadığını ve ayrıca Manifest'i de kontrol edin.


1
teşekkürler u yardımcı oldu
Sirwan Rahimi

32

Her oluşturduğunuzda veya güncellediğinizde package namePaket adınızın tamamen aynı olduğundan emin olun [Büyük ve küçük harfler önemlidir]

Aşağıdaki adımı uygulayın.

1). applicationIdUygulama düzeyinde gradledosyayı kontrol edin ,

2). Kontrol package_namesenin içinde google-services.jsondosyanın,

3). Kontrol packagesenin içinde AndroidManifestdosyanın

ve tam onay için çalışma paketinizin dizin adını yapın yani ("com.example.app") da aynıdır.


2
Teşekkürler Bro benim için çalıştı. Uygulama düzeyinde gradle dosyasında benim paket farklıydı. Değiştirdiğimde benim için çalıştı
fazil

wel come @fazil
Ravi Vaniya

Uygulama kimliğini değiştireceği packagegibi applicationId, bildirimde (ve tüm paketlerdeki tüm dosyalarda) değişiklik yapmanız gerekmez .
CoolMind

22

Öncelikle Gradle'daki uygulama paketine bir sonek ekleyin:

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

Bu, paketinizin adlandırılmasına neden olur

com.domain.yourapp.yourFlavor

Ardından mevcut projeniz altında Firebase'e gidin ve bu paket adıyla başka bir android uygulaması ekleyin.

Ardından, mevcut google-services.json dosyasını, içindeki yeni uygulama ile oluşturduğunuz yenisiyle değiştirin.

Sonra birden çok "client_info" bölümü olan bir şey elde edeceksiniz. Yani böyle bir şeyle sonuçlanmalısın:

"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"
    }
  }

Bu doğru cevap! Google-services.json dosyasında her iki Uygulamaya da (kimliğe) ihtiyacınız vardır.
Bojan Hrnkas

bu şekilde. +1, bu konuyla ilgili bazı eski tartışmalar
lasec0203

Basit ve basit.
Umair

20

olmadığını kontrol client_idve package_nameiçinde google-services.json sizin paket adına göre doğru bir değere sahiptir.

Bahsedilen dosyayı client_idve package_namealanında karşılık gelen paket adıyla flavors dizinine eklemelisiniz .


20

1.Paket adını ve Uygulama Kimliğini Doğrulayın aynı olmalıdır

2. uygulama klasöründe bulunan google-services.json paket adını doğrulayın



17

Google-services.json dosyanızı açın ve dosyada bu bölümü arayın:

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

paketin paket adınızla aynı olup olmadığını kontrol edin. Benimki farklıydı, ben de değiştirdim ve işe yaradı.


Çalıştı :) Teşekkürler
Çözüm Ruhu

11

Ben yerli tepki gelen ama bu da bu soru için geçerli olduğunu düşünüyorum. Belirtmek için.

Dosya içinde (içinde , içinde ) android/app/build.gradlearamaapplicationIdandroiddefaultConfig

ve bu değerin aynı olduğundan emin olun

client[0]client_info.android_client_info.package_name

içindeki değer olarak google-services.json.


Ben de, teşekkürler bu en uygulanabilir
Jason Sebring

9

Ayrıca google-services.json adresinde paket adını değiştirmeniz gerekir


8

Google-services.json dosyasındaki paket adınız uygunsa, gradle.properties dosyasına gidin. Ardından APPLICATION_ID = "com.yourpackage.name" ifadenizi değiştirin


5

Ben yeni dosya ile firebase json dosyası "google-services" .json eklediniz düşünüyorum. Yeni bir dosya oluşturduğunuzdan emin olun , ateş tabanından json dosyası oluşturma bağlantısını kontrol edin ve paket adınızla eşleşmelidir

İkinci şey, paket adını değiştiriyorsanız, açılır listeden proje seçtiğinizde dosyaların altına sağ tıkladığınızda "yol değiştir" seçeneğini kullanın. Tüm projede paket adını aramalı ve değiştirmelisiniz!

Bu yardımcı olur umarım !


4

hiçbiri sizden biri için işe yaramadıysa, benim sorunum 'com' ile başlamayan bir paket adıydı. değiştirdi, şimdi çalışıyor.

umarım yardımcı olur


benim için çalıştı, teşekkürler
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"
    }

Gradle.app'ın applicationId dosyasının paket adınızla aynı olduğundan emin olun. benim sorunum buydu ve bu şekilde çözdüm


3

proje dizininize gidin ve uygulama / src yolunda ürün lezzetlerinizi (Alpha, Beta, Mağaza veya lezzetinizin adı ne olursa olsun) adlandıran klasörler oluşturun. ardından google-services.json dosyanızı her klasöre kopyalayın. her bir ürün çeşidinin google-services.json dosyasındaki "paket_adı" alanını değiştirmeyi unutmayın.


3

Google-services.json dosyasına gidin ve istemci bölümünde paket adını kontrol edin ve farklıysa Uygulama paketi adıyla karşılaştırın ve daha sonra şans için en iyi şekilde çalıştığınız uygulama paketi adınıza göre istemci paketi adını değiştirin.

google-services.json dosyası-> "paket_adı": "com.example.application.tracker"

Uygulama paketi adı-> paket "com.example.application.tracker";


2

Biri ücretsiz diğeri ücretli iki kaynak seti yaparak çözdüm. Bu klasörlerin her ikisi de, belirli lezzetin gereksinimlerine göre düzenlenecek gerekli java kodu ve kaynak dosyalarını içerecektir. Örneğin, Ücretli AdMob Kodunu hem Java Sınıflarından hem de Düzen Dosyalarından kaldırmak istiyorsunuz.


2

Aynı sorunu dosyayı yeniden senkronize ederek çözdüm google-services.json.

Araçlar> Firebase> Firebase'e Bağlan> Senkronizasyon


bunu nerede yaptın tam olarak neyin yerini alıyor? Ekran?
Nasenbaer

Bunu Android Studio'da yapabilirsiniz (Firebase eklentisi etkinleştirilmelidir). Dosyayı günceller google-services.json.
Nabin Bhandari

2

Burada aynı sorunu basit bir çözüm olarak çözdüm : Firebase bağlantısı oluşturduğunuzda şu yönergeleri izleyin:

  • Firebase'de uygulama adınızı ekleyin

  • Uygulama pakage adınızı ekleyin (aynı pakage adını yazın, uygulamada kullanıyorsunuz)

  • Firebase google-services.json dosyasını oluşturduğunda sadece indirin ve uygulama klasörünüze yapıştırın

  • Projenizi senkronize edin Sorun çözüldü :)

    teşekkür ederim


2

Uygulamamın paket adını değiştirdiğimde de bu sorunu alıyorum.

Android stüdyo projenizde "google-services.json" dosyasını bulun. Aç onu. ve uygulamanızın paket adının bu dosyada yazılanla aynı olup olmadığını kontrol edin.

Uygulamanızın paket adı ile "google-services.json" dosyasında yazılı paket adı aynı olmalıdır.


1

Bu, google-services.json dosyanızın uygulamanıza ait olmadığı anlamına gelir (Başka bir uygulama için google-services.json'u indirdiniz mi?) ... bunu çözmek için aşağıdakileri yapın:

1: Firebase'de oturum açın ve projenizi açın. 2: Ayarlar simgesini tıklayın ve Proje ayarları'nı seçin. 3: Uygulama kartınızda, listeden bir yapılandırma dosyasına ihtiyacınız olan uygulamanın paket adını seçin. 4: google-services.json'u tıklayın. İndirme işlemi tamamlandıktan sonra, yeni google-services.json dosyasını proje kök klasörünüze ekleyin, mevcut olanı değiştirin ... ya da sadece eskisini silin. İlk projeniz için google-services.json'u indirmek ve daha sonra bu belirli google-services.json'un yalnızca mevcut projeniz için özel olarak tasarlandığını varsayalım veya unutmak çok normaldir, çünkü diğer tüm projeler benzersiz bir paket adına sahiptir.


1

Kontrol edin applicationIdSuffixUygulamanızın build.gradle dosyasında. Herhangi bir metni birleştirip birleştirmediğinizi görün applicationId. Öyleyse çıkarın.


1

bunu bu sorunu çözmek için yapabilirsiniz.

resim açıklamasını buraya girin


3
Bu, sorunu çözmek yerine sorunu maskeleyecektir. Çözüm için diğer yanıtlara bakın.
Vadim Kotov

Lütfen ekran görüntüsü yerine kodu kullanın, cevabım iyi, çünkü sadece bir uygulama klonunun "maketini" oluşturmak istiyorum.
user2078023

-1

Sadece basit. Android Studio'dan çıkış yapın, tamamen kapatın. Android stüdyosunu yeniden açın ve ardından Android Studio'da tekrar oturum açın.

Sonra Android Studio IDE'den ateş tabanına bağlanmayı deneyin. Bu prosedür benim için çalıştı.


google-services.json varsa bu çalışmaz. varsa google-services.json dosyasını silmeliyiz.
Dika

Bu, json dosyasındaki paket adını değiştirdikten sonra bir kez çalışacaktır ve bunu kaydetmeden önce, android stüdyosunu kapatmanız ve ardından json dosyasını kaydetmeniz ve stüdyoyu yeniden başlatmanız gerekir.
Anish Kumar

-1

Bunu çözmek kolaydır: sadece app / build.gradle dosyanızdaki paket adının, App Manifest dosyanızdaki paket adıyla aynı olduğundan emin olun. ve paket adının doğru olduğundan emin olun. Bunu çözmeli

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.