Android

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์—์„œ ๊ตฌ๊ธ€ ๋งต ์‚ฌ์šฉํ•˜๊ธฐ

567Rabbit 2024. 6. 18. 17:40

๊ตฌ๊ธ€๋งต ์‚ฌ์šฉํ•˜๊ธฐ

 

https://developers.google.com/maps/documentation/android-sdk/secrets-gradle-plugin?hl=ko

 

 

- ์ด๊ณณ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜์™€ ํ™˜๊ฒฝ์„ค์ •์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‚˜์™€์žˆ๋‹ค.

 

 


API ํ‚ค ๊ฐ’ ์ƒ์„ฑํ•˜๊ณ  ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์— ์ž‘์„ฑํ•˜๊ธฐ

 

https://console.cloud.google.com/welcome/new?project=igneous-axiom-426807-f3

 

Google ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ

๋กœ๊ทธ์ธ Google ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์œผ๋กœ ์ด๋™

accounts.google.com

 

 

์‚ฌ์šฉ ํด๋ฆญํ•˜๊ธฐ

 

 

 

 

์‚ฌ์šฉ์ž API ํ‚ค ์ƒ์„ฑ ํ›„, API ํ‚ค๋ฅผ ํด๋ฆญํ•ด์„œ ๋“ค์–ด๊ฐ€์„œ

 

 

 

 

Maps SDK for Android API๋ฅผ ์„ ํƒํ•˜์—ฌ ์ €์žฅ ๋ˆ„๋ฅด๊ณ ,

 

 

 

 

 

ํ‚ค ํ‘œ์‹œ ๋ˆŒ๋Ÿฌ์„œ ํ‚ค ๊ฐ’ ์ €์žฅํ•ด๋‘๊ธฐ

 

 

 

 

 

Android -> Project Files๋กœ ์ด๋™ํ•˜๊ธฐ

 

 

 

 

 

 

local.defaults.properties ์™€ secrets.properties ํŒŒ์ผ ๋งŒ๋“ค๊ณ , local.defaults.properties๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

 

 

 

API ํ‚ค ๋ณต์‚ฌํ•œ ๊ฒƒ secrets.properties์— ์ž‘์„ฑํ•˜๊ธฐ

 

 



 

 

build.gradle (Project)

 

 

buildscript {
    dependencies {
        classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1")
    }
}

 

 

 

 

 

 

build.gradle (:app)

 

 

id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")

 

 

 

 

 

secrets {
    // Optionally specify a different file name containing your secrets.
    // The plugin defaults to "local.properties"
    propertiesFileName = "secrets.properties"

    // A properties file containing default secret values. This file can be
    // checked in version control.
    defaultPropertiesFileName = "local.defaults.properties"

    // Configure which keys should be ignored by the plugin by providing regular expressions.
    // "sdk.dir" is ignored by default.
    ignoreList.add("keyToIgnore") // Ignore the key "keyToIgnore"
    ignoreList.add("sdk.*")       // Ignore all keys matching the regexp "sdk.*"
}

 

 

 

 

 

    buildFeatures {
        buildConfig = true
    }
implementation("com.google.android.gms:play-services-maps:18.2.0")

 

 

 

 

Sync Now ๋ˆ„๋ฅด๊ธฐ

 

 

 

 

 

Manifest ์„ค์ •ํ•˜๊ธฐ

 

 

 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="${MAPS_API_KEY}"/>
<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version"/>

 

 

 

 

 

activity_main ์ž‘์„ฑํ•˜๊ธฐ

 

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment">

</fragment>

 

 

 

 

 

MainActivity ์ž‘์„ฑํ•˜๊ธฐ

 

package com.~.map;

import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        // ์ง€๋„ ์ค€๋น„๋˜๋ฉด ํ•ด๋‹ฌ๋ผ๋Š” ํ•จ์ˆ˜
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull GoogleMap googleMap) {
                // ๋งต์ด ์ค€๋น„๋˜๋ฉด ๋‚ด ์œ„์น˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ง€๋„๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•ด๋ผ ๋ผ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ

                // 1. ํŠน์ • ์œ„๋„, ๊ฒฝ๋„ ๊ฐ’์œผ๋กœ ์ง€๋„์˜ ์œ„์น˜๋ฅผ ์ ์šฉ์‹œํ‚ค๋Š” ์ฝ”๋“œ
                LatLng myLocation = new LatLng(37.5428, 126.6772); //ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ์œ„์น˜์˜ ์œ„๋„ ๊ฒฝ๋„ ์ž‘์„ฑ
                googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 17));

                // 2. ๋งˆ์ปค๋ฅผ ๋งŒ๋“ค์–ด์„œ, ์ง€๋„์— ํ‘œ์‹œํ•˜๋Š” ์ฝ”๋“œ
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(myLocation).title("์—ฐํฌ์ง์—…์ „๋ฌธํ•™๊ต");

                // 3. ๋งˆ์ปค๋ฅผ ํด๋ฆญํ•˜๋ฉด, ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ
                //  ์ค‘์š”! ์œ„์—์„œ MarkerOptions๋ฅผ ๋งŒ๋“ค ๋•Œ, ํƒœ๊ทธ๋ฅผ ๋‹ฌ์•„์ค˜์„œ ๊ตฌ๋ถ„ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.
                googleMap.addMarker(markerOptions).setTag(0);
                googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                    @Override
                    public boolean onMarkerClick(@NonNull Marker marker) {

                        int tag = (int) marker.getTag();

                        Toast.makeText(MainActivity.this,
                                "์ œ๊ฐ€ ๋ˆ„๋ฅธ ๋งˆ์ปค์˜ ํƒœ๊ทธ๋Š” : " + tag + "\n ํƒ€์ดํ‹€์€ : " + marker.getTitle(),
                                Toast.LENGTH_SHORT).show();

                        return false;
                    }
                });

                // 4. ์ง€๋„์˜ ํƒ€์ž…์„ ์„ค์ •ํ•˜๋Š” ์ฝ”๋“œ
                // googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

            }
        });

    }
}