2015-06-28 12 views
5

Sto cercando di collegare il mio gioco per Google servizio paly ma continuano a dirmi mancata connessione con statusCode SIGN_IN_REQUIRED.collegamento GoogleApiClient riuscita con statusCode SIGN_IN_REQUIRED

messaggio

logcat:

I/GooglePlayServicesActiv: Collegamento GoogleApiClient non riuscita: {ConnectionResult statusCode = SIGN_IN_REQUIRED, risoluzione = {PendingIntent 421a8ce0: [email protected]}}

ho già fatto tutto i passaggi necessari su Setting Up Google Play Games Services

Plz dammi qualsiasi cosa che potrebbe costare questo problema.

Codice Classe:

package com.alnassre.ffeather.android; 

import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.os.Bundle; 
import android.util.Log; 

import com.alnassre.ffeather.FFeather; 
import com.alnassre.ffhelper.IGoogleServices; 
import com.badlogic.gdx.backends.android.AndroidApplication; 
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.games.Games; 
import com.google.android.gms.plus.Plus; 

public class AndroidLauncher extends AndroidApplication implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener, 
     IGoogleServices{ 


    private static final String TAG = "GooglePlayServicesActiv"; 

    private static final String KEY_IN_RESOLUTION = "is_in_resolution"; 

    /** 
    * Request code for auto Google Play Services error resolution. 
    */ 
    protected static final int REQUEST_CODE_RESOLUTION = 1; 

    /** 
    * Google API client. 
    */ 
    private GoogleApiClient mGoogleApiClient; 

    /** 
    * Determines if the client is in a resolution state, and 
    * waiting for resolution intent to return. 
    */ 
    private boolean mIsInResolution; 

    /** 
    * Called when the activity is starting. Restores the activity state. 
    */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState != null) { 
      mIsInResolution = savedInstanceState.getBoolean(KEY_IN_RESOLUTION, false); 
     } 

     // main code 
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
     initialize(new FFeather(this), config); 
    } 

    /** 
    * Called when the Activity is made visible. 
    * A connection to Play Services need to be initiated as 
    * soon as the activity is visible. Registers {@code ConnectionCallbacks} 
    * and {@code OnConnectionFailedListener} on the 
    * activities itself. 
    */ 
    @Override 
    protected void onStart() { 
     super.onStart(); 


     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Games.API) 
        .addApi(Plus.API) 
        .addScope(Games.SCOPE_GAMES) 
        .addScope(Plus.SCOPE_PLUS_LOGIN) 
          // Optionally, add additional APIs and scopes if required. 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 
     } 
     mGoogleApiClient.connect(); 
    } 

    /** 
    * Called when activity gets invisible. Connection to Play Services needs to 
    * be disconnected as soon as an activity is invisible. 
    */ 
    @Override 
    protected void onStop() { 
     if (mGoogleApiClient != null) { 
      mGoogleApiClient.disconnect(); 
     } 
     super.onStop(); 
    } 

    /** 
    * Saves the resolution state. 
    */ 
    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(KEY_IN_RESOLUTION, mIsInResolution); 
    } 

    /** 
    * Handles Google Play Services resolution callbacks. 
    */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case REQUEST_CODE_RESOLUTION: 
       retryConnecting(); 
       break; 
     } 
    } 

    private void retryConnecting() { 
     mIsInResolution = false; 
     if (!mGoogleApiClient.isConnecting()) { 
     // mGoogleApiClient.connect(); 
     } 
    } 

    /** 
    * Called when {@code mGoogleApiClient} is connected. 
    */ 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     Log.i(TAG, "GoogleApiClient connected"); 
     // TODO: Start making API requests. 
    } 

    /** 
    * Called when {@code mGoogleApiClient} connection is suspended. 
    */ 
    @Override 
    public void onConnectionSuspended(int cause) { 
     Log.i(TAG, "GoogleApiClient connection suspended"); 
     retryConnecting(); 
    } 

    /** 
    * Called when {@code mGoogleApiClient} is trying to connect but failed. 
    * Handle {@code result.getResolution()} if there is a resolution 
    * available. 
    */ 

    @Override 
    public void onConnectionFailed(ConnectionResult result) { 
     Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); 
     if (!result.hasResolution()) { 
      // Show a localized error dialog. 
      GooglePlayServicesUtil.getErrorDialog(
        result.getErrorCode(), this, 0, new DialogInterface.OnCancelListener() { 
         @Override 
         public void onCancel(DialogInterface dialog) { 
          retryConnecting(); 
         } 
        }).show(); 
      return; 
     } 
     // If there is an existing resolution error being displayed or a resolution 
     // activity has started before, do nothing and wait for resolution 
     // progress to be completed. 
     if (mIsInResolution) { 
      return; 
     } 
     mIsInResolution = true; 
     try { 
      result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
     } catch (IntentSender.SendIntentException e) { 
      Log.e(TAG, "Exception while starting resolution activity", e); 
      retryConnecting(); 
     } 
    } 


    @Override 
    public void signIn() { 

    } 

    @Override 
    public void signOut() { 

    } 

    @Override 
    public void rateGame() { 

    } 

    @Override 
    public void submitScore(long score) { 

    } 

    @Override 
    public void showScores() { 

    } 

    @Override 
    public boolean isSignedIn() { 
     return false; 
    } 
} 

