เริ่มต้น GoogleService ไม่สำเร็จ


113

ฉันใช้ Google Maps ในแอปพลิเคชัน Android ของฉัน ฉันได้สร้างคีย์และเพิ่มสิทธิ์ที่จำเป็นในไฟล์รายการแล้ว แต่ในไม่ช้าฉันก็เริ่มแอปพลิเคชันฉันได้รับข้อความนี้ในดีบักเกอร์:

GoogleService ไม่สามารถเริ่มต้นได้สถานะ: 10 ขาดทรัพยากรที่คาดไว้: 'R.string.google_app_id' สำหรับการเริ่มต้นบริการของ Google สาเหตุที่เป็นไปได้คือไม่มีปลั๊กอิน google-services.json หรือ com.google.gms.google-services gradle

ฉันไม่แน่ใจว่าเกิดอะไรขึ้น แผนที่ใช้งานได้ดีและฉันสามารถใช้งานได้โดยไม่มีปัญหาใด ๆ ไฟล์ gradle ของฉันมีรายการนี้:

คอมไพล์ 'com.google.android.gms: play-services: 8.4.0'

บ่นเรื่องอะไรและฉันจะบรรเทาได้อย่างไร?


รายการนี้อยู่ในรายการของคุณหรือไม่: <meta-data android: name = "com.google.android.gms.version" android: value = "@ integer / google_play_services_version" />
j2emanue


ฉันลองทั้งสองอย่างแล้ว แต่ยังได้รับข้อความเหมือนเดิม!
Zach

1
คุณอัปเดตบริการการเล่นอุปกรณ์ APK หรือไม่
Abhigyan

วิธีแก้ปัญหาเหล่านี้ไม่ได้ผล แต่การอัปเดต APK ของบริการดูเหมือนจะเป็นการหลอกลวง!
midoriha_senpai

คำตอบ:


38

คุณต้องวางไฟล์การกำหนดค่า ( google-services.json) ที่สร้างโดยdeveloper.google.comดังที่กล่าวไว้ในขั้นตอนที่ 2 ของเอกสารอย่างเป็นทางการที่นี่

กระบวนการนี้ง่าย

  1. คุณสามารถเลือกโครงการของคุณหรือสร้างใหม่
  2. จากนั้นหลังจากเลือกบริการที่ต้องการ (ในกรณีนี้คือบริการแผนที่) คุณสามารถสร้างไฟล์กำหนดค่าได้

    สำหรับผู้ที่ย้ายข้อมูลไปยังโครงการ Firebase พวกเขาสามารถรับสิ่งเดียวกันได้โดยไปที่Firebase Consoleเลือกโครงการของคุณและภายใต้การตั้งค่าคุณจะพบไฟล์การกำหนดค่า

  3. จากนั้นตามที่ยกมาในขั้นตอนที่ 3 ของเอกสารอย่างเป็นทางการที่นี่

    คัดลอกgoogle-services.jsonไฟล์ที่คุณเพิ่งดาวน์โหลดลงในแอป / หรืออุปกรณ์เคลื่อนที่ / ไดเร็กทอรีของ Android ของคุณ

PS: สำหรับผู้ที่ลงคะแนนคำตอบนี้โปรดแสดงความคิดเห็นว่าเหตุใดคุณจึงไม่ลงคะแนน


6
เราต้องการสิ่งนี้ในแอปของเราด้วยบริการ Google Play เวอร์ชันใหม่หรือไม่ หรือเป็นเพียงการลงชื่อเข้าใช้ Google ดูเหมือนจะแปลกที่บันทึกทำให้ฉันเกิดข้อผิดพลาดราวกับว่าฉันต้องการมัน แต่ฉันอาจจะไม่
RED_

2
@Radix ... ฉันไปที่ลิงค์ที่คุณแชร์ แต่มันขอให้ฉันลงทะเบียน Google Sign In หรือ Google Cloud Messaging ... ไม่มีอะไรเกี่ยวกับแผนที่ ความคิดใด ๆ ? นอกจากนี้การคัดลอกไฟล์ json นี้ไปที่ด้านล่าง / app เป็นเรื่องแปลก ... คุณสามารถอธิบายได้หรือไม่? ขอบคุณมาก!
Johnny Wu

2
เรามี google-services.json ในแอปของเราแล้ว แต่เราต้องสร้างขึ้นใหม่เมื่ออัปเกรดเป็น 8.4.0
Roy Solberg

1
ปัญหาเดียวกันการเพิ่ม google-services.json ไม่ได้ช่วยอะไรแปลกที่มันไม่เห็น gcm ที่เปิดใช้งานแล้วของฉันและต้องการสร้างรหัสเซิร์ฟเวอร์ของตัวเองทุกครั้ง
Andrew V.

