จากที่ได้เรียนรู้รายละเอียดต่างๆของ Maps SDK กันในบทความที่แล้ว และถึงตอนนี้ผู้ที่หลงเข้ามาอ่านก็คงอยากจะลองใช้เจ้า SDK ตัวนี้บนโปรเจคของตัวเองดูแล้ว

แต่ก่อนที่จะเรียกใช้งาน Maps SDK ในโปรเจค เจ้าของบล็อกขอแนะนำให้เริ่มจากการสร้าง API Key เป็นอย่างแรกเสียก่อน

บทความในซีรีย์เดียวกัน

API Key เพื่อใช้งาน Maps SDK

การจะใช้งาน Maps SDK ได้นั้น นักพัฒนาจะต้องสร้าง API Key จาก Google Developer Console เสียก่อน เพราะ Maps SDK จะบังคับให้นักพัฒนาต้องใส่ API Key ลงไปในโปรเจคด้วย ไม่เช่นนั้น Google Maps จะไม่แสดงผล

โดยเข้าไปที่ Google Developer Console และเข้าใช้งานด้วย Google Account

Google Cloud Platform
Google Cloud Platform lets you build, deploy and scale applications, websites and services on the same infrastructure as Google.

สร้างโปรเจคและเปิดใช้งาน Maps SDK for Android

สร้างโปรเจคขึ้นมาใหม่ ตั้งชื่อตามใจชอบได้เลย และเมื่อสร้างเสร็จแล้ว ให้เลือกไปที่ Hamburger Menu > API & Services > Library

ที่หน้า API Library ให้ค้นหา API ที่ชื่อว่า Maps SDK for Android เพื่อเข้าไปกดปุ่ม Enable เพื่อเริ่มใช้งาน

เมื่อเปิดใช้งาน Maps SDK for Android เสร็จเรียบร้อยแล้ว ต่อไปก็ถึงเวลาสร้าง API Key เพื่อใช้งานบนแอปแอนดรอยด์แล้ว

สร้าง API Key

ให้เลือกไปที่ Hamburger Menu > API & Services > Credentials เพื่อสร้าง API Key

ที่หน้า Credentials ให้กดที่ปุ่ม + CREATE CREDENTIALS แล้วเลือก API key เพื่อสร้าง API Key ขึ้นมาใหม่

ระบบจะทำการสร้าง API Key ขึ้นมาให้ โดยให้ Copy เก็บไว้ก่อน เพราะจะต้องนำไปใช้ในโปรเจคบนแอนดรอยด์ในภายหลัง

แต่สิ่งที่นักพัฒนาต้องกำหนดเพิ่มก็คือ การกำหนดให้ API Key นี้ใช้งานได้เฉพาะแอปของตัวเองเท่านั้น เพื่อป้องกันผู้อื่นแอบนำ API Key ไปใช้โดยไม่ได้รับอนุญาต ดังนั้นให้กดปุ่ม RESTRICT KEY ต่อซะ

ที่หน้า Restrict and rename API key (สามารถเข้ามาเปลี่ยนชื่อ API Key ที่นี่ได้ด้วยนะ) ที่หัวข้อ Application restrictions ให้เลือกที่ Android apps จากนั้นจะมีรายละเอียดแสดงที่ฝั่งขวามือ ซึ่งเป็นรายละเอียดการแสดงข้อมูล Fingerprint ของ Keystore

ดึงข้อมูล SHA1 จาก Keystore เพื่อผูกกับ API Key

ใช่ครับ การผูก API Key เข้ากับแอปจะต้องใช้ Keystore ที่ใช้ใน App Signing นั่นเอง โดยจะใช้ SHA1 จาก Fingerprint ของ Keystore มาใช้เป็นตัวยืนยันแอปนั่นเอง โดยที่

  • ในระหว่างการพัฒนาโปรเจค ให้ใช้ SHA1 จาก Fingerprint ของ Debug Keystore (Android Studio สร้างขึ้นมาเก็บไว้ในเครื่องให้โดยอัตโนมัติ)
  • ตอนที่จะอัปโหลดแอปขึ้น Google Play จะต้องเปลี่ยนไปใช้ SHA1 จาก Fingerprint ของ Signed Keystore หรือ Release Keystore (นักพัฒนาสร้างขึ้นมาเองเพื่อใช้ในขั้นตอน App Signing)
