2011-04-16 14 views
3

Facebookのユーザーの代わりにグラフapiを使って壁に何かを投稿する方法をすでに知っていました。しかし、今私は自分のアプリケーションの名前で何かを投稿したい。Facebookにメッセージを投稿するにはどうしたらいいですか?

ここで私はこれをやろうとしている方法です:

protected void btn_submit_Click(object sender, EventArgs e) 
{ 

    Dictionary<string, string> data = new Dictionary<string, string>(); 
    data.Add("message", "Testing"); 
    // i'll add more data later here (picture, link, ...) 
    data.Add("access_token", FbGraphApi.getAppToken()); 
    FbGraphApi.postOnWall(ConfigSettings.getFbPageId(), data); 

} 

FbGraphApi.getAppToken()

// ... 
private static string graphUrl = "https://graph.facebook.com"; 
//... 

public static string getAppToken() { 
    MyWebRequest req = new MyWebRequest(graphUrl + "/" + "oauth/access_token?type=client_cred&client_id=" + ConfigSettings.getAppID() + "&client_secret=" + ConfigSettings.getAppSecret(), "GET"); 
    return req.GetResponse().Split('=')[1]; 
} 

FbGraphApi.postOnWall()

public static void postOnWall(string id, Dictionary<string,string> args) 
    { 
     call(id, "feed", args); 
    } 

FbGraphApi.call( )

private static void call(string id, string method, Dictionary<string,string> args) 
{ 
    string data = ""; 
    foreach (KeyValuePair<string, string> arg in args) 
    { 

     data += arg.Key + "=" + arg.Value + "&"; 

    } 

    MyWebRequest req = new MyWebRequest(graphUrl +"/" + id + "/" + method, "POST", data.Substring(0, data.Length - 1)); 


    req.GetResponse(); // here i get: "The remote server returned an error: (403) Forbidden." 
} 

誰かが私が間違っているのを見ていますか?私は本当にこれに固執しています。

ありがとうございます!

+0