Il logcat:

06-29 01:19:41.880 26169-26192/com.alnassre.ffeather.android I/FFeather﹕ created 
06-29 01:19:41.910 26169-26192/com.alnassre.ffeather.android I/FFeather﹕ character number:0 
06-29 01:19:41.910 26169-26194/com.alnassre.ffeather.android V/SoundPoolThread﹕ Got message m=2, mData=1 
06-29 01:19:41.910 26169-26194/com.alnassre.ffeather.android V/MediaPlayer﹕ decode(59, 28840, 16502) 
06-29 01:19:41.930 26169-26194/com.alnassre.ffeather.android V/SoundPoolThread﹕ Got message m=2, mData=2 
06-29 01:19:41.930 26169-26194/com.alnassre.ffeather.android V/MediaPlayer﹕ decode(60, 45392, 10400) 
06-29 01:19:41.945 26169-26194/com.alnassre.ffeather.android V/SoundPoolThread﹕ Got message m=2, mData=3 
06-29 01:19:41.945 26169-26194/com.alnassre.ffeather.android V/MediaPlayer﹕ decode(61, 1640, 27150) 
06-29 01:19:41.960 26169-26172/com.alnassre.ffeather.android D/dalvikvm﹕ GC_CONCURRENT freed 375K, 8% free 12453K/13511K, paused 2ms+14ms, total 38ms 
06-29 01:19:42.065 26169-26169/com.alnassre.ffeather.android I/GooglePlayServicesActiv﹕ GoogleApiClient connection failed: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{421a8ce0: [email protected]}} 
06-29 01:19:42.165 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ unregisterListener:: Listener= [email protected]1403e0 
06-29 01:19:42.165 26169-26169/com.alnassre.ffeather.android D/Sensors﹕ Remain listener = Sending .. normal delay 200ms 
06-29 01:19:42.165 26169-26169/com.alnassre.ffeather.android I/Sensors﹕ sendDelay --- 200000000 
06-29 01:19:42.165 26169-26192/com.alnassre.ffeather.android I/AndroidGraphics﹕ paused 
06-29 01:19:42.165 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ JNI - sendDelay 
06-29 01:19:42.165 26169-26169/com.alnassre.ffeather.android I/SensorManager﹕ Set normal delay = true 
06-29 01:19:42.175 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ unregisterListener:: Listener= [email protected]196300 
06-29 01:19:42.175 26169-26169/com.alnassre.ffeather.android D/Sensors﹕ Remain listener = Sending .. normal delay 200ms 
06-29 01:19:42.175 26169-26169/com.alnassre.ffeather.android I/Sensors﹕ sendDelay --- 200000000 
06-29 01:19:42.180 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ JNI - sendDelay 
06-29 01:19:42.180 26169-26169/com.alnassre.ffeather.android I/SensorManager﹕ Set normal delay = true 
06-29 01:19:42.190 26169-26169/com.alnassre.ffeather.android I/AndroidInput﹕ sensor listener tear down 
06-29 01:19:42.400 26169-26169/com.alnassre.ffeather.android W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection 
06-29 01:19:48.815 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ registerListener :: handle = 0 name= LSM330DLC Acceleration Sensor delay= 20000 Listener= [email protected]1f3558 
06-29 01:19:48.825 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ registerListener :: handle = 1 name= AK8963C Magnetic field Sensor delay= 20000 Listener= [email protected]1f3fa0 
06-29 01:19:48.825 26169-26169/com.alnassre.ffeather.android I/AndroidInput﹕ sensor listener setup 
06-29 01:19:48.860 26169-26192/com.alnassre.ffeather.android I/AndroidGraphics﹕ resumed 
06-29 01:19:49.130 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ onAccuracyChanged :: accuracy = 3 
06-29 01:19:50.650 26169-26172/com.alnassre.ffeather.android D/dalvikvm﹕ GC_CONCURRENT freed 310K, 7% free 12584K/13511K, paused 12ms+2ms, total 31ms 
06-29 01:19:50.650 26169-26192/com.alnassre.ffeather.android D/dalvikvm﹕ WAIT_FOR_CONCURRENT_GC blocked 15ms 
06-29 01:20:18.395 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ unregisterListener:: Listener= [email protected]1f3558 
06-29 01:20:18.395 26169-26169/com.alnassre.ffeather.android D/Sensors﹕ Remain listener = Sending .. normal delay 200ms 
06-29 01:20:18.395 26169-26169/com.alnassre.ffeather.android I/Sensors﹕ sendDelay --- 200000000 
06-29 01:20:18.395 26169-26192/com.alnassre.ffeather.android I/AndroidGraphics﹕ paused 
06-29 01:20:18.395 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ JNI - sendDelay 
06-29 01:20:18.395 26169-26169/com.alnassre.ffeather.android I/SensorManager﹕ Set normal delay = true 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ unregisterListener:: Listener= [email protected]1f3fa0 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android D/Sensors﹕ Remain listener = Sending .. normal delay 200ms 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/Sensors﹕ sendDelay --- 200000000 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android D/SensorManager﹕ JNI - sendDelay 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/SensorManager﹕ Set normal delay = true 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/AndroidInput﹕ sensor listener tear down 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/AndroidGraphics﹕ Managed meshes/app: { } 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/AndroidGraphics﹕ Managed textures/app: { } 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/AndroidGraphics﹕ Managed cubemap/app: { } 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/AndroidGraphics﹕ Managed shaders/app: { } 
06-29 01:20:18.400 26169-26169/com.alnassre.ffeather.android I/AndroidGraphics﹕ Managed buffers/app: { } 
06-29 01:20:18.400 26169-26194/com.alnassre.ffeather.android V/SoundPoolThread﹕ Got message m=1, mData=0 
06-29 01:20:18.400 26169-26194/com.alnassre.ffeather.android V/SoundPoolThread﹕ goodbye 
06-29 01:20:18.400 26169-26192/com.alnassre.ffeather.android V/SoundPoolThread﹕ return from quit 
06-29 01:20:18.405 26169-26192/com.alnassre.ffeather.android V/SoundPoolThread﹕ return from quit 
06-29 01:20:18.405 26169-26192/com.alnassre.ffeather.android I/AndroidGraphics﹕ destroyed 
06-29 01:20:18.680 26169-26169/com.alnassre.ffeather.android W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection 
06-29 01:20:18.860 26169-26169/com.alnassre.ffeather.android W/SurfaceView﹕ CHECK surface infomation creating=false formatChanged=false sizeChanged=false visible=false visibleChanged=true surfaceChanged=true realSizeChanged=false redrawNeeded=false left=false top=false 
+0

