Maps-Api-Schlüssel

N

note3

Ambitioniertes Mitglied
0
Hallo zusammen,

ich schaue mir aus einem Buch eine DemoApp zu Google Maps an.
Für die App braucht man einen Maps-Api-Schlüssel.

Der im Buch angegebene Link stimmt nicht mehr.

Ich bin dann in meine Google Developers Console gegangen,
dort finde ich einen Button <Create new Android key>
und dann den Hinweis
"you can discover the SHA1 fingerprint of your developer certificate using the following command:
keytool -list -v -keystore mystore.keystore"

Aber wo und wie gebe ich diesen Befehl ein?
Wie bekomme ich den Schlüssel?

Danke im voraus
E.S.
 
Die keystore.exe findet sich bei mir im Javaprogrammordner unter \Java\jdk1.7.0\bin
Da es sich um nen Kommandozeilenprogramm handelt, daher einfach in ner Konsole aufrufen. Nach Eingabe des Passwortes deines Keystores kommt dann so ne Ausgabe:

attachment.php


Den Keystore selbst musst du dir vorher natürlich in Eclipse selbst anlegen - er fragt dich zumindest beim Exportieren einer App nach dem Keystore (zum signieren).
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    2,6 KB · Aufrufe: 442
Hallo MorphX,

den Schlüssel konnte ich jetzt erzeugen,
dafür schon mal besten Dank.
es ist ein "Key for Android apps (with certificates)"

Die App wird gestartet, aber keine Map angezeigt.

Den key habe ich in die main.xml eingetragen
android:apiKey="... hier steht er ..."
Hierfür war in der Demo auch ein Platzhalter vorgesehen.

Kann es daran liegen, dass ich den package name aus dem
Buch übernommen habe (ich habe das Beispiel ja importiert)?
Es kommt aber keinerlei Warnung.

Mit Gruß
E.S.
 
Puh, da kann ich dir jetzt gar nicht weiter helfen. Habe noch nie die maps API verwendet. Hier gibt's aber schon paar threads dazu wie es zu implementieren ist. Entweder hier noch selber suchen oder noch auf Antworten warten. Sorry :)
 
MorphX schrieb:
Den Keystore selbst musst du dir vorher natürlich in Eclipse selbst anlegen - er fragt dich zumindest beim Exportieren einer App nach dem Keystore (zum signieren).
Ja und nein, auch während dem Entwickeln wird die App automatisch "signiert". Zwar nur mit einem automatisch generierten Entwicklerzertifikat, aber auch das ist ein Zertifikat. D.h. solange es nicht um das Release geht, braucht er den Fingerprint des Entwicklerszertifikat.

Für die Anleitung dazu siehe: https://developers.google.com/maps/...art#display_your_apps_certificate_information


Wie alt ist das Buch? Behandelt das Google Maps v2 oder v1?

Für v2 wird der Api-Key mit den Zeilen hinzugefügt:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="API_KEY"/>
https://developers.google.com/maps/documentation/android/start#add_the_api_key_to_your_application


Je nachdem welche Google Maps besser gesagt Google Play Services-Library du hinzufügst muss auch noch das ins Manifest:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
https://developers.google.com/maps/...e_play_services_version_to_your_apps_manifest


Geht es dir nur darum eine Karte zum Laufen zu kriegen oder ist das ein wichtiger Bestandteil der App die vermutlich in dem Buch gebastelt wird?
 
  • Danke
Reaktionen: Andy
kleinerkathe schrieb:
Geht es dir nur darum eine Karte zum Laufen zu kriegen oder ist das ein wichtiger Bestandteil der App die vermutlich in dem Buch gebastelt wird?

Ich würde gerne die Karte sehen und dazu die umgerechneten Koordinaten
für den Standort im UTM-Format darstellen. Das würde fürs erste reichen.

Deine Tipps habe ich berücksichtigt (danke dafür) aber es wird nichts angezeigt, ich zeige mal den code.
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.thomaskuenneth.locationdemo2" android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="15" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <uses-library android:name="com.google.android.maps" />
        <activity android:name=".LocationDemo2" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="... hier steht mein Schlüssel (siehe auch unten) ..."/>
    <meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
            
    </application>
