0

我正在开发一个 Android 应用程序,它将管理几个 Outlook 会议室(用户)的预订。这个想法只是为了显示他们的可用性并在一定时间内预订房间。

到目前为止,我已经成功地使用 Outlook SDK Android 在我自己的日历上获取了这些事件。

// logon() {
       ...
       mResolver = new DependencyResolver.Builder(
              new OkHttpTransport().setInterceptor(new LoggingInterceptor()),  
              new GsonSerializer(),
              new AuthenticationCredentials() {
                   @Override
                   public Credentials getCredentials() {
                      return new OAuthCredentials(
                                   authenticationResult.getAccessToken()
                      );
                   }
              }).build();


// onCreate() {

      Futures.addCallback( logon(), new FutureCallback<Boolean>() { 
            @Override
            public void onSuccess(Boolean result) {
                mClient = new OutlookClient(outlookBaseUrl, mResolver);
                getCalendars();
            }

            @Override
            public void onFailure(Throwable t) {
                Log.e("logon", t.getMessage());
            }
      });


      ...

      protected void getCalendars() {
          DateTime startDate = new DateTime(   
              DateTime.parse("2016-02-05T00:00:00Z"));
          DateTime endDate = new DateTime(
              DateTime.parse("2016-02-06T00:00:00Z"));
          Futures.addCallback(
              mClient.getMe()
                      .getCalendarView()
                      .addParameter("startDateTime", startDate)
                      .addParameter("endDateTime", endDate)
                      .read(),

              new FutureCallback<OrcList<Event>>() {
                  @Override
                  public void onSuccess(final OrcList<Event> result) {
                      runOnUiThread(new Runnable() {
                          @Override
                          public void run() {
                              StringBuilder sb = new StringBuilder();
                              ListIterator<Event> events =
                                          result.listIterator();
                              while (events.hasNext()) {
                                  Event event = events.next();
                                  sb.append(event.getSubject() + "\n");
                              }
                              messagesTextView.setText(sb.toString());
                          }
                      });
                  }

                  @Override
                  public void onFailure(Throwable t) {
                      Log.e("Calendar error", t.getLocalizedMessage());
                  }
              }
          );
      }    

或者使用getUsers()而不是getMe()的替代方法:请参见此处

所以现在接下来的步骤是:

  1. 我是否需要管理员用户才能阅读会议室日历或有其他方式?

  2. 如果不允许我使用管理员帐户,我是否可以依靠 Oauth 流程以良好的可用性/性能管理多个用户?

  3. 我是 Android 新手,处理 Outlook REST API 或 Microsoft Graph 更容易吗?

谢谢

4

2 回答 2

1

您需要一个管理员帐户才能在 Azure 中设置应用程序。设置正确的应用程序权限后,如果您使用仅应用程序授权,则不需要管理员帐户。

Outlook REST API 仅提供当前用户的信息,但使用 Graph API,您只需发送请求即可获取任何会议室或任何用户的事件

https://graph.microsoft.com/v1.0/users/<meetingroom/user email>/calendarView/?endDateTime=2015-12-28T22:23:00Z&startDateTime=2015-12-28T00:00:00Z

请注意,日期格式应为 ISO 8601 格式。

希望能帮助到你。

于 2016-02-12T09:22:37.050 回答
1
  1. 今天,如果您希望您的应用程序访问其他用户的日历,您需要使用客户端凭据流 (AppOnly)。我们正在开发一个 API,它将允许获取可用性信息,很快就会有更多详细信息。

  2. 使用 OAuth 流程可以获得访问令牌和刷新令牌,访问令牌在短时间内有效,刷新令牌可用于生成新的访问令牌。令牌是每个用户的,您基本上将刷新令牌存储在您的应用程序中的每个用户缓存中。

  3. 从平台的角度来看,与单个 Outlook 端点或 Microsoft Graph 交互是相同的。如果您的应用想要访问的不仅仅是日历信息,例如用户配置文件或文件,那么建议使用 Microsoft Graph,因为您可以使用单个访问令牌在单个端点下访问来自多个服务的数据。

于 2016-02-08T03:38:15.003 回答