6

페이스 북의 페이지를 만들었습니다. 애플리케이션 비밀번호가없고 액세스 토큰이 없습니다.페이스 북 페이지 벽에 게시하는 방법.

. NET 데스크탑 응용 프로그램에서이 페이지를 게시하고 싶습니다. 어떻게해야합니까? 누구든지 제발 도와 드릴까요, 내가 어디서 토큰을 얻을 수 있습니까?

새로운 Facebook 응용 프로그램을 만들어야합니까? 그렇다면이 응용 프로그램에 페이지의 벽에 게시 할 권한을 어떻게 부여합니까?

UPD1 : 나는 웹 사이트가 없습니다. .NET 데스크톱 응용 프로그램의 회사 뉴스를 회사의 Facebook 페이지에 게시해야합니다. 내가 가진 것은 Facebook 페이지 계정의 로그인/비밀번호입니다.

UPD2 : 나는 Facebook 응용 프로그램을 만들었습니다. AppID/SecretKey 사용. 액세스 토큰을 얻을 수 있습니다. 하지만 ... 페이지의 벽에 게시 할 권한을 어떻게 부여 할 수 있습니까?

(OAuthException) (#200) The user hasn't authorized the application to perform this action

+0

시도해 봤어? *** Facebook SDK ***? – Kiquenet

답변

0

당신은 페이스 북의 응용 프로그램을 만들거나 https://developers.facebook.com/?ref=pf에 페이스 북에 귀하의 웹 사이트를 링크하는 방법에 대한 정보를 얻을 것이다.

http://facebooksdk.codeplex.com/에서 facebook SDK를 다운로드 할 수 있습니다. 사이트의 문서 섹션에 몇 가지 좋은 예가 나와 있습니다.

+0

자, 새로운 Facebook 응용 프로그램을 만들었습니다. 이 앱에 권한을 부여하려면 어떻게해야합니까? – Lari13

+0

이 부분을 확인하십시오 https://developers.facebook.com/docs/reference/rest/comments.add/ Facebook에 REST API가 추가되어 의견을 보내고 있습니다.이 정보가 귀하의 시나리오에서 유용하게 사용되기를 바랍니다. –

+0

죄송합니다, 무슨 의견 이세요? 나는 그것을 필요로하지 않는다. 데스크톱 앱에서 페이지의 벽에 메시지 (그림 및 설명 포함)를 게시하고 싶습니다. – Lari13

-1

아마도 가장 쉬운 방법은 Facebook PowerShell 모듈 http://facebookpsmodule.codeplex.com을 사용하는 것입니다. 이를 통해 FacebookSDK와 같은 종류의 작업을 수행 할 수 있지만 개발자 지향 인터페이스가 아닌 IT-Admin 스크립팅 인터페이스를 통해 수행 할 수 있습니다.

AFAIK 페이스 북 그래프 API를 사용하여 다른 페이지 (예 : @Microsoft)에 대한 참조를 게시 할 수 없게되는 페이스 북 그래프 API에는 여전히 제한이 있습니다. 이것은 FacebookSDK, FacebookPSModule 및 Facebook Graph API를 통해 만들어진 다른 모든 것에 적용됩니다.

1

"publish_stream"권한을 부여해야합니다.

+0

"publish_stream"권한을 설정하는 방법은 무엇입니까? – Kiquenet

2

사용자에게 publish_stream 권한을 요청해야합니다. 이렇게하려면 Facebook에 보내는 oAuth 요청의 범위에 publish_stream을 추가해야합니다. 이 모든 작업을 수행하는 가장 쉬운 방법은 codebook에서 얻을 수있는 .net 용 facebooksdk를 사용하는 것입니다. 데스크톱 앱으로이를 수행하는 방법에 대한 몇 가지 예가 있습니다.

권한을 요청하고 사용자가 권한을 부여하면 페이지 벽에 게시 할 수있는 액세스 토큰을 받게됩니다. 이 권한을 저장해야하는 경우 만료되지 않는 액세스 토큰을 가지려면 범위에서 offline_access 권한을 요청해야 할 수도 있지만 액세스 토큰을 저장할 수 있습니다. 내가이 위치에서이 작업을 수행하는 방법을 보여주는 비디오 자습서를 만들었습니다

4

: 당신은 내 예제에서, 나는 "manage_pages"을 "publish_stream"모두를 요구하고 있어요 것을 알 수

http://www.markhagan.me/Samples/Grant-Access-And-Post-As-Facebook-User-ASPNet

. 이렇게하면 사용자가 관리자 인 페이지에도 게시 할 수 있습니다.여기에 전체 코드는 다음과 같습니다 당신은 사용자가 로그인을 얻기 위해 https://www.nuget.org/packages/Microsoft.Owin.Security.Facebook/을 사용 허가 및 https://www.nuget.org/packages/Facebook.Client/ 피드에 게시 할 수

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using Facebook; 

namespace FBO 
{ 
    public partial class facebooksync : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      CheckAuthorization(); 
     } 

     private void CheckAuthorization() 
     { 
      string app_id = "374961455917802"; 
      string app_secret = "9153b340ee604f7917fd57c7ab08b3fa"; 
      string scope = "publish_stream,manage_pages"; 

      if (Request["code"] == null) 
      { 
       Response.Redirect(string.Format(
        "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}", 
        app_id, Request.Url.AbsoluteUri, scope)); 
      } 
      else 
      { 
       Dictionary<string, string> tokens = new Dictionary<string, string>(); 

       string url = string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}", 
        app_id, Request.Url.AbsoluteUri, scope, Request["code"].ToString(), app_secret); 

       HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 

       using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
       { 
        StreamReader reader = new StreamReader(response.GetResponseStream()); 

        string vals = reader.ReadToEnd(); 

        foreach (string token in vals.Split('&')) 
        { 
         //meh.aspx?token1=steve&token2=jake&... 
         tokens.Add(token.Substring(0, token.IndexOf("=")), 
          token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1)); 
        } 
       } 

       string access_token = tokens["access_token"]; 

       var client = new FacebookClient(access_token); 

       client.Post("/me/feed", new { message = "markhagan.me video tutorial" }); 
      } 
     } 
    } 
} 
+0

