4

我想在我的 Windows Phone 7 应用程序上使用 Hotmail API。因此,我必须授予对我的移动应用程序的访问权限。我使用Microsoft Live Connect API来做到这一点,它在开始时确实非常有用。我使用以下代码进行身份验证:

string[] requiredScope = { "wl.signin", "wl.calendars_update", "wl.offline_access" };
LiveAuthClient auth = new LiveAuthClient(Configuration.ClientID);
auth.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(authInitializeCompletedHandler);
auth.LoginAsync(requiredScope);

ClientID 是我从 MS 获得的用于注册我的应用程序的 ID。我的回调看起来(很简单)是这样的:

private void authInitializeCompletedHandler(object sender, LoginCompletedEventArgs e)
{
    if (e.Status == LiveConnectSessionStatus.Connected)
    {
        this._session = e.Session; // Session hat AccessToken und RefreshToken
        this._isAuthorized = true;
        callDelegates();
    }
}

如果该调用成功(并且它当前成功了,所以它有效),我存储检索到的 Session。此会话可在 LiveConnectClient 构造函数中使用,以启用与 MS API 的通信,在我的应用程序中为 Hotmail API。

LiveConnectClient client = new LiveConnectClient(_session);

我的问题是我想以某种方式保存该会话,以便当应用程序被墓碑化并重新获得焦点时,我不希望用户再次请求许可 - 他已经给了我。我自己发现返回的会话包含 AccessToken、RefreshToken 和 Expires 属性(我知道那是什么,这不是问题)。我如何在以后的通话中使用该信息?Microsoft 的相关文档到此结束,我找不到任何有用的信息。

我发现了 2 个解决方法:

  • Live Connect Button:不应该是要走的路,因为我不想显示 Live Button 只是因为我得到了我的会话变量。
  • RESTful API:这需要我完全重写到目前为止所做的一切,因为一切都依赖于 LiveConnectClient(这使得通信非常容易)。

但我真的不想使用这种解决方法。我相信/希望有更好的解决方案。

4

1 回答 1

6

看起来这个问题的答案如下

  1. 确保您的应用程序同时包含 wl.signin 和 wl.offline_access 范围。

  2. 如果您未使用 SDK 中提供的登录控件,则应始终在应用启动时调用 LiveAuthClient.InitializeAsync。如果 InitializeAsync 未返回有效会话,则仅调用 LiveAuthClient.LoginAsync。

这些步骤将确保您收到刷新令牌,因此无需在第一次后提示登录或同意。

From: http://social.msdn.microsoft.com/Forums/en-US/messengerconnect/thread/6df1f31d-a22c-469c-b9f4-5c79e0882701

于 2013-04-10T00:18:18.413 回答