Quale dispositivo stai utilizzando per il test? L'emulatore o un dispositivo di gioco di Google? Hai eseguito l'accesso a Google Play? – Cookster

+0

Uso dispositivi reali, Samsung Galaxy Nexus e Samsung Galaxy Note II e sì Singed-in con lo stesso account. – alnassre

+1

Hai visto questo post SO? http://stackoverflow.com/questions/27770243/google-sign-in-error-with-statuscode-sign-in-required-on-android-4 Anche questo: http://stackoverflow.com/ questions/23736137/onconnectionfailed-geving-sign-in-required – Cookster

risposta

2

Tale soluzione non è stato visto su qualsiasi documento, per un principiante come me, aveva bisogno di essere menzionato,

Aggiunta il permesso mancante:

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

a diventare:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.alnassre.ffeather.android" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="22" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 


    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/GdxTheme" > 
     <activity 
      android:name="com.alnassre.ffeather.android.AndroidLauncher" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> 
      <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.games.APP_ID" android:value="@string/app_id" /> 
     <meta-data android:name="com.google.android.gms.appstate.APP_ID" android:value="@string/app_id" /> 
     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> 
    </application> 

</manifest> 
+0

Stai utilizzando un IDE aggiornato? Lo strumento LINT dovrebbe aver acquisito l'autorizzazione mancante. Inoltre, puoi vedere qui: https://developers.google.com/identity/sign-in/android/start-integrating – Cookster

+0

@cookster Sto utilizzando Android Studio 1.3, è l'ultimo, potrebbe essere necessario alcune impostazioni Cattura il permesso mancante? – alnassre

3

C'è un passo ulteriore e molto importante che i principianti come me spesso si affacciano in studio Android.

È necessario specificare manualmente il Keystore utilizzato per creare e firmare l'APK quando viene eseguito tramite Android Studio. Questo dovrebbe essere lo stesso Keystore con la firma del certificato SHA1 che hai inserito per generare la chiave API in Google Developer Console.

Ecco come si fa:

  1. Se non si dispone di un archivio chiavi esistente o non riesce a trovarlo, è possibile crearne uno andando a BUILD ->Genera Firmato APK - > Crea nuovo Keystore Android Studio

  2. Dopo aver creato l'archivio di chiavi, è necessario aggiungerlo alle impostazioni del progetto in modo che sia utilizzato per firmare l'APK. Goto File ->Struttura del progetto ->Seleziona il modulo (ad es.g: app) ->firma Keystore Android Studio

  3. Poi è necessario specificare le Firma Config che si è creato nella Fase 2, a Tipi Costruire Keystore Android Studio

Spero che questo aiuta qualcuno!

+1

Grazie! Ha funzionato! Vorrei aggiungere "ricorda, come sempre, anche un 'progetto pulito'!" – Alessandro

+0

Ci sono stato negli ultimi 3 giorni, grazie! – Kiya

Problemi correlati