เอกสาร / การตั้งค่า / Android / Google Maps

การตั้งค่า Google Maps

นี่คือขั้นตอนการใช้งาน Google Maps SDK for Android จาก MapConductor ครอบคลุมตั้งแต่การรับคีย์ API การแทรกคีย์ด้วย Secrets Gradle Plugin ไปจนถึงการแสดง GoogleMapView

MODULE
com.mapconductor:for-googlemaps
API KEY
จำเป็น
VIEW
GoogleMapView
TIME
15 นาที
ผู้ให้บริการเดียวกัน แพลตฟอร์มอื่นiOSReact

ก่อนเริ่ม

สภาพแวดล้อมการพัฒนา Android (Android Studio)
บัญชี Google Cloud Console
Maps SDK for Android ถูกเปิดใช้งานในโปรเจกต์ Google Cloud
STEP 01

รับคีย์ API

  1. เข้าถึง Google Cloud Console
  2. สร้างโปรเจกต์ใหม่หรือเลือกโปรเจกต์ที่มีอยู่
  3. เปิดใช้งาน Maps SDK for Android
  4. สร้างคีย์ API จาก "ข้อมูลเข้าสู่ระบบ"
  5. จำกัดคีย์ด้วยชื่อแพ็กเกจของแอปและลายนิ้วมือ SHA-1 ของใบรับรอง
เนื่องจากใบรับรองที่ใช้ลงนามสำหรับ Debug Build และ Release Build แตกต่างกัน คุณจึงต้องลงทะเบียน SHA-1 แยกกัน
STEP 02

ติดตั้ง Secrets Gradle Plugin

นี่คือกลไกเพื่อหลีกเลี่ยงการนำคีย์ไปวางในการจัดการซอร์สโค้ด ปลั๊กอินจะอ่าน secrets.properties และแทรกค่าลงในตัวยึดตำแหน่งใน AndroidManifest.xml ขณะบิลด์

(root)/build.gradle.ktsKotlin
plugins {
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false
}
STEP 03

เพิ่ม Dependencies

เพิ่ม Google Maps SDK และโมดูล MapConductor ลงในแอป และใช้ Secrets Gradle Plugin รุ่นของ MapConductor จะถูกกำหนดรวมโดย BOM

app/build.gradle.ktsKotlin
plugins {
    // ... other plugins
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
}

dependencies {
    // Google Maps SDK
    implementation("com.google.android.gms:play-services-maps:20.0.0")

    // MapConductor BOM pins every module below
    implementation(platform("com.mapconductor:mapconductor-bom:1.3.1"))

    implementation("com.mapconductor:core")
    implementation("com.mapconductor:for-googlemaps")
    // Optional: compose / icons / heatmap / marker-clustering / geojson / kml
}
STEP 04

ตั้งค่า Manifest และคีย์

เขียนเฉพาะตัวยึดตำแหน่งในไฟล์ Manifest และวางค่าจริงไว้ใน secrets.properties ปลั๊กอินจะทำการแทนที่ขณะบิลด์

AndroidManifest.xmlXML
<manifest>
    <!-- Add location permissions -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application>
        <!-- Google Maps API Key -->
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="${GOOGLE_MAPS_API_KEY}" />
    </application>
</manifest>
secrets.propertiesProperties
GOOGLE_MAPS_API_KEY=your_actual_api_key
แอปที่ไม่ใช้ข้อมูลตำแหน่งไม่จำเป็นต้องใช้ ACCESS_*__LOCATION สำหรับการรับไทล์ จำเป็นต้องใช้เพียง INTERNET เท่านั้น
ข้อควรระวัง
อย่า commit secrets.properties ลงในการจัดการเวอร์ชัน การเพิ่มลงใน .gitignore จะช่วยป้องกันข้อผิดพลาด ใน CI ให้ส่งผ่านช่องทางที่ปลอดภัยอื่น เช่น ตัวแปรสภาพแวดล้อม
STEP 05

ตั้งค่า ProGuard / R8 (หากเกี่ยวข้อง)

หากคุณเปิดใช้การทำให้โค้ดสับสน ให้เก็บคลาสของ Play Services Maps ไว้

proguard-rules.proProGuard
# Google Play Services
-keep class com.google.android.gms.maps.** { *; }
-keep interface com.google.android.gms.maps.** { *; }
-dontwarn com.google.android.gms.**

ตรวจสอบ

สิ่งที่ควรเห็น

บิลด์และเรียกใช้หน้าจอนี้ หากแผนที่ปรากฏและซูมและเลื่อนแผนที่ได้ แสดงว่าการตั้งค่าเสร็จสมบูรณ์

TestGoogleMaps.ktJetpack Compose
@Composable
fun TestGoogleMaps(modifier: Modifier = Modifier) {
    val mapState = rememberGoogleMapViewState(
        cameraPosition = MapCameraPosition(
            position = GeoPoint(35.6762, 139.6503),
            zoom = 12.0,
        ),
    )

    // If the map appears, the setup is correct.
    GoogleMapView(modifier = modifier, state = mapState)
}

ดีไซน์แผนที่

GoogleMapDesign คือการคัดลอกประเภทแผนที่ของ Google ตามที่เป็นอยู่

GoogleMapDesign
Notes
Normal
แผนที่ถนนปกติ (roadmap)
Satellite
ภาพดาวเทียม
Hybrid
ภาพดาวเทียมพร้อมถนนและป้ายกำกับ
Terrain
แผนที่ภูมิประเทศ
None
ไม่มีแผนที่พื้นฐาน

การแก้ปัญหา

แผนที่ไม่แสดง (หน้าจอสีเทา)

  • ตรวจสอบว่าคีย์ API ใน secrets.properties ถูกต้องหรือไม่
  • ตรวจสอบว่าเปิดใช้งาน Maps SDK for Android ใน Google Cloud Console หรือไม่
  • ตรวจสอบว่าข้อจำกัดของคีย์ตรงกับชื่อแพ็กเกจและ SHA-1 จริงหรือไม่

ในบันทึกมีข้อผิดพลาดของคีย์ API

  • ตรวจสอบค่าและวันหมดอายุของคีย์
  • ตรวจสอบการตั้งค่าข้อจำกัดฝั่งคอนโซล

บิลด์ไม่ผ่าน

  • ตรวจสอบว่าพิกัดและเวอร์ชันของแผนที่ SDK ตรงกับที่ระบุใน version catalog หรือไม่
  • ตรวจสอบว่ามีคำจำกัดความของที่เก็บใน settings.gradle.kts หรือไม่ (หาก repositoriesMode เป็น FAIL_ON_PROJECT_REPOS ระบบจะละเว้น repositories ฝั่งโมดูล)
  • หากมีแผนที่ SDK หลายตัวในเวลาเดียวกัน ให้ตรวจสอบว่ามีความขัดแย้งของการพึ่งพาหรือไม่โดยใช้ ./gradlew :app:dependencies

ถัดไป

เมื่อ GoogleMapView ปรากฏขึ้น คุณสามารถเขียนโอเวอร์เลย์ เช่น Marker, Polyline, Circle ด้วย API ทั่วไปได้ แม้จะเปลี่ยนผู้ให้บริการ โค้ดส่วนนั้นจะไม่เปลี่ยนแปลง