Мой проект похож на приложение Microsoft Teams, но только в чате. Основываясь на документе https://github.com/microsoftgraph/msgraph-sdk-java, у меня есть реализация, как показано ниже. С помощью этой реализации я могу без проблем вызывать getDrives () и getAllMyPages () и получать содержимое; Однако вызов getEvents () получил «Доступ запрещен. Проверяет учетные данные и повторяет попытку ». Более того, после вызова login () мой статус присутствия остается не в сети. Поддерживается быть доступным. Может ли кто-нибудь указать мне, что я пропустил или сделал не так.
public class MsGraphEndpoint {
private static final Logger LOGGER = LoggerFactory.getLogger(MsGraphEndpoint.class);
IGraphServiceClient graphClient;
private IUserRequestBuilder me;
private String accessToken;
public MsGraphEndpoint(String accessToken) {
this.accessToken = accessToken;
}
public Result login() {
JsonArray result = new JsonArray();
try {
AuthorizationOnBehalfUserProvider provider = new AuthorizationOnBehalfUserProvider(accessToken);
graphClient = GraphServiceClient.builder().authenticationProvider(provider).buildClient();
me = graphClient.me();
JsonObject ret = new JsonObject();
ret.addProperty("result", "success");
result.add(ret);
} catch(Exception ex) {
LOGGER.error("There is an error during login. Error: ", ex);
return new Result(ObjectMapperUtils.errorJsonString("There is an error during login. Error: " + ex.getMessage()), Result.IS_ERROR);
}
return new Result(result.toString(), !Result.IS_ERROR);
}
public Result getDrives() {
JsonArray result = new JsonArray();
try {
IDriveCollectionPage dp = me.drives().buildRequest().get();
while(dp != null) {
dp.getCurrentPage().forEach((drive) -> {
result.add(drive.getRawObject());
});
IDriveCollectionRequestBuilder builder = dp.getNextPage();
if(builder == null) break;
dp = builder.buildRequest().get();
}
} catch(Exception ex) {
return new Result(ObjectMapperUtils.errorJsonString("There is an error during getDrive. Error: " + ex.getMessage()), Result.IS_ERROR);
}
return new Result(result.toString(), !Result.IS_ERROR);
}
public Result getAllMyPages() {
JsonArray result = new JsonArray();
try {
IMessageCollectionRequestBuilder messages = me.messages();
IMessageCollectionRequest request = messages.buildRequest();
IMessageCollectionPage page = request.get();
int count = 0;
while(page != null) {
for(Message message : page.getCurrentPage()) {
JsonObject rawObject = message.getRawObject();
result.add(rawObject);
LOGGER.info(rawObject.toString());
}
IMessageCollectionRequestBuilder builder = page.getNextPage();
if(builder == null)break;
page = builder.buildRequest().get();
}
} catch(Exception ex) {
return new Result(ObjectMapperUtils.errorJsonString("There is an error during getAllMyPages. Error: " + ex.getMessage()), Result.IS_ERROR);
}
return new Result(result.toString(), !Result.IS_ERROR);
}
public Result getEvents() {
JsonArray result = new JsonArray();
try {
IEventCollectionRequestBuilder eb = me.events();
IEventCollectionRequest requests = eb.buildRequest();
IEventCollectionPage ep = requests.get();
while(ep != null) {
for(Event event : ep.getCurrentPage()) {
result.add(event.getRawObject());
}
IEventCollectionRequestBuilder builder = ep.getNextPage();
if(builder == null) break;
ep = builder.buildRequest().get();
}
} catch(Exception ex) {
return new Result(ObjectMapperUtils.errorJsonString("There is an error during login. Error: " + ex.getMessage()), Result.IS_ERROR);
}
return new Result(result.toString(), !Result.IS_ERROR);
}
}