あなたはどのような言語を使用しています。id = "stream_publish" とし、次のjQueryを使って

  • ボタン? – Shaz

  • +0

    http://stackoverflow.com/questions/4641680/android-facebook-graph-api-to-update-status これはあなたも役に立ちます。ありがとう – SALMAN

    答えて

    3

    あなたのアプリケーションがそのアプリケーションとして投稿するための認証トークンを取得する必要があります。

    Auth_Tokenは、あなたが投稿しているセキュリティコンテキストを定義します。

    現在のユーザーに対して、アプリケーションのアクセストークンを検索するために、次のグラフAPI URLを要求する必要があります。そのAPIを呼び出す前に

    { 
        "data": [ 
         { 
         "name": "My App", 
         "category": "Application", 
         "id": "10258853", 
        "access_token": "xxxxxxxxxxxxxxxx" 
         } 
        ] 
    } 
    

    あなたはmanage_pages権限を持っていることを確認してくださいまたはあなたは、トークン背中のアクセスを得ることはありません。

    https://graph.facebook.com/me/accounts?access_token=XXXXXXXX 
    

    これはあなたの次のような出力が得られます。

    アクセストークンを取得したら、他のユーザーと同じように壁に公開します。 URLで使用されるIDは、アプリケーションのIDと一致します。これはアプリケーションとしてアプリケーションの壁にポストします。

    https://graph.facebook.com/10258853/feed?access_token=XXXXXXX 
    

    壁に投稿する前に、publish_stream権限も持っていることを確認してください。

    +0

    https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=[AppID]&client_secret=[AppSecret] これは私がトークンを取得するために使用するものです。これは認証トークンではありませんか? – ThdK

    +1

    これにより、ユーザーのアクセストークンが直接得られます。アプリケーション自体のためのものが必要です。上記の私の答えをより詳細に更新しました。 –

    +0

    これはアプリケーションウォールに何かを書くのに最適です。しかし、私は私のファンページを使用したい場合は動作しません。私はまた、ページ自体の振る舞いについてのファンページに何かを書いています。私はあなたの前の答えを使って得たaccess_tokensで試しました。 – ThdK

    2

    最近私はFB apiで作業しました。
    私はすべてjavascriptで完了しました。
    ここで私はユーザーの壁に投稿していました。
    私はこれがあなたを助けてくれることを願っています。

  • はFBが提供するJavaScriptライブラリを含めると、それにアプリIDを追加します。ログインの

     
    <div id="fb-root"></div> 
         <script> 
    
         window.fbAsyncInit = function() { 
         FB.init({appId: 'your app id', status: true, cookie: true, 
           xfbml: true}); 
         }; 
         (function() { 
         var e = document.createElement('script'); 
         e.type = 'text/javascript'; 
         e.src = document.location.protocol + 
          '//connect.facebook.net/en_US/all.js'; 
         e.async = true; 
         document.getElementById('fb-root').appendChild(e); 
         }()); 
    
         </script> 
    

  • 、私はIDとして "fb_login" とボタンを使用し、次のように私はjQueryのを使用:あなたは追加する必要が
     
    $("#fb_login").click(function(){ 
        FB.login(function(response) { 
         if (response.session) 
         { 
          if (response.perms) 
          { 
               // alert("Logged in and permission granted for posting"); 
          } 
          else 
          { 
            // alert("Logged in but permission not granted for posting"); 
          } 
         } 
         else 
         { 
             //alert("Not Logged In"); 
         } 
    }, {perms:'publish_stream'}); 
    

    注{パーマを 'publish_stream'}上記のように
    を実行すると、ユーザーの壁に投稿する権利が得られます。

     
    $("#stream_publish").click(function(){ 
    
         FB.getLoginStatus(function(response){ 
    
          if(response.session) 
          { 
           publishPost(response.session); 
          } 
    
         }); 
    }); 
    
    function publishPost(session) 
    { 
        var publish = { 
         method: 'stream.publish', 
         message: 'Your Message', 
         picture : 'Image to be displayed', 
         link : 'The link that will be the part of the post, which can point to either your app page or your personal page or any other page', 
         name: 'Name or title of the post', 
         caption: 'Caption of the Post', 
         description: 'It is fun to write Facebook App!', 
         actions : { name : 'Start Learning', link : 'link to the app'} 
        }; 
    
        FB.api('/me/feed', 'POST', publish, function(response) { 
    
         document.getElementById('confirmMsg').innerHTML = 
           'A post had just been published into the stream on your wall.'; 
        }); 
    }; 
    

  • 1
    private class FbWebViewClient extends WebViewClient { 
    
        boolean started=false; 
    
        @Override 
        public boolean shouldOverrideUrlLoading(WebView view, String url) { 
         Log.d("Facebook-WebView", "Redirect URL: " + url); 
         if (url.startsWith(Facebook.REDIRECT_URI)) { 
          Bundle values = Util.parseUrl(url); 
    
          String error = values.getString("error"); 
          if (error == null) { 
           error = values.getString("error_type"); 
          } 
    
          if (error == null) { 
           mListener.onComplete(values); 
          } else if (error.equals("access_denied") 
            || error.equals("OAuthAccessDeniedException")) { 
           mListener.onCancel(); 
          } else { 
           mListener.onFacebookError(new FacebookError(error)); 
          } 
    
          FbDialog.this.dismiss(); 
          return true; 
         } else if (url.startsWith(Facebook.CANCEL_URI)) { 
          mListener.onCancel(); 
          FbDialog.this.dismiss(); 
          return true; 
         } else if (url.contains(DISPLAY_STRING)) { 
          return false; 
         } 
         // launch non-dialog URLs in a full browser 
         getContext().startActivity(
           new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
         return true; 
        } 
    
        @Override 
        public void onReceivedError(WebView view, int errorCode, 
          String description, String failingUrl) { 
         super.onReceivedError(view, errorCode, description, failingUrl); 
         mListener.onError(new DialogError(description, errorCode, 
           failingUrl)); 
         FbDialog.this.dismiss(); 
        } 
    
        public Map<String, String> getUrlParameters(String url) 
          throws UnsupportedEncodingException { 
         Map<String, String> params = new HashMap<String, String>(); 
         String[] urlParts = url.split("\\?"); 
         if (urlParts.length > 1) { 
          String query = urlParts[1]; 
          for (String param : query.split("&")) { 
           String pair[] = param.split("="); 
           String key = URLDecoder.decode(pair[0], "UTF-8"); 
           String value = ""; 
           if (pair.length > 1) { 
            value = URLDecoder.decode(pair[1], "UTF-8"); 
           } 
    
           params.put(key, value); 
    
          } 
         } 
         return params; 
        } 
    
        @Override 
        public void onPageStarted(WebView view, String url, Bitmap favicon) { 
         Log.d("Facebook-WebView", "Webview loading URL: " + url); 
    
         String newUrl="http://www.facebook.com/dialog/feed?_path=feed&app_id="; 
         if (url.contains("touch") && started==false) { 
    
          started=true; 
          ChildTabBibleLessonActivity.fbMaterial=ChildTabBibleLessonActivity.fbMaterial.replace(" ", "+"); 
          url=url+"&picture=http://www.minibiblecollege.org/mbclandingpage/images/icmlogo-small.jpg&description="+ChildTabBibleLessonActivity.fbMaterial; 
         /* Map<String,String> param; 
          try { 
           param = getUrlParameters(url); 
           newUrl=newUrl+param.get("app_id")+"&redirect_uri="+"https://deep-rain-6015.herokuapp.com"+"&display=page&picture=http://www.minibiblecollege.org/mbclandingpage/images/icmlogo-small.jpg"+"&name=MiniBible&description=heregoesMyMessage"; 
    
          } catch (UnsupportedEncodingException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 
          */ 
          view.loadUrl(url); 
          //super.onPageStarted(view, url, favicon); 
         } 
         else 
         { 
         super.onPageStarted(view, url, favicon); 
         } 
         mSpinner.show(); 
        } 
    
        @Override 
        public void onPageFinished(WebView view, String url) { 
         super.onPageFinished(view, url); 
         mSpinner.dismiss(); 
         /* 
         * Once webview is fully loaded, set the mContent background to be 
         * transparent and make visible the 'x' image. 
         */ 
         mContent.setBackgroundColor(Color.TRANSPARENT); 
         mWebView.setVisibility(View.VISIBLE); 
         mCrossImage.setVisibility(View.VISIBLE); 
        } 
    } 
    
    +0

    FBDialog.Class.Facebook Connect Graph ApiにあるこのFBViewClientクラスをレンダリングします。どうもありがとうございます。 – SALMAN

    +1

    質問に答える方法の詳細については、[faq]をお読みください。皆様のご支援をお待ちしておりますが、ユーザーにうまく作成された回答を追加することをお勧めします。 – Will

    関連する問題