File > New > Activity > Gallery
選擇 Google Maps Activity
建立 Activity 時會同時建立 Layout,為 Activity 及 Layout 命名
建立完後將會看到新增了三個檔案:
Activity、Layout、google_maps_api.xml
google_maps_api.xml 會看到
TODO: Before you run your application, you need a Google Maps API key.
To get one, follow this link, follow the directions and press "Create" at the end:
https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r="SHA-1 certificate fingerprint"%3B"Package name"
將上述最後一行網址貼至瀏覽器並前往
建立專案(或選取已存在的專案)
建立 API 金鑰
取得 API 金鑰
此時可以點選關閉,或點選限制金鑰去做金鑰設定
API 金鑰設定
金鑰基本資料,可修改 API 金鑰名稱
應用程式限制
若無限制的話則任何人可在任何裝置上使用這組 API 金鑰
若有限制的話則會審核其他資料,資料符合的使用者才可使用
以 Android 為例,下方將會出現兩個欄位
需將有權使用此 API 金鑰的使用者資料加入欄位中
若使用者資料不在下方欄位中,將無法使用此 API 金鑰
套件名稱:即專案的 Package name
SHA-1 憑證指紋:
每個 App 被安裝或上架時,都需要被 簽名,
簽名會被用來辨別這個 App 來自於誰,誰可以對此 App 做變更。
平常我們安裝自己寫的 App 做測試時,
用的是安裝 Android Studio 時自動建立的預設簽名文件 debug.keystore,
其內將會有一組簽名,也就是 SHA-1 憑證指紋。
每台電腦安裝 Android Studio 時建立的預設簽名都不同,
也因此若要使用不同台電腦修改及安裝使用同個 API 金鑰的專案,
就需找出每台電腦的 SHA-1 憑證指紋並填入圖中的欄位。
正式上架 App 時,就需產出自己的 Keystore 及 SHA-1
也因此 release(發佈模式)和 debug(開發模式)下的 SHA-1 會是不同的
API 限制
一個 Google 的 API 金鑰可以用來獲取很多種 Google 服務,
設置 API 限制即可限制該 API 僅可用來獲取哪些服務,
避免因使用其他服務導致流量超過配額,或被其他人用來獲取其他服務等等
一般來說,將 API 金鑰加入 google_maps_api.xml 中即可
<string name="google_maps_key" translatable="false" templateMergeStrategy="preserve">YOUR_KEY_HERE</string>
// 將後面的 YOUR_KEY_HERE 替換為你的 API 金鑰即可
這是最直接也最簡單的加入方式
但若專案會上傳至 GitHub 或發佈至其他公開的地方,為避免洩漏機密資料如 API 金鑰、密碼…等等,進而被其他有心人士使用,通常會透過其他方式將這些資料加入至專案。
以下介紹最常使用的方式:
將 API 金鑰放在 gradle.properties 文件中
並將 gradle.properties 寫進 .gitignore 文件中(即不加入版本控制)
將 API 金鑰寫進 gradle.properties 中
左邊文件目錄 > Gradle Scripts > gradle.properties 加入
// GoogleMapKey 為任何你想自訂的名稱
GoogleMapKey = "取得的 API 金鑰"
將上面加入的 API 金鑰導入專案中
左邊文件目錄 > Gradle Scripts > build.gradle(Module: app)
android {
buildTypes {
release {
}
debug {
//資源類型為 string,名稱為 API_KEY,值為 GoogleMapKey
resValue ("string", "API_KEY", GoogleMapKey)
}
}
}
google_maps_api.xml 預設為 debug 模式(可在檔名後方看到 (debug) )
而我們也是在開發測試階段,因此導入 Key 要寫在 debug 中。
若要變更為 release 模式,可從左邊欄點選 Build Variants 頁籤,並選擇 release,
google_maps_api.xml 後面就會變為 (release) ,此時導入 Key 就要寫在 release 中。
若需要在資源檔(xml 檔)中引用該值,使用
resValue (type: String, name: String, value: String)
type:資源類型,有以下幾種:
array、attr、bool、color、declare-styleable
dimen、fraction、id、integer、plurals、string、style
# type 字串皆為小寫
name:該值的名稱,取用時便是透過此名稱取值
value:值,以我們的例子來說就是 API 金鑰。
透過前面設置的名稱 GoogleMapKey 來取得 API 金鑰
# 若值為 True 或 False 需全部小寫為 true、false
若需要在執行的程式碼(kt 或 java 檔)中引用該值,使用
buildConfigField (type: String, name: String, value: String)
type:變數類型
# type 字串皆為小寫
name、value:同前述 resValue 的參數
關於在 build.gradle 中導入或設置值:參考資料
引用前面設置好的值
在資源檔(xml 檔)中引用:
寫法:@type/name
type:資源類型,以我們的例子來說為 string
name:build.gradle 中設置的名稱,以我們的例子來說為 API_KEY
以我們的例子,在 google_maps_api.xml 修改加入 API 金鑰的地方
// 在後面原本填 API 金鑰的地方改寫為 @string/API_KEY
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">@string/API_KEY</string>
在執行的程式碼(kt 或 java 檔)中引用:
寫法:BuildConfig. 加上 build.gradle 中設置的名稱
val key : String = BuildConfig.API_KEY
在專案資料夾中建立或修改 .gitignore 文件
在文件中加入 /gradle.properties
Android
Kotlin
Google Map
Gradle variable
API Key