2012-12-05 49 views
4

我想在我的Windows Phone 7應用程序上使用Hotmail API。因此,我必須授予我的移動應用程序訪問權限。我使用Microsoft Live Connect API這樣做,這真的很適合開始。我使用以下代碼進行身份驗證:在WP7中存儲LiveConnectSession

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

如果調用成功(和它目前的確,使作品),我保存獲取的會議。該會話可以在LiveConnectClient構造函數中使用,以啓用與MS API的通信,在我的應用程序中使用Hotmail API。

LiveConnectClient client = new LiveConnectClient(_session); 

我的問題是,我想以某種方式保存會話,因此,當應用程序被墓碑和獲得它的焦點回來,我不希望用戶許可再問 - 他已經給了我, 。我自己發現返回的會話包含一個AccessToken,RefreshToken和Expires屬性(我知道那是什麼,這不是問題)。我如何在將來的通話中使用這些信息?微軟有關這方面的文檔到此爲止,我找不到任何有用的信息。

2解決方法,我發現:

  • Live Connect Button:不應該走的路,因爲我不希望顯示實時按鈕只是讓我的會話變量回來。
  • RESTful API:這需要我完全重寫我迄今爲止所做的工作,因爲一切都依賴於LiveConnectClient(這使得通信非常簡單)。

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

+0

我知道你的意思,男人。微軟對他們API的一些奇怪/任意的限制令人沮喪。 :( – pettys

回答

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