2013-05-08 38 views
7

im chỉ đi sâu vào và cung cấp cho bạn một chút thông tin về những gì tôi đang cố gắng làm, những gì tôi đã thử và các chướng ngại vật theo cách của tôi. vì vậy ở đây đi ..Tích hợp Facebook với ứng dụng C# trên máy tính để bàn

MỤC TIÊU CỦA TÔI
Để đăng lên hồ sơ facebook hoặc tường từ ứng dụng dành cho máy tính để bàn.
Ứng dụng dành cho máy tính để bàn sẽ được sử dụng bởi những người dùng cá nhân có tài khoản facebook của riêng họ.
Mục đích là tạo mỗi người dùng ứng dụng facebook của riêng họ và nhận được id ứng dụng và bí mật ứng dụng.
Và sau đó sử dụng id ứng dụng và bí mật ứng dụng trong ứng dụng dành cho máy tính để bàn (Lưu ở đâu đó trong cơ sở dữ liệu hoặc cấu hình) để cho phép người dùng ứng dụng máy tính để bàn đăng lên tiểu sử của họ mà không phải nhập địa chỉ email và mật khẩu của họ để đăng nhập đầu tiên

Vì vậy, tóm lại, 1 ứng dụng facebook trên mỗi tài khoản facebook.
Các cài đặt ứng dụng sẽ được lưu trong mỗi người sử dụng máy tính để bàn ứng dụng Đăng lên facebook của mình thông qua ứng dụng facebook riêng của họ mà không cần đăng nhập

Sự nhấn mạnh chính ở đây là người dùng không cần phải đăng nhập bằng tay thông qua một cửa sổ hoặc trình duyệt.

Tôi đã tạo ứng dụng facebook và đặt trạng thái trực tiếp .. tôi cũng đã thêm tất cả các quyền và quyền mở rộng trong cài đặt (Trong vòng facebook) chỉ để đảm bảo rằng tôi không thiếu gì cả. Vì vậy, tôi có AppID và ứng dụng bí mật của mình .. Tôi cũng có Mã thông báo khách hàng mà nó nói để sử dụng thay cho bí mật ứng dụng cho 'phương thức xác thực'. Tôi sử dụng thẻ này để nhận mã thông báo truy cập của mình. Tôi đã thử các bí mật ứng dụng và nó không trở access token

MY ATTEMPTS:

C# FACEBOOK SDK Vì vậy, tôi bắt đầu với và tôi vẫn cố gắng sử dụng C# sdk
tôi có thể truy xuất mã thông báo truy cập của tôi nhưng không thể đăng.

