So habe ich die folgende Änderungen -
Hinzugefügt wurde die Abhängigkeit in build.gradle zurück -
schoolCompile('com.google.api-client:google-api-client-android:1.22.0') {
exclude group: 'org.apache.httpcomponents'
}
Dann erstellt das Credential-Objekt neben dem googleApiClient
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(activity.getApplicationContext().getResources().getString(R.string.firebase_client_id))
.requestEmail()
.requestProfile()
.requestScopes(new Scope(ClassroomScopes.CLASSROOM_COURSES_READONLY), new Scope(ClassroomScopes.CLASSROOM_ROSTERS_READONLY))
.requestServerAuthCode(auth_client_id)
.build();
mGoogleApiClient = new GoogleApiClient.Builder(activity)
.enableAutoManage(activity /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addConnectionCallbacks(this)
//.addOnConnectionFailedListener(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mCredential = GoogleAccountCredential.usingOAuth2(
activity.getApplicationContext(), Arrays.asList(SCOPES))
.setBackOff(new ExponentialBackOff());
Hat die Anmeldung bei der Verwendung mGoogleApiClient -
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
activity.startActivityForResult(signInIntent, REQUEST_ACCOUNT_PICKER);
Wenn das Abgeschlossen (in onActivityResult), legen Sie die E-Mail auf dem Berechtigungsnachweis fest -
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
mCredential.setSelectedAccountName(acct.getEmail());
} else {
// Signed out, show unauthenticated UI.
Log.i("GoogleAuthHelper", "Log in failed:"+result.getStatus());
}
die Anmeldeinformationen verwenden, wenn sie Unterricht verbindet den Dienst nach wie vor zu schaffen -
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
mService = new com.google.api.services.classroom.Classroom.Builder(
transport, jsonFactory, credential)
.setApplicationName("Kindergarten Math School")
.build();
Und das funktionierte. Während der Anmeldung wurde ich gebeten, die zusätzlichen Klassenräume zuzulassen. Und die Klassenrufe gingen erfolgreich durch. Den oben genannten Code immer noch aufräumen, aber es funktioniert!
Wenn Sie das ausgewählte Konto festlegen, können Sie auch Folgendes verwenden: mCredential.setSelectedAccount (acct.getAccount()); Es tut wirklich das Gleiche, aber könnte ein wenig lesbarer sein. – Zoccadoum
Ich glaube, es gab ein Problem mit der Erlaubnis, setSelectedAccount anstelle von setSelectedAccountName zu verwenden. Kann jetzt behoben werden. Einen Versuch wert. –