1

我想從Facebook獲取用戶基本信息,用戶登錄後檢索Xamarin客戶的Facebook個人資料

我在How to: Work with authentication和「如何下看了看文檔:檢索驗證的用戶信息「部分,它顯示瞭如何從.NET後端代碼通過使用HttpClient,以與的accessToken調用做到這一點:

var fbRequestUrl = "https://graph.facebook.com/me/feed?access_token=" 
     + credentials.AccessToken; 

因爲移動客戶端,我們從MobileServices得到的accessToken,可以在客戶端直接撥打Facebook端點,或客戶端SDK是否向我們提供任何bui lt-in功能?

我一直在關注Xamarin.Forms Sport項目,他們獲得user information from Google的方式是對Google端點進行硬編碼並撥打電話獲取用戶信息。

注意:Xamarin.Forms Sport使用移動服務,而不是移動應用程序,所以不知道這是否有任何區別。

回答

4

聽起來好像你正在做服務器導向的登錄:在那裏你打電話給你的後端做Facebook登錄舞。在此,您的客戶端應用程序正在對.auth/login/facebook進行GET調用,這會打開一個瀏覽器或Web身份驗證代理,您可以在其中輸入憑據。最終的結果是您將收到一個Zumo訪問令牌(與Facebook訪問令牌不同)。

您不能使用Zumo訪問令牌自行訪問Facebook API。在您鏈接的「如何:」中,我們向您展示瞭如何使用來自後端的GetAppServiceIdentityAsync獲取Facebook訪問令牌。這是可能的,因爲您已經通過門戶存儲了您的Facebook客戶端ID,後者可用。

這樣做auth的好處是,你不必與你的移動應用程序部署你的Facebook客戶端ID。但是,如果您想從客戶端訪問Facebook API,則需要將Facebook令牌發送給客戶端。

一些方法我可以建議:從客戶端

  1. 呼叫.auth /我。響應將爲您提供一個JSON對象,您可以解析該對象,該對象應包含與您的Zumo令牌關聯的FB令牌。

  2. 使用將執行GetAppServiceIdentityAsync並使用Facebook訪問令牌的值進行響應的[Authorize]屬性集編寫自定義API。然後您可以解析客戶端的響應。這基本上就是.auth /我所做的,但是您可以編寫它來僅返回您的FB訪問令牌。

  3. 使用Facebook .NET SDK http://facebooksdk.net/進行客戶端定向登錄。您將在您的客戶端上獲得Facebook令牌,然後您可以使用我們的LoginAsync(Facebook,access_token)方法獲取Zumo令牌,以便您的客戶端可以訪問Facebook和您的移動應用程序後端。正如我之前提到的那樣,缺點是您必須在應用程序中部署您的FB Client ID。

+1

我不知道令牌不是Facebook訪問令牌!我喜歡最好的方法#1。所以一旦我擁有FB訪問令牌,我就會打電話給客戶端的「https://graph.facebook.com/me」端點來獲取用戶的信息? –

+1

最後一個問題,如果FB訪問令牌已過期,我將如何使用刷新令牌獲取新的訪問令牌? –

+1

嗨Queti,目前,我們不支持Facebook的刷新。原因是我們從facebook獲得的令牌擴展了令牌。目前不支持刷新擴展令牌。查看此鏈接以獲取有關擴展令牌的更多信息:[link](https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension)。看起來一旦擴展已過期,您的用戶將再次登錄,但不應該重新輸入信用。 – Aziel