11
ดูคำตอบที่ถูกต้องจากผู้จัดการผลิตภัณฑ์ที่ Google: stackoverflow.com/questions/34365369/…
Ahmed Mounir

52

[จาก Product Manager @ Google]

คุณสามารถแก้ไขปัญหานี้ได้โดยดาวน์โหลดและคัดลอกgoogle-services.jsonไฟล์สำหรับแอป Android ของคุณโดยทำตามขั้นตอนด้านล่าง:

  • เลือกแอปชื่อ / โครงการและแพคเกจ Android จากลิงค์นี้Continue to Choose and configure servicesและคลิก
  • Continue to Generate Configuration filesคลิก
  • ดาวน์โหลดgoogle-services.jsonและคัดลอกไฟล์ไปยังไดเร็กทอรีapp/หรือmobile/โมดูลในโครงการ Android ของคุณ

หากคุณเคยนำเข้าโปรเจ็กต์ Google ของคุณไปยัง Firebase คุณสามารถรับ google-services.json ที่อัปเดตได้จากคอนโซล Firebaseภายใต้การตั้งค่าโครงการ

อย่าคัดลอก PROJECT_NUMBER ตามที่คำตอบอื่น ๆ แนะนำเนื่องจาก google_app_id อ้างถึงแอปของคุณภายในโครงการไม่ใช่ตัวโครงการ


1
สำหรับผู้ที่ใช้ปลั๊กอินการทดลองแบบ Gradle Google-services.json จะไม่มีผลโดยตรง โปรดดูที่stackoverflow.com/a/38097895/457137สำหรับวิธีแก้ปัญหา
zevoid

เหตุใดจึงจำเป็นต้องรวมไฟล์ json เหตุใดฉันจึงไม่สามารถจัดหา id ที่รันไทม์ในโค้ดได้
der_michael

ไฟล์ไปใน/ app dir ไม่ใช่ dir ระดับบนสุด?
IgorGanapolsky

11

ในกรณีของฉันสาเหตุของข้อผิดพลาดนี้คือปลั๊กอิน Google Services สำหรับ Gradle และไลบรารี Play Services เป็นเวอร์ชันที่เข้ากันไม่ได้ คำแนะนำสำหรับรุ่นที่เข้ากันได้:

1) เพิ่มการอ้างอิงให้กับ build.gradle ระดับโปรเจ็กต์ของคุณ:

classpath 'com.google.gms:google-services:1.5.0-beta2'

2) เพิ่มปลั๊กอินใน build.gradle ระดับแอปของคุณ:

apply plugin: 'com.google.gms.google-services'

3) หากคุณใช้ Android Studio นี่คือสตริงที่จะเพิ่มในส่วนการอ้างอิงของไฟล์ build.gradle ของแอปพลิเคชันของคุณ:

dependencies {
  compile "com.google.android.gms:play-services:8.3.0"
}

ที่มา: https://developers.google.com/cloud-messaging/android/client


1
ขอบคุณ แต่สิ่งนี้ไม่ได้ผลสำหรับฉัน - Android Studio ยืนยันว่าฉันได้ติดตั้งไฟล์ google-services.json ไว้แล้วแม้ว่าฉันคิดว่ามันไม่จำเป็นหากคุณทำตามสามขั้นตอนข้างต้นซึ่งจะแทนที่ความต้องการไฟล์? สิ่งที่ทำให้ฉันถาม: ทำไมฉันจึงต้องมีระบบการลงชื่อเข้าใช้ของผู้ใช้ Google หากสิ่งที่ฉันมีให้คือการทำแผนที่พื้นฐาน
iaindownie

1
วิธีแก้ปัญหาของฉันไม่อยู่ในรายการดังนั้นฉันจึงตอบคำถามเพื่อให้ทางแก้ปัญหานี้แก่ผู้อื่น ในกรณีของคุณคุณอาจติดตั้งไลบรารีเพิ่มเติม ลองใช้com.google.android.gms:play-services-maps:8.4.0
13rac1

@eosrei ใช้ com.google.android.gms เท่านั้น: play-services-maps: 8.4.0 ใช้ได้สำหรับฉันขอบคุณ!
akshay7692

4

ผมได้พบกับปัญหาเดียวกันและแก้ไขได้ตามวิธีการแก้ปัญหาอย่างเป็นทางการ

ขั้นตอนมีดังนี้

  1. รับไฟล์การกำหนดค่าgoogle-services.jsonจากลิงค์นี้

  2. คัดลอกgoogle-services.jsonไฟล์ที่คุณเพิ่งดาวน์โหลดลงในแอป / หรือไดเร็กทอรีมือถือ / ของโครงการ Android Studio ของคุณ

  3. เพิ่มการอ้างอิงให้กับ build.gradle ระดับโปรเจ็กต์ของคุณ:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
  4. เพิ่มปลั๊กอินใน build.gradle ระดับแอปของคุณ:

    apply plugin: 'com.google.gms.google-services'
  5. เพิ่มการอ้างอิงนี้ให้กับ build.gradle ระดับแอปของคุณ:

    dependencies {
        compile "com.google.android.gms:play-services:8.3.0"
    }

