C# 在WP7中存储LiveConnectSession

C# 在WP7中存储LiveConnectSession,c#,windows-phone-7,C#,Windows Phone 7,我想在我的Windows Phone 7应用程序上使用Hotmail API。因此,我必须授权访问我的移动应用程序。我使用的是,这在一开始就非常有效。我使用以下代码进行身份验证: string[] requiredScope = { "wl.signin", "wl.calendars_update", "wl.offline_access" }; LiveAuthClient auth = new LiveAuthClient(Configuration.ClientID); auth.Log

我想在我的Windows Phone 7应用程序上使用Hotmail 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);
如果该调用成功(并且当前成功,因此可以正常工作),我将存储检索到的会话。此会话可在LiveConnectClient构造函数中使用,以启用与MS API(在我的应用程序中为Hotmail API)的通信

LiveConnectClient client = new LiveConnectClient(_session);
我的问题是,我想以某种方式保存该会话,这样当应用程序被删除并恢复其焦点时,我就不希望用户再次请求许可——他已经给了我。我自己发现返回的会话包含AccessToken、RefreshToken和Expires属性(我知道这是什么,这不是问题所在)。我如何在以后的通话中使用这些信息?微软关于这方面的文档到此结束,我找不到任何有用的信息

我发现了两个变通方法:

  • :不应该这样做,因为我不想在获取会话变量后显示Live按钮
  • :这需要我完全重写我到目前为止所做的工作,因为一切都依赖于LiveConnectClient(这使得通信非常容易)

但我真的不想使用这种变通方法。我相信/希望有一个更好的解决办法。

看来这个问题的答案如下

  • 确保您的应用程序同时包含wl.sign和wl.offline\u访问范围

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

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

    发件人:

    我知道你的意思,伙计。微软对其API设置的一些奇怪/随意的限制令人沮丧:(
    LiveConnectClient client = new LiveConnectClient(_session);