</manifest>
<!--     android:value="4030500" /> -->
Code:
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey="... hier steht noch mal der Schlüssel, muss das sein? ..."
/>
 
Permission External Storage und Permission Read GServices noch hinzufügen:
https://developers.google.com/maps/documentation/android/start#specify_permissions

Die anderen zwei sind nicht zwingend nötig (steht ja auch so bei Google)

Dein Layout-Code sieht "seltsam" aus. Ich hab folgenden verwendet:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>

Alternativ gibts auch noch den von Google:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
https://developers.google.com/maps/documentation/android/start#add_a_map

Dein Layout-XML-Code sieht aus wie Maps v1:
https://developers.google.com/maps/documentation/android/v1/hello-mapview

1. Das obige alles berücksichtigen
2. Dann die Frage beantworten: Klappt es? Wenn nein, siehst du ein Gitter oder garnichts? (ein Gitter wäre vorhanden, wenn eigtl. alles passt, nur der Api-Key falsch ist, nicht hinterlegt, etc.)
 
kleinerkathe schrieb:
Dein Layout-Code sieht "seltsam" aus. Ich hab folgenden verwendet:

Wenn ich die von Dir genannten Layouts nutze, führt das zu einem
Program-Stop.
Dein Layout-XML-Code sieht aus wie Maps v1:
Im Buch steht nichts von Maps v1 oder v2.
Es ist das Buch Thomas Künneth Android 4, 2. Ausgabe 2012
1. Das obige alles berücksichtigen
2. Dann die Frage beantworten: Klappt es? Wenn nein, siehst du ein Gitter oder garnichts? (ein Gitter wäre vorhanden, wenn eigtl. alles passt, nur der Api-Key falsch ist, nicht hinterlegt, etc.)
Die Berechtigungen habe ich alle eingefügt.
Ich sehe ein Karo-Muster und links unten auch "Google", auch werden
die beiden Zoom-Buttons angezeigt.
Nach Deiner Aussage kann der Api-Key falsch sein.
Ich habe mir mit dem Befehl
keytool -list -v -keystore C:\...meinPfad\ES_RELEASE_KEYSTORE
(die Datei ES_RELEASE_KEYSTORE habe ich bei meiner ersten App erzeugt)
einen SHA1-Schlüssel besorgt und diesen Schlüssel dann in die
Google APIs Console eingegeben (Button: Create New Android key).
Als package name habe ich den Namen genommen, wie er im Buch gewählt wurde.
Kann das falsch sein, weil den Namen vielleicht schon mal ein anderer genutzt hat?
Dann habe ich mal mit File>Export die apk-Datei erzeugt und mal nur mit
Run>Run Configuration gearbeitet. In beiden Fällen sehe ich keine Map.
Muss man über Export gehen?
 
File Export liefert dir eine apk, warum musst du danach nochmal einen run ausführen (nochmal Apk, aber im debugmodus mitsamt debugzertifikat)
 
kleinerkathe schrieb:
File Export liefert dir eine apk, warum musst du danach nochmal einen run ausführen (nochmal Apk, aber im debugmodus mitsamt debugzertifikat)
Die Frage ist ob run ausreicht und vollständig ist, oder ob man unbedingt File>Export ausführen muss (letzteres ist aufwändiger)?
 
Nochmal: mit file Export erstellte du dir eine APk mit dem passenden Zertifikat.Die lässt du aber ungenutzt liegen.

Wenn du danach run ausführst wird nochmal eine apk erstellt, aber mit dem Debug Zertifikat und diese APk wird automatisch aufs Handy geladen. Lass dir den fingerprint des Debug Zertifikat ausgeben(siehe links im ersten meiner Beiträge) und fueg ihn bei Google console hinzu. Oder installiert dir die export-apk manuell (kopieren aufs gerät und installieren)
 
kleinerkathe schrieb:
Nochmal: mit file Export erstellte du dir eine APk mit dem passenden Zertifikat.Die lässt du aber ungenutzt liegen.
...
Nein, das habe ich schon richtig gemacht (alte installation deinstalliert, apk aufs handy kopiert, dort gestartet und somit neu installiert).
Unabhängig davon habe ich dann die Run-Methode ausprobiert, die soll
ja ausreichen (so habe ich es verstanden) wenn man die app nur auf dem
eigenen Gerät nutzt. Erst wenn man die app in den store stell muss man
über export gehen.