1
ฉันคิดว่าควรใช้ com.google.gms: google-services: 1.5.0 ดีกว่าเพราะจะดีกว่าเวอร์ชันเบต้าเพื่อลบข้อผิดพลาดที่คาดเดาไม่ได้ในแอปของคุณ
Andrew V.

@AndrewV ใช่ฉันเห็นด้วย. เวอร์ชัน "1.5.0-beta2" ถูกคัดลอกมาจากลิงก์ที่ฉันให้ไว้ด้านบน
จะ

1

สำหรับผู้ที่ประสบปัญหานี้แม้ว่าจะตั้งค่าบริการเล่นและวางgoogle-services.jsonไฟล์ในproject/appโฟลเดอร์อย่างถูกต้องแล้วก็ตามวิธีแก้ปัญหาที่แท้จริงคือ

Build > Rebuild Project

อาจเป็นเพราะความจริงที่ว่าสตริงจากไฟล์ json ไม่ได้รวมเข้ากับรีซอร์สที่คอมไพล์จนกว่าจะดำเนินการสร้างใหม่ทั้งหมด


1

สำหรับ Xamarin / Visual Studio Mac ฉันต้องการเพิ่มสิ่งนี้ที่ด้านล่างของ Droid.csproj

<Target Name="ProcessGoogleServicesJson" Condition=" '@(GoogleServicesJson)' != '' AND '$(AndroidApplication)' == 'True' AND '$(DesignTimeBuild)' != 'True'" BeforeTargets="$(ProcessGoogleServicesJsonBeforeTargets)" AfterTargets="$(ProcessGoogleServicesJsonAfterTargets)">
<Message Text="Using ProcessGoogleServicesJson override" Importance="high" />
<ProcessGoogleServicesJson GoogleServicesJsons="@(GoogleServicesJson)" IntermediateOutputPath="$(IntermediateOutputPath)" MonoAndroidResDirIntermediate="$(MonoAndroidResDirIntermediate)" AndroidPackageName="$(_AndroidPackage)">
    <Output ItemName="_AndroidResourceDest" TaskParameter="GoogleServicesGeneratedResources" />
    <Output ItemName="FileWrites" TaskParameter="GoogleServicesGeneratedResources" />
</ProcessGoogleServicesJson>
<ItemGroup>
    <FileWrites Include="$(IntermediateOutputPath)\ProcessGoogleServicesJson.stamp" />
</ItemGroup>

https://github.com/xamarin/GooglePlayServicesComponents/issues/64


0

สิ่งนี้ก็เกิดขึ้นกับฉันเช่นกัน ในกรณีของฉันเป็นเพราะ Android studio พยายามแทรกโค้ดบางอย่างในกิจกรรมหลักของฉัน การลบโค้ดจะแก้ไขข้อผิดพลาด

โค้ดที่แทรกเกี่ยวกับการจัดทำดัชนีแอป:

https://developers.google.com/app-indexing/android/publish


0

ฉันมีปัญหาเดียวกันในตอนนั้น สามารถแก้ได้โดยใช้เฉพาะไลบรารีบริการการเล่นที่จำเป็นซึ่งในกรณีของฉัน GCM

แต่com.google.android.gms:play-services:8.4.0ฉันใช้ com.google.android.gms:play-services-gcm:8.4.0. ดูที่นี่สำหรับข้อมูลเพิ่มเติม; นอกจากนี้ยังช่วยแก้ปัญหา multidex

จากนั้นฉันใช้วิธีการทั้ง @Radix และ @ Alexander เพื่อลบข้อความที่ GCM ได้รับการส่งออกใน logcat เกี่ยวกับไฟล์google-services.json.



0

การแก้ไขด่วนที่ฉันใช้คือการปิดใช้งานการเซ็นชื่อ หากคุณไม่ต้องการสร้างรหัสการผลิตคุณสามารถตั้งค่าตัวแปรการสร้างของคุณเป็น debug, localOldDebug หรือ localDebug

คลิกที่ Build Variants ที่ด้านล่างซ้ายใน Android Studio

วิธีที่จะปิดการใช้งานที่สร้างได้ลงชื่อ apk-หุ่นยนต์สตูดิโอ


สามารถถามคำถามเป็นความคิดเห็น
jjj

-2

มีทางออกอื่นที่ฉันลบโดยไม่ได้ตั้งใจ

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

เพิ่มสิ่งนี้และใช้งานได้สำหรับโซลูชันใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.