2013-05-08 66 views
7

即時通訊只是直接進入,並給你一些關於即時消息試圖做什麼,試過什麼,以及我的方式障礙的背景知識。所以在這裏不用..Facebook與C#桌面應用程序的集成

我的目標
要發佈到從桌面應用程序Facebook的個人主頁或牆壁。
桌面應用程序將由擁有自己的Facebook帳戶的個人用戶使用。
目標是爲每個用戶創建他們自己的Facebook應用程序,並獲取應用程序ID和應用程序密碼。
然後使用桌面應用程序中的應用程序ID和應用程序密碼(保存在數據庫或配置的某個位置) 以允許桌面應用程序的用戶發佈到他們的個人資料,而無需輸入他們的電子郵件地址和密碼以便先登錄

因此,總之,1 facebook應用程序每個facebook帳戶。
該應用程序的設置將通過自己的Facebook應用程序,而無需在

記錄主要強調這裏是用戶不必登錄通過窗口或手動保存在每個用戶的桌面應用程序 後到自己的Facebook瀏覽器。

我已經創建了我的Facebook應用程序,並將其設置爲生存狀態..我還在設置(在Facebook內)中添加了所有可能的權限和擴展權限,以確保我沒有丟失任何內容。 所以我有我的AppID和應用程序的祕密..我也有我的客戶端令牌,它說,用來代替'auth方法'的應用程序祕密。我用它來獲取我的訪問令牌。我嘗試了應用程序的祕密和它不返回訪問令牌

我嘗試:

C#FACEBOOK SDK 於是,我開始和現在還在使用C#SDK
我可以檢索我的訪問令牌但不能發佈。