이 요청은 어디에 있습니까? – MonsterMMORPG

+0

위 예제에서 올바른 App_secret을 정말로 작성하고 있습니까? 이 정보는 일급 비밀이어야합니다. –

+0

사용자 선택에 따라 데이터를 게시하는 방법은 무엇입니까? 이 예제에서와 같이 메시지 변수에 정적 문자열을 게시하는 경우 CheckAuthorization() 메서드에서 해당 문자열을 가져온 경우 코드의 첫 번째 리디렉션 이후에이 문자열에 어떻게 액세스하겠습니까? –

0
public void PostImageOnPage() 
{ 
string filename=string.Empty; 
if(ModelState.IsValid) 
{ 
//-------- save image in image/ 
if (System.Web.HttpContext.Current.Request.Files.Count > 0) 
{ 
var file = System.Web.HttpContext.Current.Request.Files[0]; 
// fetching image      
filename = Path.GetFileName(file.FileName); 
filename = DateTime.Now.ToString("yyyyMMdd") + "_" + filename; 
file.SaveAs(Server.MapPath("~/images/Advertisement/") + filename); 
} 
} 
string Picture_Path = Server.MapPath("~/Images/" + "image3.jpg"); 
string message = "my message"; 
try 
{ 
string PageAccessToken = "EAACEdEose0cBAAoWM3X"; 

// ————————create the FacebookClient object 
FacebookClient facebookClient = new FacebookClient(PageAccessToken); 

// ————————set the parameters 
dynamic parameters = new ExpandoObject(); 
parameters.message = message; 
parameters.Subject = ""; 
parameters.source = new FacebookMediaObject 
{ 
ContentType = "image/jpeg", 
FileName = Path.GetFileName(Picture_Path) 
}.SetValue(System.IO.File.ReadAllBytes(Picture_Path)); 
// facebookClient.Post("/" + PageID + "/photos", parameters);// working for notification on user page 
facebookClient.Post("me/photos", parameters);// woring using bingoapp access token not page in(image album) Post the image/picture to User wall 
} 
catch (Exception ex) 
{ 

} 
} 
1

. 예를 들어 아래

는 ASP.NET MVC에 대한 5 : 다음은 사용자의 피드 또는 페이지

에 게시하는 데 사용할 수있는

public ActionResult callback() 
{ 
    // Here we skip all the error handling and null checking 
    var auth = HttpContext.GetOwinContext().Authentication; 
    var loginInfo = auth.GetExternalLoginInfo(); 
    var identityInfo = auth.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie); 

    var email = loginInfo.Email // [email protected] 
    var name = loginInfo.ExternalIdentity.Name // Klaatu Verata Necto 
    var provider = loginInfo.Login.LoginProvider // Facebook | Google 

    var fb_access_token = loginInfo.identityInfo.FindFirstValue("FacebookAccessToken"); 
    // Save this token to database, for the purpose of this example we will save it to Session. 
    Session['fb_access_token'] = fb_access_token; 
    // ...     
} 

: 콜백에

public void ConfigureAuth(IAppBuilder app) 
     { 
      app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

      // Facebook 
      var facebookOptions = new FacebookAuthenticationOptions 
      { 
       AppId = "{get_it_from_dev_console}", 
       AppSecret = "{get_it_from_dev_console}", 
       BackchannelHttpHandler = new FacebookBackChannelHandler(), 
       UserInformationEndpoint = "https://graph.facebook.com/v2.4/me?fields=id,name,email,first_name,last_name,location", 
       Provider = new FacebookAuthenticationProvider 
       { 
        OnAuthenticated = context => 
        { 
         context.Identity.AddClaim(new Claim("FacebookAccessToken", context.AccessToken)); // user acces token needed for posting on the wall 
         return Task.FromResult(true); 
        } 
       } 
      }; 
      facebookOptions.Scope.Add("email"); 
      facebookOptions.Scope.Add("publish_actions"); // permission needed for posting on the wall 
      facebookOptions.Scope.Add("publish_pages"); // permission needed for posting on the page 
      app.UseFacebookAuthentication(facebookOptions); 

      AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier; 
     } 
    } 

당신이 사용자 액세스 토큰을 얻을
public class postcontroller : basecontroller 
{      
     public ActionResult wall() 
     { 
      var client = new FacebookClient(Session['fb_access_token'] as string); 
      var args = new Dictionary<string, object>(); 
      args["message"] = "Klaatu Verata N......(caugh, caugh)"; 

      try 
      { 
       client.Post("/me/feed", args); // post to users wall (feed) 
       client.Post("/{page-id}/feed", args); // post to page feed 
      } 
      catch (Exception ex) 
      { 
       // Log if anything goes wrong 
      } 

     } 
} 

전체 예제를 여기 게시했습니다 : https://klaatuveratanecto.com/facebook-wall-feed-posting-asp-net-mvc/