Auch mit einem neuen Schlüssel (jetzt aus der datei debug,keystore) ging beides nicht.

Jetzt habe ich aber entdeckt das im Graphical Layout der main.xml folgender Fehler steht (der nicht in Erscheinung trat):
"Missing styles. Is the correct theme chosen for this layout?
Use the Theme combo box above the layout to choose a different layout, or fix the theme style references.
Failed to find style 'mapViewStyle' in current theme".

Das Beispiel aus dem (nicht so alten Buch) ist offensichtlich unbrauchbar.
Werde das Projekt wohl ganz neu aufbauen müssen.
Ist mir mit mehreren Beispielen aus diversen Büchern so ergangen.

Mit Gruß
E.S.
 
Deswegen wird hier auch immer gesagt das die Develope Seite die Anlaufstelle Nr.1 sein sollte...

lg. Dagobert
 
note3 schrieb:
Unabhängig davon habe ich dann die Run-Methode ausprobiert, die soll
ja ausreichen (so habe ich es verstanden) wenn man die app nur auf dem
eigenen Gerät nutzt. Erst wenn man die app in den store stell muss man
über export gehen.
Ja, du kannst sogar bei dem Google Console-Projekt beide Fingerprints hinzufügen (mit gleichem Packagename ;)) und hast für beide Varianten nur 1 Key (macht man zwar nicht, aber das hat andere Gründe)

Geh am besten die Anleitung, die ich jetzt glaub häufig genug verlinkt hab, von Google durch. Zumindest deutet dein Layout-Code auf Google Maps v1 hin und das funktioniert nicht mehr. Wir machen hier Feuerbekämpfung, aber den Brand löschen wir trotzdem nicht, wenn man nicht nochmal sauber von vorne alles macht ;) (für ein "schnelles lauffähiges Beispiel" kann man schon mal das machen ... geht halt einfach schneller... aber wers sauber machen will, nochmal hinsetzen :))

Was kommt den für ein "Error" wenn du den XML-Code von Google einsetzt? (wie hast du überhaupt die Library von Google Maps bzw. PlayServices eingebunden? Ich tippe, dass du da auch den Weg der v1-Variante gegangen bist: jar manuell hinzufügen. Bei v2 läuft das über maven/gradle: siehe Googleanleitung :))
 
kleinerkathe schrieb:
...
Geh am besten die Anleitung, die ich jetzt glaub häufig genug verlinkt hab, von Google durch. )
Hab ich ja alles versucht, bin dabei allerdings immer in Fehlerschleifen geraten.

Auch der sample code
https://developers.google.com/maps/documentation/android/intro#sample_code
liefert Fehler

Am weitesten bin ich mit
Android Google Maps V2 Tutorial
gekommen. Vielleicht fehlt hier nur noch eine Kleinigkeit.
Die App läuft, aber ich sehe keine Mapp, auch kein Karo-Muster.Ich bekomme den Fehler
"E/MoreInfoHPW_ViewGroup(32370): Parent view is not a TextView"
Leider wird nicht gezeigt wie die styles.xml aussieht, bei mir sieht sie noch so aus und das wird falsch sei. Wie muss sie aussehen?
Code:
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light"   </style>
    <style name="AppTheme" parent="AppBaseTheme"> </style>
</resources>
und in der manifest-Datei steht
android:theme="@style/AppTheme" >
 
Da fehlt ein ">" bei AppBaseTheme.

Ob du jetzt HoloLight, HoloDark oder .. auswählst tut eigentlich nichts zur Sache, wenn aber ein Fehler drin ist, der komplett verhindert dass das Layout/Theme angewendet werden kann, dann ist es klar, dass nichts funktioniert :)

Die von dir verlinkte Anleitung ist fast gleich zu der bei Google, es wird nur zusätzlich gezeigt wie man in Eclipse die Library importiert und gms-version fehlt dort. Seit 1 oder 2 PlayServices-Updates muss man das auch in der Manifest hinzufügen :)

