# Google Maps API Key Setup
## β οΈ IMPORTANTE
Per usare le mappe nell'app, devi configurare la Google Maps API Key.
## π Come Ottenere la API Key
### 1. Vai alla Google Cloud Console
Apri: https://console.cloud.google.com/
### 2. Crea o Seleziona un Progetto
- Se hai giΓ un progetto, selezionalo
- Altrimenti crea un nuovo progetto:
- Click su "Select a project" in alto
- Click su "NEW PROJECT"
- Nome: "Terrain Monitor" (o come preferisci)
- Click "CREATE"
### 3. Abilita le API necessarie
Nel tuo progetto:
1. Vai su **APIs & Services** β **Library**
2. Cerca e abilita queste API:
- **Maps SDK for Android**
- **Maps SDK for iOS** (se userai iOS)
- **Geocoding API** (opzionale, per reverse geocoding)
### 4. Crea la API Key
1. Vai su **APIs & Services** β **Credentials**
2. Click su **+ CREATE CREDENTIALS** β **API key**
3. VerrΓ creata una chiave (es. `AIzaSyA...`)
4. **COPIA questa chiave**
### 5. (Consigliato) Restrizioni di Sicurezza
Per proteggere la tua API key:
1. Click sulla chiave appena creata
2. In **Application restrictions**:
- Seleziona "Android apps"
- Click "+ Add an item"
- Package name: `eu.aseltd.terrain_monitor_app`
- SHA-1 certificate fingerprint:
```bash
# Debug (per sviluppo)
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
# Copia il valore SHA1 e incollalo
```
3. In **API restrictions**:
- Seleziona "Restrict key"
- Seleziona solo: "Maps SDK for Android"
4. Click **SAVE**
## π§ Configura l'App
### Android
Modifica il file:
```
android/app/src/main/AndroidManifest.xml
```
Trova questa riga:
```xml
```
Sostituisci `YOUR_GOOGLE_MAPS_API_KEY_HERE` con la tua chiave:
```xml
```
### iOS (se necessario)
Modifica il file:
```
ios/Runner/AppDelegate.swift
```
Aggiungi:
```swift
import GoogleMaps
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GMSServices.provideAPIKey("YOUR_GOOGLE_MAPS_API_KEY_HERE")
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
```
## π° Costi
Google Maps offre un **credito gratuito mensile** di $200:
- Fino a **28.500 caricamenti mappe** al mese GRATIS
- Per un'app con pochi utenti, rimarrai sotto il limite gratuito
Monitora l'uso su: https://console.cloud.google.com/google/maps-apis/metrics
## β
Verifica
Dopo aver configurato:
1. Ricompila l'app:
```bash
flutter clean
flutter build apk --debug
flutter install
```
2. Apri l'app e naviga a:
- **Allarmi** β Tap su un allarme β Dovrebbe vedere la mappa
- **Siti** β Tap su un sito β Tab "Informazioni" β Dovrebbe vedere la mappa
3. Se vedi la mappa con il marker, tutto funziona! β
## π Sicurezza
**IMPORTANTE:**
- β
NON committare la API key nel repository pubblico
- β
Usa le restrizioni (Android app + API restrictions)
- β
Monitora l'uso nel dashboard Google Cloud
- β
Per produzione, considera di usare variabili d'ambiente
## π οΈ Troubleshooting
### Problema: Mappa grigia
- Verifica che la API key sia corretta
- Verifica che "Maps SDK for Android" sia abilitato
- Verifica le restrizioni (potrebbero essere troppo strette)
### Problema: "API key not found"
- Verifica che la `` sia dentro `` nel Manifest
- Ricompila l'app con `flutter clean`
### Problema: "This API project is not authorized"
- Verifica le restrizioni della key
- Prova a rimuovere temporaneamente le restrizioni per testare
- Verifica che il package name sia corretto
## π Risorse
- [Google Maps Platform](https://developers.google.com/maps)
- [Maps SDK for Android](https://developers.google.com/maps/documentation/android-sdk)
- [google_maps_flutter package](https://pub.dev/packages/google_maps_flutter)
---
**Fatto?** Dopo aver configurato la chiave, l'app funzionerΓ perfettamente con le mappe! πΊοΈ