5

Nagłe mapy przestały działać w mojej aplikacji i pokazują pusty ekran z logo Google w lewym dolnym rogu.Mapy Google nagle nie działają

Błąd pojawia się:

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). 

Tylko że ja wierzę to możliwe jest błąd uwierzytelniania. Odkąd próbowałem w różnych sieciach i nie mam problemów.

Czy problem może dotyczyć pliku build.gradle? Ponieważ problemy zaczęły się po tym, jak się tam nudziłem.

To jest mój build 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') 
} 

manifest wygląda następująco:

<?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> 

Sprawdziłem kilka razy, że packageName, sha1 papilarnych i API jest prawidłowe. Wszystkie są, ale wciąż mam pustą mapę.

Widziałem podobne pytania, ale nie znalazłem żadnego rozwiązania. Po prostu nie chce pracować dla mnie.

Wszelkie sugestie?

EDYCJA: Nic, co próbowałem, nie działa. Ale znalazłem podobne pytanie z kimś, kto wydaje się mieć ten sam problem: Google Maps Android API Authorization failure - has this service changed in the last few months?

+0

Czy dzieje się to zarówno przy podpisywaniu (debugowaniu, jak i wydaniu)? – betorcs

+0

@betorcs yup, nie działa na żadnej z nich, nawet jeśli dodaję debugowanie do panelu google api. –

+0

Czytam gdzieś, może to być błędnie skonfigurowane proguard, spróbuj go wyłączyć 'runProguard false' – betorcs

Odpowiedz

3

Miałem dokładnie ten sam problem, a rozwiązanie nie było wcale oczywiste. Sprawdź, czy nie zmieniają DefaultSSLSocketFactory z:

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); 

Usunięcie tej linii i ustawienie fabryczne gniazdo tylko wymagane połączenie wykonaną pracę map.

+0

To rozwiązało mój problem. Dziękuję bardzo! Jak to rozgryzłeś? –

+2

Prawie przypadkowo. Podczas debugowania i przeszukiwania projektu, w którym mapy nie działały, znalazłem adres https używany przez google do uwierzytelniania. Wpadłem na pomysł sprawdzenia właściwości połączenia i to był dobry strzał. – Jack

+0

Nice! Dobra robota! –