Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用GoogleAppClient的课堂服务_Android_Google Classroom - Fatal编程技术网

Android 如何使用GoogleAppClient的课堂服务

Android 如何使用GoogleAppClient的课堂服务,android,google-classroom,Android,Google Classroom,示例代码显示了在使用GoogleAccountCredential类登录到google时如何调用该服务 mService = new com.google.api.services.classroom.Classroom.Builder( transport, jsonFactory, credential) .setApplicationName("Kindergarten Math School") .build

示例代码显示了在使用GoogleAccountCredential类登录到google时如何调用该服务

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

但是,随着新版本的,我们现在使用的是play services auth,我们现在使用的是GoogleAppClient。我们如何使用它创建服务?

应用程序发送到教室API的每个请求都必须包含授权令牌。该令牌还可以将您的应用程序标识到Google。您可以使用或

使用教室网站googleapis.com可以获得不同的服务,如。您可以使用该服务创建课程

HTTP请求

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)
}
],
}
需要以下OAuth范围:


有关课堂API的更多详细信息,请查看此链接:

因此,我做了以下更改-

在build.gradle中重新添加了依赖项-

schoolCompile('com.google.api-client:google-api-client-android:1.22.0') {  
  exclude group: 'org.apache.httpcomponents'  
}  
然后,在GoogleAppClient旁边创建凭证对象

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());  
是否使用mGoogleApiClient登录-

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);  
activity.startActivityForResult(signInIntent, REQUEST_ACCOUNT_PICKER);  
完成后(在onActivityResult中),在凭证上设置电子邮件-

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());  
}  
如前所述,连接到教室时使用凭据创建服务-

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();  

而且,这起了作用。在登录期间,我被要求授权额外的教室范围。课堂通话也顺利通过。仍然在清理上面的代码,但是,它是有效的

在设置所选帐户时,还可以使用:mCredential.setSelectedAccount(acct.getAccount());它确实做了同样的事情,但可能更具可读性。我认为使用setSelectedAccount而不是setSelectedAccountName存在一些许可问题。现在可以修好了。值得一试。