Wie sieht den deine "main.xml" aus? (egal ob die jetzt activitiy_main.xml oder acitivity_maps.xml heißt, ich hoffe du weißt was ich meine ... die XML in der das Kartenelement mit eingefügt wurde)
 
Ist ja nett, dass Du noch mitliest :)
aber es ist zum Mäusemelken, weil bei kleinen Änderungen das ganze project
unbrauchbar wird (R. geht nicht mehr, auch nicht mit clean usw, could not find xxx.apk usw.)

Da fehlt ein ">" bei AppBaseTheme.
Das war hier nur ein Kopierfehler in der styles-Datei ist er nicht vorhanden.


In die Manifest-Datei habe ich jetzt eingefügt
android:name="com.google.android.gms.version"
android:value="4030500" />
(android:value="@integer/google_play_services_version" /> ging nicht)

Auch damit ist kein Land in sicht, ich bekomme ein Textfeld angezeigt
mit dem üblichen "Hello world").
Der code ist ansonsten exakt so, wie er im Beispiel vorgegeben ist.
Die activity_main.xml sieht so aus
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
 
</RelativeLayout>
und die Manifest-Datei so
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mymap.esmap"
    android:versionCode="1"
    android:versionName="1.0" >

       <permission
        android:name="com.mymap.esmap.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
 
    <uses-permission android:name="com.mymap.esmap.permission.MAPS_RECEIVE" />
    
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />

       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
    <!-- Required to show current location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
    <!-- Required OpenGL ES 2.0. for Maps V2 -->
    <uses-feature  android:glEsVersion="0x00020000"   android:required="true" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppBaseTheme" >
        <activity
            android:name="com.mymap.esmap.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
 android:name="com.google.android.gms.version"
 android:value="4030500" />
        <meta-data
     android:name="com.google.android.maps.v2.API_KEY"
     android:value="AIzaSyDhBv-t9fBX1nns9tY0_sMqt81sotiSTds" />
        
    </application>

</manifest>
Bis auf den Projekt-Namen alles so, wie im Beispiel.
Am Schlüssel kann es jetzt auch nicht liegen, das habe ich vielfach überprüft. Außerdem müssten wenigstens wieder die Karos auftauchen.

Der ursprüngliche Beitrag von 17:27 Uhr wurde um 19:21 Uhr ergänzt:

Nachtrag:
Im Debug Modus hängt sich das Programm quasi schon in der folgenden Zeile ohn auf
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); wird offensichtlich gar nicht mehr erreicht.

Code:
public class MainActivity extends Activity {

    private GoogleMap googleMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         try {
                // Loading map
                initilizeMap();
     
            } catch (Exception e) {
                e.printStackTrace();
            }
    }

       private void initilizeMap() {
            if (googleMap == null) {
                googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                        R.id.map)).getMap();
     
                // check if map is created successfully or not
                if (googleMap == null) {
                    Toast.makeText(getApplicationContext(),
                            "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                            .show();
                }
            }
        }
       @Override
        protected void onResume() {
            super.onResume();
            initilizeMap();
       }

}
 
So auf den ersten Blick scheint das eigentlich alles richtig zu sein. Nur doof, dass es trotzdem nicht funktioniert.

Aber da das mit der GMS-Version nicht so ganz funktioniert hat, noch ein letzter Verdacht: Hast du das SDK schon vor längerer Zeit heruntergeladen? Die Google Play Services und Repository (zweiteres vll. nicht wichtig, aber lass es mal drin) sind aktuell? (geh dazu in den SDK-Manager über die Verknüpfung in Eclipse oder Direktaufruf aus dem SDK-Verzeichnis).

Und als letzter Ast ... Auf welcher API steht dein Target? (mein Maps-Projekt ist noch aus der Zeit, als man gegen die Google APIs builden musste)
 
Zum Abschluss dieses Threads sei erwähnt,
dass die Nutung von Google Maps nur nach einem vollständigen Update
der SDK-Tools möglich geworden ist.
 

Ähnliche Themen

2
Antworten
6
Aufrufe
261
24559
2
E
Antworten
1
Aufrufe
807
enrem
E
Zurück
Oben Unten