2

Je ne parviens pas à me connecter aux services de jeux Google Play dans un émulateur natif. Toutefois, la même API fonctionne dans Bluestacks.Services de jeu Google Play + émulateur

Jusqu'à présent, l'application demande une liste des réalisations de l'utilisateur via Games.Achievements.getAchievementsIntent. Ces succès sont affichés avec succès dans Bluestacks, cependant, l'écran de l'émulateur natif reste vide.

Pour être honnête, cela a été une surprise lorsque Bluestacks a affiché les réalisations de l'utilisateur (comme illustré ci-dessous) car je n'avais pas implémenté de logique de présentation.

app running in Bluestacks

Je construis des dépendances avec services Google Play 9.6.1:

compile 'com.google.android.gms:play-services-games:9.6.1' 

Emulator est en cours d'exécution d'une image système avec l'API 24 + API Google

J'utilise une instance gérés automatiquement de GoogleApiClient qui tente de se connecter mais échoue ensuite. J'ai essayé de nombreuses corrections en vain.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this, 
        this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Games.API) 
      .addScope(Games.SCOPE_GAMES) 
      .build(); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("onActivityResult", "resultCode = " + resultCode); 
    if (resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) { 
     mGoogleApiClient.connect(); 
    } 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    Log.d("onConnected", "onConnected"); 
    startActivityForResult(Games.Achievements.getAchievementsIntent(mGoogleApiClient), MY_REQ_CODE); 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    Log.d("onConnectionFailed", "onConnectionFailed"); 
    mGoogleApiClient.connect(); 
} 

Résultat dans Android Moniteur:

Connected to process 7907 on device Nexus_5X_API_24_GApps [emulator-5554] 
W/System: ClassLoader referenced unknown path: /data/app/goc.dma.cprach.gameofchairs-1/lib/x86 
W/PopupManager: You have not specified a View to use as content view for popups. Falling back to the Activity content view. Note that this may not work as expected in multi-screen environments 
D/AutoManageHelper: starting AutoManage for client 0 false false 
D/onStart: onStart 
D/AutoManageHelper: onStart true {[email protected]} 

        [ 10-20 03:00:11.990 1490: 1511 D/   ] 
        HostConnection::get() New Host Connection established 0x8c3f9680, tid 1511 
W/gralloc_ranchu: Gralloc pipe failed 

        [ 10-20 03:00:12.089 7907: 7907 D/   ] 
        HostConnection::get() New Host Connection established 0xa438dac0, tid 7907 
I/OpenGLRenderer: Initialized EGL, version 1.4 
D/OpenGLRenderer: Swap behavior 1 
D/onConnectionFailed: onConnectionFailed 
D/AutoManageHelper: beginFailureResolution for ConnectionResult{statusCode=RESOLUTION_REQUIRED, resolution=PendingIntent{20c0bc3: [email protected]}, message=null} 
D/onActivityResult: resultCode = 0 

Répondre

0

Je ne sais pas si cela vous aidera mais j'ai remarqué dans votre journal des erreurs qu'il dit:

"You have not specified a View to use as content view for popups." 

Cocher cette SO thread qui suggère:

utiliser la méthode setViewForPopUps

Games.setViewForPopups(getApiClient(), getWindow().getDecorView().findViewById(android.R.id.content)); 

Une autre façon de le faire est de:

définissent setViewForPopups dans votre objet mGoogleApiClient.

mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .addApi(Drive.API).addScope(Drive.SCOPE_APPFOLDER) 
      .setViewForPopups(findViewById(android.R.id.content)) 
      .build(); 

En regardant votre code, il semble que vous ne l'avez pas ajouté cela. Voici une lecture supplémentaire sur setViewForPopups method.