ขั้นตอนนี้เป็นขั้นตอนสำคัญ เพราะถ้ากำหนด SHA1 ไม่ถูกต้อง จะทำให้ Google Maps ไม่แสดงผล ซึ่งเกิดขึ้นบ่อยกับนักพัฒนาที่ลืมกำหนด SHA1 ของ Signed Keystore ตอนอัปโหลดขึ้น Google Play

การดูข้อมูล SHA1 จาก Fingerprint ของ Keystore สามารถดูได้ที่คำสั่งที่อธิบายอยู่ในหน้าดังกล่าวได้เลย

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
แสดงข้อมูล Fingerprint ของ Debug Keystore บน Linux หรือ macOS
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
คำสั่งแสดงข้อมูล Fingerprint ของ Debug Keystore บน Windows
keytool -list -v -keystore your_keystore_name -alias your_alias_name
คำสั่งแสดงข้อมูล Fingerprint ของ Signed Keystore หรือ Release Keystore

สำหรับคำสั่งของ Signed Keystore หรือ Release Keystore จะต้องใส่รหัสผ่านและข้อมูล Alias ให้ถูกต้องตามที่กำหนดไว้ในตอนที่สร้าง Keystore นั้นๆขึ้นมา

ยกตัวอย่างเช่น ข้อมูล Fingerprint ที่อยู่ในเครื่องเจ้าของบล็อก

> keytool -list -v -keystore ~/.android/debug.keystore 
-storepass android -alias androiddebugkey -keypass android -v

Enter keystore password:  
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: androiddebugkey
Creation date: Aug 7, 2019
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: C=US, O=Android, CN=Android Debug
Issuer: C=US, O=Android, CN=Android Debug
Serial number: 1
Valid from: Wed Aug 07 18:06:51 ICT 2019 until: Fri Jul 30 18:06:51 ICT 2049
Certificate fingerprints:
	 SHA1: DE:96:08:AC:0E:12:43:46:B0:E9:CB:EA:18:55:6C:69:04:C3:F3:CE
	 SHA256: 3E:3A:40:18:6C:0B:12:A8:E7:FA:3C:79:3A:E9:DE:BF:FA:CE:CA:33:CB:02:0F:B5:07:12:36:77:9C:7C:58:56
Signature algorithm name: SHA1withRSA (weak)
Subject Public Key Algorithm: 1024-bit RSA key (weak)
Version: 1

ดังนั้น SHA1 สำหรับ Debug Keystore ที่เจ้าของบล็อกต้องใส่ใน Google Developer Console ก็คือ

DE:96:08:AC:0E:12:43:46:B0:E9:CB:EA:18:55:6C:69:04:C3:F3:CE

ผูก API Key ด้วย SHA1 และ Package Name

เมื่อได้ SHA1 มาแล้ว ก็ให้กดปุ่ม ADD AN ITEM ที่อยู่ในหัวข้อ Application restrictions

โดยจะมีหน้าต่างแสดงขึ้นมาเพื่อให้กรอกข้อมูลของ SHA1 และ Package Name ของแอป

นอกจาก SHA1 แล้ว นักพัฒนาจะต้องกำหนด Package Name ของแอปให้ถูกต้องด้วย ในกรณีที่สร้างโปรเจคขึ้นมาแล้ว ก็ให้นำ Package Name มาใส่ได้เลย แล้วกดปุ่ม DONE ซะ

ในกรณีที่โปรเจคมีการเปลี่ยน Package Name ในภายหลัง ก็อย่าลืมมาอัปเดตที่นี่ด้วยนะ ไม่เช่นนั้นจะใช้งานไม่ได้ทันที

โดย 1 API Key สามารถผูกกับ SHA1 และ Package Name กี่ตัวก็ได้ ดังนั้นนักพัฒนาจะใส่ทั้ง SHA1 ของ Debug Keystore และ Release Keystore ไว้เลยก็ได้เช่นกัน จะได้ไม่ลืมในภายหลัง

หรือจะใส่ Package Name หลายๆตัวก็ได้เช่นกัน ซึ่งมีประโยชน์มากสำหรับแอปขนาดเล็กที่ไม่ต้องการสร้างโปรเจคบน Google Developer Console หลายๆโปรเจค หรือสำหรับแอปที่ทำ Build Variant แล้วมีชื่อ Package Name แยกตาม Build Environment

ยินดีด้วย คุณได้ API Key พร้อมใช้งานสำหรับ Maps SDK บนแอนดรอยด์แล้ว

เพียงเท่านี้ API Key ของผู้ที่หลงเข้ามาอ่านก็พร้อมจะนำไปใช้งานในโปรเจคแอนดรอยด์แล้ว เย้!