Tôi gặp lỗi dưới đây mọi lúc với bất kỳ thứ gì tôi thử ... đây chỉ là 2 trong số nhiều ví dụ về mã tôi đã thử.
(OAuthException - # 2500) Mã thông báo truy cập hoạt động phải được sử dụng để truy vấn thông tin về người dùng hiện tại.

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

(OAuthException - # 190) Các dấu hiệu khách hàng không có thể được sử dụng cho các API này

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

tôi đọc trích sau đây từ các liên kết dưới đây trong đó nêu thẻ truy cập của tôi là một ứng dụng mã thông báo và tôi cần mã thông báo truy cập cho người dùng hoặc trang? Need Help on OAuthException Code 2500 Lỗi 2500 có nghĩa là bạn không có mã thông báo truy cập hoặc mã thông báo truy cập ứng dụng nhưng đang cố gắng truy cập/me/- 'me' là trình giữ chỗ cho 'người dùng hiện tại hoặc ID trang' sẽ không hợp lệ nếu không có mã thông báo truy cập một người dùng hoặc trang

Vì vậy, tôi đã cố gắng để có được những userID lại bằng cách sử dụng trả lời sau (Facebook C# SDK Get Current User)

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

tôi nhận được thẻ truy cập mà tôi giả định là ứng dụng thẻ và không phải là người sử dụng thẻ

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; 

Vì vậy, tôi không có ý tưởng tại thời điểm này trong thời gian làm thế nào để đăng lên hồ sơ của tôi

Tôi có thể đạt được trên bằng cách sử dụng twitter, nơi tôi có thể sử dụng bí mật, mã thông báo, id vv ... họ cung cấp và tôi có thể đăng thành công vào tài khoản twitter của tôi từ một ứng dụng máy tính để bàn KHÔNG đăng nhập vào tài khoản twitter của tôi.

Một người dùng khác cũng tìm thấy nó khá dễ dàng để đăng lên twitter mà không có bất kỳ vấn đề thực sự nào. (facebook c# sdk getting started)

Ông cũng có vẻ đã thành công mà tôi không sử dụng cùng một mã - mã này đã được sử dụng vào tháng 6 năm 2012 do đó có thể đã vi phạm các thay đổi được phát hành kể từ sau đó.
Tôi nhận được thông báo: (OAuthException - # 2500) Mã thông báo truy cập hoạt động phải được sử dụng để truy vấn thông tin về người dùng hiện tại ... khi tôi sử dụng sdk. Khi tôi cố gắng lấy mã thông báo truy cập bằng cách sử dụng yêu cầu web và sau đó chuyển mã thông báo đó cho đối tượng sdk để tạo facebookclient, tôi nhận được thông báo này (OAuthException - # 190) Chữ ký mã thông báo truy cập OAuth không hợp lệ.

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; 

Rõ ràng trong đoạn mã trên tôi đã thay đổi id và bí mật thành giá trị giả.

Vì vậy, về cơ bản, ... các liên kết ở trên và mã trên chỉ là một phần nhỏ của những gì tôi đã cố gắng cập nhật trong vài ngày qua ... về cơ bản tôi đã hết các tùy chọn và thiếu thứ gì đó ở đây hãy tránh sự chú ý của tôi một cách dễ dàng .. hoặc có thể không :) tôi không biết.

Nếu bất kỳ ai thậm chí có biểu mẫu cửa sổ đơn giản hoặc ví dụ về ứng dụng cửa sổ wpf sử dụng C# sdk hoặc sử dụng restsharp hoặc chỉ sử dụng đối tượng WebRequest với phương thức 'POST' thì tôi sẽ mãi mãi tuyệt vời.

Chỉ cần lặp lại lần nữa là ứng dụng dành cho máy tính để bàn chứ không phải ASP.net.

Rất cám ơn mọi người đã quan tâm và dành thời gian cho bạn.

enter image description here

enter image description here

enter image description here

enter image description here

Trả lời

3

Từ những gì tôi có thể thấy bạn đang cung cấp một thẻ truy cập không chính xác. Vì bạn chưa cung cấp mã liên quan đến việc lấy mã thông báo truy cập, tôi có thể đề nghị bạn xem link giải thích cách xây dựng một ứng dụng Facebook, bao gồm lấy mã thông báo truy cập thông qua điều khiển WebBrowser.

EDIT: Bạn đang cung cấp mã thông báo truy cập ứng dụng nhưng đang cố gắng đăng với tư cách người dùng. Đối với hoạt động này, bạn cần mã thông báo truy cập người dùng mà bạn có thể có được bằng cách làm theo các bước trong liên kết ở trên.

+0

Xin chào Jurgen - cảm ơn rất nhiều vì đã dành thời gian trước tiên để đăng câu trả lời. Tôi vừa thử ứng dụng mẫu trong mã của bạn và nó hoạt động hoàn hảo. Tôi tự hỏi, có cách nào để bỏ qua đăng nhập thủ công không? và nhận mã thông báo truy cập của người dùng theo cách khác? để tôi có thể xây dựng cửa sổ tùy chỉnh nơi người dùng có thể nhập văn bản của họ và đăng trực tiếp lên facebook mà không cần đăng nhập thủ công trước? Điều này là có thể với twitter nhưng im chỉ không clued lên như để nếu nó có thể với facebook ... cảm ơn :) – Kev

+0

Thật không may có được một mã thông báo truy cập yêu cầu người dùng đăng nhập thông qua hộp thoại facebook ít nhất một lần. Tuy nhiên, nếu bạn đọc một chút về mã thông báo truy cập, bạn sẽ biết rằng khi bạn nhận được mã thông báo truy cập bình thường (hết hạn 2 giờ), bạn có thể yêu cầu mã thông báo truy cập mở rộng có thời hạn sử dụng là 60 ngày. Trước khi mã thông báo hết hạn, bạn cần phải lấy lại mã thông báo đó. Thu thập/lấy lại mã thông báo truy cập không yêu cầu bất kỳ hành động nào của người dùng, miễn là không đáp ứng được một trong các điều kiện hết hạn. Thông tin thêm: https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/ –

+0

Tôi khuyên bạn nên yêu cầu mã thông báo được cập nhật hàng ngày cho mỗi lần nhật ký người dùng Để nhận mã thông báo được cập nhật, bạn thực hiện theo cùng một quy trình như thể bạn đang yêu cầu mã thông báo mở rộng. Đây là cách tôi làm điều đó: '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 "];' (thay thế các hằng số bằng chính bạn). Nếu người dùng không đăng nhập trong hơn hai tháng, bạn phải chắc chắn rằng anh ta được yêu cầu đăng nhập lại vào Facebook. –

Các vấn đề liên quan