2016-07-10 10 views
2

Der Beispielcode https://developers.google.com/classroom/quickstart/android zeigt, wie der Dienst aufgerufen wird, wenn die GoogleAccountCredential-Klasse für die Anmeldung bei Google verwendet wird.So verwenden Sie den Unterrichtsservice mit GoogleApiClient

mService = new com.google.api.services.classroom.Classroom.Builder(
      transport, jsonFactory, credential) 
      .setApplicationName("Kindergarten Math School") 
      .build(); 

Aber mit neuerer Version von uns jetzt Play-Dienste-auth verwenden, verwenden wir jetzt ein GoogleApiClient. Wie schaffen wir damit den Service?

Antwort

0

Jede Anforderung, die Ihre Anwendung an die Classroom-API sendet, muss ein Autorisierungstoken enthalten. Der Token identifiziert Ihre Anwendung auch bei Google. Sie können entweder Google Sign-in oder OAuth 2.0 verwenden

Mit classroom.googleapis.com haben verschiedene Dienste wie .courses. Sie können einen Kurs erstellen, indem Sie den Service verwenden.

HTTP-Anforderung

POST https://classroom.googleapis.com/v1/courses 

{ 
"id": string, 
"name": string, 
"section": string, 
"descriptionHeading": string, 
"description": string, 
"room": string, 
"ownerId": string, 
"creationTime": string, 
"updateTime": string, 
"enrollmentCode": string, 
"courseState": enum(CourseState), 
"alternateLink": string, 
"teacherGroupEmail": string, 
"courseGroupEmail": string, 
"teacherFolder": { 
object(DriveFolder) 
}, 
"courseMaterialSets": [ 
{ 
object(CourseMaterialSet) 
} 
], 
} 

Benötigt er folgende OAuth -umfang:

https://www.googleapis.com/auth/classroom.courses

Weitere Details regaridng Klassenzimmer API, überprüfen Sie diesen Link: https://developers.google.com/classroom/reference/rest/

0

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!

+0

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

+0

Ich glaube, es gab ein Problem mit der Erlaubnis, setSelectedAccount anstelle von setSelectedAccountName zu verwenden. Kann jetzt behoben werden. Einen Versuch wert. –