天天看點

在Windows Phone 8中使用Live Connect并保持登陸狀态

貼幾個有用的位址,實在是太難找了:

對于Windows Phone應用來說,首先需要在應用管理添加應用。URL貌似不填也沒關系。需要注意的是,在API設定裡一定,“移動或桌面用戶端應用”一定要選擇“是”,才能使用OAuth2.0驗證流程。根域、重定向URL根據需要填寫。我需要的隻是擷取使用者身份,通路One Drive檔案,是以沒填。

基本上使用有兩種方式,SDK裡提供了現成的登陸控件,可以直接用,如果不用這個控件的話也可以自己寫登陸過程。

使用控件的方式可參考http://msdn.microsoft.com/zh-cn/library/live/hh826550.aspx的代碼示例,拖一個SignInButton進來,設定好SessionChanged事件就可以了,不需要管Click事件,點選的時候控件自己會調用相應的處理程式。

注意一下作用域與權限,一般來說wl.signin wl.basic這兩個是必須的,我在第一次用的時候發現即使使用者登入了,下次打開應用還需要再次點選授權一次,很麻煩,後來發現必須要加上wl.offline_access這個作用域,下次登陸就預設是登陸狀态了。

<a href="http://social.msdn.microsoft.com/Forums/live/en-US/6df1f31d-a22c-469c-b9f4-5c79e0882701/persisting-session-on-windows-phone?forum=messengerconnect" target="_blank">http://social.msdn.microsoft.com/Forums/live/en-US/6df1f31d-a22c-469c-b9f4-5c79e0882701/persisting-session-on-windows-phone?forum=messengerconnect</a>

<a href="http://igrali.com/2012/12/11/live-connect-sdk-for-windows-phone-8authenticating-and-basic-info/" target="_blank">http://igrali.com/2012/12/11/live-connect-sdk-for-windows-phone-8authenticating-and-basic-info/</a>

<a href="http://stackoverflow.com/questions/10946629/wp7-how-to-store-liveconnectsession-during-tombstoning" target="_blank">http://stackoverflow.com/questions/10946629/wp7-how-to-store-liveconnectsession-during-tombstoning</a>

<a href="http://stackoverflow.com/questions/13212120/windows-phone-live-sdk-api-get-new-session-object-after-restarting-the-app" target="_blank">http://stackoverflow.com/questions/13212120/windows-phone-live-sdk-api-get-new-session-object-after-restarting-the-app</a>

我的目的是,使用者可以不必登陸即可浏覽,但如果要釋出評論的話必須登陸Live賬号,使用者登入一次後,下次打開應用應該就可以直接擷取使用者資訊而不必再次登陸了。

首先在App.xaml.cs裡添加一個靜态變量,用來儲存目前Live連接配接,也可以直接儲存擷取到的使用者資訊

在程式運作時先看看目前的連接配接狀态,如果已經登陸過了,則設定目前的Live連接配接,否則就什麼也不用做了,等需要使用者登入操作的時候再提示:

然後在需要使用者登入操作的地方,放上一個登陸按鈕,設定SessionChanged事件

我這裡儲存的是LiveConnectClient,貌似直接儲存使用者資訊更友善一些,随便了。等寫完這個文章再改。

還可以在VM裡設定評論框和登陸區域的顯示方式,比如綁定到某個屬性上,如果登陸了則顯示評論框,沒登陸顯示登陸按鈕。