iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0
Software Development

英國研究顯示,連續30天用Kotlin開發Android將有益於身心健康系列 第 7

Android Kotlin 實作 Day 7_MyLocation(上)(導入GoogleMap + API Key 取得及使用)

使用語言

  • Kotlin

使用元件

  • Button
  • Fragment(導入 Google Map 時自動導入)

導入 Google Map


建立 Google Maps Activity

  1. File > New > Activity > Gallery

  2. 選擇 Google Maps Activity

  3. 建立 Activity 時會同時建立 Layout,為 Activity 及 Layout 命名

  4. 建立完後將會看到新增了三個檔案:

    Activity、Layout、google_maps_api.xml


取得 Google Maps API key

  1. 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"      
    
  2. 將上述最後一行網址貼至瀏覽器並前往

  3. 建立專案(或選取已存在的專案)

  4. 建立 API 金鑰

  5. 取得 API 金鑰


    此時可以點選關閉,或點選限制金鑰去做金鑰設定

  6. 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 會是不同的

        Keystore 與 SHA-1 參考資料

    • API 限制

      一個 Google 的 API 金鑰可以用來獲取很多種 Google 服務,
      設置 API 限制即可限制該 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 文件中(即不加入版本控制)

  1. 將 API 金鑰寫進 gradle.properties 中

    左邊文件目錄 > Gradle Scripts > gradle.properties 加入

    // GoogleMapKey 為任何你想自訂的名稱
    GoogleMapKey = "取得的 API 金鑰"
    
  2. 將上面加入的 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 中導入或設置值:參考資料

  3. 引用前面設置好的值

    • 在資源檔(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
      
  4. 在專案資料夾中建立或修改 .gitignore 文件

    在文件中加入 /gradle.properties

關於上述介紹的處理機密資料方式:參考資料
關於其他處理機密資料的方式:參考資料

查看詳細 Code > GitHub

tags: Android Kotlin Google Map Gradle variable API Key

接下來關於 Google Map 的使用及定位服務使用請參考 下篇 >>


上一篇
Android Kotlin 實作 Day 6 : ImageList(RecyclerView + LayoutInflater)
下一篇
Android Kotlin 實作 Day 7_MyLocation(下)(GoogleMap相機、標記+SnackBar+定位服務)
系列文
英國研究顯示,連續30天用Kotlin開發Android將有益於身心健康30

尚未有邦友留言

立即登入留言