無論我嘗試什麼,我總能得到他下面的錯誤...這些只是我嘗試過的許多代碼示例中的2個。
(OAuthException - #2500)必須使用活動訪問令牌來查詢有關當前用戶的信息。

dynamic r = fb.Post("me/feed", new { message = "My seconds wall post using Facebook C# SDK" });

(OAuthException - #190)客戶端令牌不能用於此API

dynamic r = fb.Post("kevin.maguire.965/feed", new { message = "My second wall post using Facebook C# SDK" });

我讀了下面的鏈接,其中指出我的訪問令牌下面的提取物是一個應用程序令牌,我需要一個用戶或頁面的訪問令牌? Need Help on OAuthException Code 2500 錯誤2500意味着你沒有訪問令牌或應用程序訪問令牌,但試圖訪問/ ME/- 「我」爲「當前用戶或頁面ID」,因此無需訪問令牌將無效的佔位符用戶或頁面

所以,我試圖讓用戶ID後面使用下面的答案(Facebook C# SDK Get Current User

var fb = new FacebookClient("access_token"); 
dynamic result = fb.Get("me", new [] { fields = "id" }); 
var userId = result.id; 

我得到的訪問令牌,我認爲是應用程序的令牌,而不是用戶令牌

dynamic result = fb.Get("oauth/access_token", new 
     { 
      client_id = this.ApplicationId, 
      client_secret = this.AppSecret, 
      grant_type = "client_credentials" 
     }); 

fb.AccessToken = result.access_token; 

所以我現在不知道如何張貼到我的個人資料

我能夠實現上述使用Twitter的地方,我可以使用祕密,令牌,身份證等......他們提供,我可以成功地從桌面應用程序發佈到我的Twitter帳戶,而無需登錄到我的Twitter帳戶。

另一位用戶也覺得這是很容易的發佈沒有任何實際問題到Twitter。 (facebook c# sdk getting started

他似乎也有成功,我沒有使用相同的代碼 - 此代碼在2012年6月使用,因此可能會有突破自 然後發佈的變化。
我得到的消息:(OAuthException - #2500)當我使用sdk時,必須使用活動的訪問令牌來查詢有關當前用戶的信息。 當我試圖用一個web請求,以獲得訪問令牌,然後傳遞令牌的SDK對象來創建facebookclient我得到這個消息 (OAuthException - #190)無效的OAuth訪問令牌簽名。

WebRequest request = WebRequest.Create("https://graph.facebook.com/oauth/access_token?  grant_type=client_credentials&client_id=999999999999999&client_secret=edefefr8e09r8e08r080r8er0e"); 

     request.Method = "POST"; 

     // Set the ContentType property of the WebRequest. 
     request.ContentType = "application/x-www-form-urlencoded"; 

     // Get the request stream. 
     Stream dataStream = request.GetRequestStream(); 

     // Close the Stream object. 
     dataStream.Close(); 

     // Get the response. 
     WebResponse response = request.GetResponse(); 
     dataStream = response.GetResponseStream(); 

     // Open the stream using a StreamReader for easy access. 
     StreamReader reader = new StreamReader(dataStream); 

     // Read the content. 
     string accesstoken = reader.ReadToEnd(); 
     MessageBox.Show("accesstoken") 

     // Clean up the streams. 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

     var fb = new FacebookClient(accesstoken); 
     dynamic parameters = new ExpandoObject(); 
     parameters.message = "test"; 
     dynamic result = fb.Post("me/feed", parameters); 
     var id = result.id; 

很明顯,在上面的代碼中,我將id和祕密改爲虛擬值。

所以基本上鄉親......上面的鏈接和上面的代碼只是什麼,我試圖日期的最後幾天......我基本上跑出來的選項捏住了的,我在這裏可能失去了一些東西輕易地避免我的注意..或者也許不是:)我不知道。

如果任何人甚至會有一個簡單的Windows窗體,或使用c#sdk或使用restsharp的wpf窗口應用程序示例,或者只是使用帶有'POST'方法的WebRequest對象,那麼我將永遠是偉大的。

只是再次重複,這是一個桌面應用程序,而不是ASP.net。

非常感謝您的關注和時間。

enter image description here

enter image description here

enter image description here

enter image description here

回答

3

從我可以看到你提供了不正確的訪問令牌。由於您沒有提供關於獲取訪問令牌的代碼,我建議您看看這個link,它解釋瞭如何構建Facebook應用程序,包括通過WebBrowser控件獲取訪問令牌。

編輯:您正在提供應用程序訪問令牌,但正在嘗試以用戶身份發佈。對於此操作,您需要一個用戶訪問令牌,您可以按照上述鏈接中的步驟獲取該令牌。

+0

您好Jurgen - 非常感謝您花時間先發布答案。我只是在代碼中嘗試了示例應用程序,它完美運行。我想知道,有沒有辦法繞過手動登錄?並以另一種方式獲得用戶訪問令牌?這樣我就可以構建一個自定義窗口,用戶可以在其中輸入文本並直接發佈到Facebook,而無需首先進行手動登錄?這是可能的twitter,但我只是不知道,如果它是可能的Facebook ...謝謝:) – Kev 2013-05-08 15:46:54

+0

不幸的是,獲取訪問令牌需要用戶通過Facebook對話框至少登錄一次。但是,如果您閱讀了一些有關訪問令牌的信息,則會了解到一旦您獲得正常的訪問令牌(2小時到期),就可以請求具有60天過期的擴展訪問令牌。在令牌過期之前,您需要重新獲取它。獲取/重新獲取訪問令牌不需要用戶採取任何行動,只要不滿足其中一個到期條件即可。更多信息:https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/ – 2013-05-08 17:03:46

+0

我建議每次用戶登錄時要求更新令牌爲了得到更新的令牌,你需要遵循相同的過程,就像你申請擴展令牌一樣。這是我如何做到的:'string longtoken = HttpUtility.ParseQueryString(HttpUtil.GetHtmlPage(「https://graph.facebook.com/oauth/access_token?client_id=」+ APP_ID +「&client_secret =」+ APP_SECRET +「&grant_type = fb_exchange_token&fb_exchange_token =「+ SHORT_TOKEN))[」access_token「];(用你自己的常量代替)。如果用戶未登錄超過兩個月,則必須確保他被要求再次登錄Facebook。 – 2013-05-08 17:08:43