管理多个Outlook会议室的Android应用程序

时间:2016-02-07 23:30:45

标签: android oauth ms-office outlook-restapi outlook-calendar

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

到目前为止,我已成功使用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()替代方案:请参阅here

现在接下来的步骤是:

  1. 我是否需要管理员用户,甚至只是为了阅读会议室日历或其他方式?

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

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

  4. 由于

2 个答案:

答案 0 :(得分:1)

  1. 今天,如果您希望自己的应用访问其他用户的日历,则需要使用客户端凭据流(AppOnly)。我们正在开发一个API,以便尽快获得可用性信息和更多详细信息。

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

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

答案 1 :(得分: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格式。

希望它有所帮助。