Abrufen eines API-Schlüssels für Google Maps
Zur Verwendung der Google Maps-Funktionalität in Android müssen Sie sich bei Google für einen Maps-API-Schlüssel registrieren. Bis zur Registrierung wird in Ihren Anwendungen anstelle einer Karte lediglich ein leeres Raster angezeigt. Sie müssen einen Google Maps Android API v2-Schlüssel abrufen – Schlüssel aus der älteren Google Maps Android API v1-Version funktionieren nicht.
Der Abruf eines Maps API v2-Schlüssels umfasst die folgenden Schritte:
- Rufen Sie den SHA-1-Fingerabdruck des Keystores ab, der zum Signieren der Anwendung verwendet wird.
- Erstellen Sie ein Projekt in der Google APIs-Konsole.
- Rufen Sie den API-Schlüssel ab.
Abrufen des Fingerabdrucks Ihres Signaturschlüssels
Um einen Maps-API-Schlüssel von Google anzufordern, müssen Sie den SHA-1-Fingerabdruck des Keystores kennen, der zum Signieren der Anwendung verwendet wird. Typischerweise bedeutet dies, dass Sie den SHA-1-Fingerabdruck für den Debug-Keystore sowie anschließend den SHA-1-Fingerabdruck für den Keystore ermitteln müssen, der zum Signieren Ihrer Anwendung für die Veröffentlichung verwendet wird.
Standardmäßig befindet sich der Keystore, der zum Signieren von Debugversionen einer Xamarin.Android-Anwendung verwendet wird, an folgendem Speicherort:
C:\Users\[USERNAME]\AppData\Local\Xamarin\Mono für Android\debug.keystore
Durch das Ausführen des Befehls keytool
über das JDK erhalten Sie Informationen zu einem Keystore. Dieses Tool befindet sich normalerweise im Java-Verzeichnis „bin“:
C:\Programme\Android\jdk\microsoft_dist_openjdk_[VERSION]\bin\keytool.exe
Führen Sie „keytool“ mit dem folgenden Befehl (unter Verwendung der oben gezeigten Dateipfade) aus:
keytool -list -v -keystore [STORE FILENAME] -alias [KEY NAME] -storepass [STORE PASSWORD] -keypass [KEY PASSWORD]
Debug.keystore-Beispiel
Verwenden Sie für den standardmäßigen Debugschlüssel (der automatisch für das Debuggen erstellt wird) diesen Befehl:
keytool.exe -list -v -keystore "C:\Users\[USERNAME]\AppData\Local\Xamarin\Mono for Android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
Produktionsschlüssel
Für die Bereitstellung einer App in Google Play muss diese mit einem privaten Schlüssel signiert werden.
keytool
muss mit den Informationen des privaten Schlüssels ausgeführt werden, und der resultierende SHA-1-Fingerabdruck wird verwendet, um einen Google Maps-API-Produktionsschlüssel zu erstellen. Denken Sie vor der Bereitstellung daran, die Datei AndroidManifest.xml mit dem richtigen Google Maps-API-Schlüssel zu aktualisieren.
Ausgabe von „keytool“
Die Ausgabe im Konsolenfenster sollte der folgenden ähneln:
Alias name: androiddebugkey
Creation date: Jan 01, 2016
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 4aa9b300
Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033
Certificate fingerprints:
MD5: AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9
SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75
Signature algorithm name: SHA1withRSA
Version: 3
Sie verwenden den SHA-1-Fingerabdruck (nach SHA1 aufgeführt) später in diesem Leitfaden.
Erstellen eines API-Projekts
Nachdem Sie den SHA-1-Fingerabdruck des Signatur-Keystores abgerufen haben, müssen Sie in der Google APIs-Konsole ein neues Projekt erstellen (oder den Google Maps Android API v2-Dienst zu einem vorhandenen Projekt hinzuzufügen).
Navigieren Sie in einem Browser zu Google Developer Console – APIs & Dienste, und klicken Sie auf Projekt auswählen. Klicken Sie auf einen Projektnamen, oder erstellen Sie ein neues Projekt, indem Sie auf NEUES PROJEKT klicken:
Wenn Sie ein neues Projekt erstellt haben, geben Sie den Projektnamen im angezeigten Dialogfeld Neues Projekt ein. In diesem Dialogfeld wird eine eindeutige Projekt-ID generiert, die auf dem Namen Ihres Projekts basiert. Klicken Sie als Nächstes auf die Schaltfläche Erstellen, wie in diesem Beispiel gezeigt:
Nach etwa einer Minute wird das Projekt erstellt, und Sie gelangen zur Seite Dashboard für das Projekt. Klicken Sie auf dieser Seite auf APIS UND DIENSTE AKTIVIEREN:
Klicken Sie auf der Seite API-Bibliothek auf Maps SDK for Android. Klicken Sie auf der nächsten Seite auf AKTIVIEREN, um den Dienst für dieses Projekt zu aktivieren:
Zu diesem Zeitpunkt wurde das API-Projekt erstellt, und die Google Maps Android API v2 wurde hinzugefügt. Sie können diese API jedoch erst dann in Ihrem Projekt verwenden, wenn Sie Anmeldeberechtigungen dafür erstellt haben. Im nächsten Abschnitt wird erläutert, wie Sie einen API-Schlüssel erstellen und eine Xamarin.Android-Anwendung für die Verwendung dieses Schlüssels autorisieren.
Abrufen des API-Schlüssels
Nachdem das API-Projekt in der Google Developer Console erstellt wurde, muss ein Android-API-Schlüssel erstellt werden. Xamarin.Android-Anwendungen benötigen einen API-Schlüssel, um Zugriff auf Android Map API v2 zu erhalten.
Wechseln Sie auf der (nach dem Klicken auf AKTIVIEREN im vorherigen Schritt) angezeigten Seite Maps SDK for Android zur Registerkarte Anmeldedaten, und klicken Sie auf die Schaltfläche Anmeldedaten erstellen:
Klicken Sie auf API-Schlüssel:
Nach dem Klicken auf diese Schaltfläche wird der API-Schlüssel erstellt. Als Nächstes muss dieser Schlüssel eingeschränkt werden, damit nur Ihre App APIs mit diesem Schlüssel aufrufen kann. Klicken Sie auf SCHLÜSSEL EINSCHRÄNKEN:
Ändern Sie im Feld Name den Wert von API-Schlüssel 1 in einen Namen, der die Verwendung des Schlüssels angibt (in diesem Beispiel wird XamarinMapsDemoKey verwendet). Aktivieren Sie anschließend das Optionsfeld Android-Apps:
Um den SHA-1-Fingerabdruck hinzuzufügen, klicken Sie auf Paketnamen und Fingerabdruck hinzufügen:
Geben Sie den Paketnamen für Ihre App ein, und geben Sie den SHA-1-Fingerabdruck ein (den Sie wie zuvor besprochen über
keytool
abgerufen haben). Im folgenden Beispiel wird der Paketname fürXamarinMapsDemo
eingegeben, gefolgt vom SHA-1-Zertifikatfingerabdruck, der aus debug.keystore abgerufen wurde:Beachten Sie Folgendes: Damit Ihr APK auf Google Maps zugreifen kann, müssen Sie SHA-1-Fingerabdrücke und Paketnamen für jeden Keystore (Debug und Release) angeben, den Sie zum Signieren Ihrer APK verwenden. Wenn Sie beispielsweise einen Computer für das Debuggen und einen anderen Computer zum Generieren der Release-APK verwenden, müssen Sie den Fingerabdruck des SHA-1-Zertifikats aus dem Debug-Keystore des ersten Computers und den Fingerabdruck des SHA-1-Zertifikats aus dem Release-Keystore des zweiten Computers angeben. Klicken Sie auf Paketnamen und Fingerabdruck hinzufügen, um wie in diesem Beispiel einen weiteren Paketnamen und Fingerabdruck hinzuzufügen:
Klicken Sie auf die Schaltfläche Speichern, um die Änderungen zu speichern. Es wird erneut die Liste Ihrer API-Schlüssel angezeigt. Wenn Sie zuvor weitere API-Schlüssel erstellt haben, werden diese hier ebenfalls aufgeführt. Im vorliegenden Beispiel wird nur ein API-Schlüssel aufgelistet (der in den vorherigen Schritten erstellt wurde):
Verbinden des Projekts mit einem Abrechnungskonto
Ab dem 11. Juni 2018 funktioniert der API-Schlüssel nur, wenn das Projekt mit einem Konto für die Abrechnung verbunden ist (auch wenn der Dienst für mobile Anwendungen weiterhin kostenlos ist).
Klicken Sie auf das Hamburger-Menü, und wählen Sie die Seite Abrechnung aus:
Verknüpfen Sie das Projekt mit einem Abrechnungskonto, indem Sie im angezeigten Popupfenster auf Rechnungskonto verknüpfen und dann auf RECHNUNGSKONTO ERSTELLEN klicken (wenn Sie über kein Konto verfügen, werden Sie aufgefordert, ein neues Konto zu erstellen):
Hinzufügen des Schlüssels zu Ihrem Projekt
Abschließend wird der API-Schlüssel zur Datei AndroidManifest.XML Ihrer Xamarin.Android-App hinzugefügt. Im folgenden Beispiel muss YOUR_API_KEY
durch den API-Schlüssel ersetzt werden, der in den vorherigen Schritten erstellt wurde:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionName="4.10" package="com.xamarin.docs.android.mapsandlocationdemo"
android:versionCode="10">
...
<application android:label="@string/app_name">
<!-- Put your Google Maps V2 API Key here. -->
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="YOUR_API_KEY" />
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
</application>
</manifest>