【问题标题】:Android App that manages multiple Outlook Meeting Rooms管理多个 Outlook 会议室的 Android 应用
【发布时间】:2016-02-07 23:30:44
【问题描述】:

我正在开发一个 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():参见 here

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:
    1. 今天,如果您希望您的应用访问其他用户的日历,您需要使用客户端凭据流 (AppOnly)。我们正在开发一个 API,它将允许获取可用性信息,很快就会有更多详细信息。

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

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

    【讨论】:

    • 谢谢。关于第 2 点的另一件事:该应用程序将至少每 30 秒获取一次更新的数据,但由于它会在夜间自动停止工作,我需要在每天早上启动应用程序时获取一个新的访问令牌,对吗?我是否需要存储所有用户凭据以确保始终能够登录?新问题:stackoverflow.com/questions/35353319/…。再次助教
    • 您不需要存储用户凭据,实际上我们建议不要这样做。您存储的是刷新令牌。使用刷新令牌,您可以返回令牌端点并请求新的访问令牌
    • 对于客户端凭据流,您的意思是使用服务/守护程序应用程序? (msdn.microsoft.com/en-us/library/azure/dn645543.aspx) 这是唯一的方法吗?我已经获得了一个具有会议室代表访问权限的帐户(具有“作者”权限级别),但我收到了 403。:(
    【解决方案2】:

    您需要一个管理员帐户才能在 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 格式。

    希望对你有帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多