5

Improvvisamente le mappe hanno smesso di funzionare nella mia app e mostra solo una schermata vuota con il logo di google nell'angolo in basso a sinistra.Google maps improvvisamente non funziona

L'errore che ottengo è:

I/Google Maps Android API﹕ Google Play services package version: 4452038 
I/ActivityManager﹕ Start proc com.google.android.gms.maps for service com.google.android.gms/.maps.auth.ApiTokenService: 
I/Google Maps Android API﹕ Google Play services client version: 4452000 
I/Google Maps Android API﹕ Failed to contact Google servers. Another attempt will be made when connectivity is established. 
E/Google Maps Android API﹕ Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors). 

L'unica cosa che credo sia possibile è un errore di autenticazione. Dal momento che ho provato su reti diverse e non ho problemi lì.

Potrebbe esserci il problema con il file build.gradle? Perché i problemi sono iniziati dopo che mi sono incasinato lì, penso.

Questa è la mia generazione Gradle:

apply plugin: 'android' 

android { 
compileSdkVersion 19 
buildToolsVersion "19.0.3" 

def versionPropsFile = file('version.properties') 

if (versionPropsFile.canRead()) { 
    def Properties versionProps = new Properties() 

    versionProps.load(new FileInputStream(versionPropsFile)) 

    def value = 0 

    def runTasks = gradle.startParameter.taskNames 
    if ('assemble' in runTasks || 'assembleRelease' in runTasks || 'aR' in runTasks) { 
     value = 1; 
    } 

    def versionMajor = 1 
    def versionMinor = 3 
    def versionPatch = versionProps['VERSION_PATCH'].toInteger() + value 
    def versionBuild = versionProps['VERSION_BUILD'].toInteger() + 1 
    def version_Code = versionProps['VERSION_CODE'].toInteger() + value 

    versionProps['VERSION_PATCH'] = versionPatch.toString() 
    versionProps['VERSION_BUILD'] = versionBuild.toString() 
    versionProps['VERSION_CODE'] = version_Code.toString() 

    versionProps.store(versionPropsFile.newWriter(), null) 

    defaultConfig { 
     versionCode version_Code 
     versionName "${versionMajor}.${versionMinor}.${versionPatch} (${versionBuild})" 
     minSdkVersion 14 
     targetSdkVersion 19 
    } 
} else { 
    throw new GradleException("Could not read version.properties!") 
} 

signingConfigs { 
    debug { 
     storeFile file("xxx.keystore") 
     storePassword "xxxx" 
     keyAlias "debug" 
     keyPassword "xxxx" 
    } 
    releaseKey { 
     storeFile file("xxx.keystore") 
     storePassword "xxxx" 
     keyAlias "release" 
     keyPassword "xxxx" 
    } 
} 

buildTypes { 
    debug { 
     debuggable true 
     packageNameSuffix ".debug" 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     signingConfig signingConfigs.debug 
    } 

    release { 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     signingConfig signingConfigs.releaseKey 
    } 
} 

lintOptions { 
    abortOnError false 
} 
} 

dependencies { 
    compile project(':nineOldAndroids') 
    compile project(':expListViewLib') 
    compile project(':datetimepickerlibrary') 
    compile project(':volley') 
    compile 'com.android.support:support-v4:+' 
    compile 'com.google.android.gms:play-services:+' 
    compile files('libs/aws-android-sdk-1.7.1.1.jar') 
    compile files('libs/disklrucache-2.0.1.jar') 
} 

il manifesto è simile al seguente:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.app" > 

<permission 
    android:name="com.example.app.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true" /> 

<uses-permission android:name="com.example.app.permission.MAPS_RECEIVE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.VIBRATE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    ... 

    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/config_com.google.android.maps.v2.api_key" /> 
</application> 
</manifest> 

Ho verificato più volte che packageName, impronta digitale SHA1 e API siano corretti. Sono tutti, ma ho ancora una mappa vuota.

Ho visto domande simili là fuori ma nessuna delle soluzioni che ho trovato. Si rifiuta di lavorare per me.

Qualche suggerimento?

MODIFICA: Nulla di ciò che ho provato funziona. Ma ho trovato una domanda simile con qualcuno che sembra avere lo stesso problema: Google Maps Android API Authorization failure - has this service changed in the last few months?

+0

Sta succedendo a entrambi i segni (debug e release)? – betorcs

+0

@betorcs sì, non funziona su nessuno di essi anche se aggiungo il debug al pannello di Google API. –

+0

Ho letto da qualche parte che può essere preconfigurato proguard, prova disabilitarlo 'runProguard false' – betorcs

risposta

3

Ho avuto esattamente lo stesso problema e la soluzione non era affatto ovvia. Controllare se non si cambia DefaultSSLSocketFactory con:

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); 

Rimozione questa linea e l'impostazione presa di fabbrica solo per la connessione richiesta reso il mio lavoro mappe.

+0

Questo ha risolto il mio problema. Grazie mille! Come l'hai capito? –

+2

Quasi per sbaglio. Durante il debugging e scavando nel progetto, in cui le mappe non funzionavano, ho trovato l'indirizzo https usato da google per l'autenticazione. Mi è venuta l'idea di verificare le proprietà di connessione e questo è stato un buon colpo. – Jack

+0

Bello! Buon lavoro! –