在WP7中存储LiveConnectSession

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);

客户端ID是我从微软注册我的应用程序时获得的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关于此的文档到此结束,我找不到任何有用的信息。
我发现了两个解决方法:
  • Live Connect Button:不应该走这条路,因为我不想显示Live按钮,只是想重新获取我的会话变量。
  • RESTful API:这将需要我完全重写到目前为止所做的一切,因为一切都依赖于LiveConnectClient(这使通信非常容易)。
但我真的不想使用这些解决方法。我相信/希望有更好的解决方案。

我知道你的意思,伙计。微软在他们的API上施加的一些奇怪/武断的限制令人沮丧。 :( - pettys
1个回答

6
看起来答案如下:
  1. 确保您的应用程序包括wl.signin和wl.offline_access范围。

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接