在WP7中存储LiveConnectSession

ako*_*out 4 c# windows-phone-7

我想在我的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);
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

LiveConnectClient client = new LiveConnectClient(_session);
Run Code Online (Sandbox Code Playgroud)

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

我找到了2个解决方法:

  • 实时连接按钮:不应该是要走的路,因为我不想显示实时按钮,只是我得到了我的会话变量.
  • RESTful API:这需要我完全重写我到目前为止所做的事情,因为一切都依赖于LiveConnectClient(这使得通信非常简单).

但我真的不想使用那些解决方法.我相信/希望有更好的解决方案.

小智 6

看起来答案如下

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

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

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

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