Google 教室 API returns 学生个人资料 JSON 没有电子邮件地址

Google Classroom API returns student profile JSON having no email address

从 Google 获取学生 JSON,不包含任何电子邮件地址,用户名包含值 "Unknown User"。

 {
     "courseId":"1234",
     "profile":{//No email address
             "id":"openId",
             "name":{"fullName":"Unknown user"},//Why "Unknown user"
             "photoUrl":"correct_url"
     },
     "userId":"openId"
}

我们无法访问教师的 Google 课堂帐户,因此我们正在尝试使用测试帐户重现该问题。它只发生在少数用户身上,对所有其他人都很好。

我们正在使用 Google 教室的 Java API。

我们使用的示例代码:

Classroom service = getGoogleClassRoomService(accessToken);
if(service != null) {
    ListStudentsResponse studentsResponse = service.courses().students().list(courseId).execute();
    List<Student> students = studentsResponse.getStudents();
    if(students != null) {
        for (Student student : students) {
            if (student.getProfile().getEmailAddress() != null) {
                //Processing student data
            }
        }
    }
}

需要了解学生的电子邮件地址可以为空的情况,从技术上讲,它不应该为空。

示例学生档案 JSON 参考:https://developers.google.com/classroom/reference/rest/v1/userProfiles#resource-userprofile

验证用户时请求的范围:

https://www.googleapis.com/auth/classroom.courses.readonly https://www.googleapis.com/auth/classroom.profile.emails https://www.googleapis.com/auth/classroom.profile.photos https://www.googleapis.com/auth/classroom.rosters.readonly

为了返回电子邮件地址,您需要请求特殊的 https://www.googleapis.com/auth/classroom.profile.emails OAuth 范围。

该用户是否已被删除?在某些情况下,如果用户已被删除,API 将 return 一个 "user",其中 "Unknown user" 作为名称(没有电子邮件地址)。

Need to know the scenario when email address can be null for student, technically it should not be null.

当 G-Suite 管理员删除学生帐户时会发生这种情况。这只会删除用户帐户,不会将用户从 Google 个教室中删除。这将在该用户所在的那些教室中留下幽灵用户。

幸运的是,G-Suite 允许在 20 天内恢复已删除的用户。如果管理员恢复了此类用户,您将能够在各自的教室中看到这些学生,并可以优雅地将他们从每个教室中移除。

如果用户删除后 20 天过去了,我不确定如何解决此问题。