Obwohl der Code aus der offiziellen Beispiel-App kopiert wurde, wird der Authentifizierungszustimmungsbildschirm nicht angezeigt, wenn die App über den Play Store veröffentlicht wird. Ich habe zwei OAuth 2.0-Berechtigungsnachweise in Google Api Developer Console generiert, eine für die Veröffentlichung (mit meinem privaten Keystore) und eine für das Debugging (mithilfe des Android Studio-Debug-Keystores).Play-Dienste 11.6: OAuth-Zustimmungsbildschirm wird bei Veröffentlichung nicht angezeigt
UPDATE: Installation meiner App auf einem älteren Emulator 4.4 im Debug-Modus Ich bemerkte das gleiche Verhalten der Release-App auf neueren Geräten. Es wird kein Zustimmungsbildschirm angezeigt, und Logcat zeigt diese Nachricht an:
W/GooglePlayServicesUtil: Google Play-Dienste veraltet. Benötigt 11.717.000 aber 11.509.030 gefunden
es, dass neuere Könnte GoogleApi Schnittstelle den Benutzer aufzufordern, nicht PlayServices zu installieren/aktualisieren, auch wenn die offizielle Dokumentation sagt das?
Hier ist mein Code:
build.gradle (app)
compile 'com.google.android.gms:play-services-auth:11.6.0'
compile 'com.google.android.gms:play-services-drive:11.6.0'
AndroidManifest.xml
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
DriveActivity.java
private static final int REQUEST_CODE_SIGN_IN = 0;
protected GoogleSignInClient mGoogleSignInClient;
protected DriveClient mDriveClient;
protected DriveResourceClient mDriveResourceClient;
protected abstract void onDriveConnected();
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_CODE_SIGN_IN:
if (resultCode == RESULT_OK) {
Task<GoogleSignInAccount> getAccountTask = GoogleSignIn.getSignedInAccountFromIntent(data);
if (getAccountTask.isSuccessful()) {
initializeDriveClient(getAccountTask.getResult());
}
else {
Toast.makeText(this, "Sign-in failed.", Toast.LENGTH_LONG).show();
}
}
break;
}
}
protected void signIn() {
GoogleSignInAccount signInAccount = GoogleSignIn.getLastSignedInAccount(this);
if (signInAccount != null && signInAccount.getGrantedScopes().contains(Drive.SCOPE_FILE)) {
initializeDriveClient(signInAccount);
}
else {
GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(Drive.SCOPE_FILE)
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, signInOptions);
startActivityForResult(mGoogleSignInClient.getSignInIntent(), REQUEST_CODE_SIGN_IN);
}
}
private void initializeDriveClient(GoogleSignInAccount signInAccount) {
mDriveClient = Drive.getDriveClient(this, signInAccount);
mDriveResourceClient = Drive.getDriveResourceClient(this, signInAccount);
onDriveConnected();
}
Wenn Sie eine Aktivität an GoogleSignIn.getClient() übergeben, sollten Sie in einem Dialogfeld zur Aktualisierung der Google Play-Dienste aufgefordert werden. Könnten Sie ein physisches Gerät ausprobieren? Bei Emulatoren ohne Play Store ist das Verhalten etwas anders (d. H. Ein nicht behebbarer Fehler, der nur in Protokollen angezeigt wird). –
Kein Dialog selbst auf dem physischen Gerät, leider ... – Alessandro
Hmm ... das ist nicht zu erwarten. getClient (Aktivität, Optionen) sollte einen Dialog auslösen, wenn die Google Play-Dienste älter als SDK sind. Was Sie für DriveActivity.java eingefügt haben, ist eine direkte Kopie von Ihrem Aktivitätscode? Und dein physisches Gerät hat ältere Play-Dienste als 11.6? –