我的Facebook应用程序如何将消息发布到墙上?
我已经找到了如何使用图表api代表facebook用户向墙上发布内容。但是现在我想以我的应用程序的名义发布一些内容。我的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."
}
有没有人看到我在哪里出错?我真的坚持这一点。
谢谢!
您需要获取应用程序的身份验证令牌以作为该应用程序发布。
Auth_Token定义您发布的安全上下文。
您需要为当前用户请求以下Graph API URL以查找您的应用程序的访问令牌。
https://graph.facebook.com/me/accounts?access_token=XXXXXXXX
这应该给你类似以下的输出:
{
"data": [
{
"name": "My App",
"category": "Application",
"id": "10258853",
"access_token": "xxxxxxxxxxxxxxxx"
}
]
}
确保您有manage_pages权限调用该API之前,或您将无法获得访问令牌回来。
一旦你有了访问令牌,你就可以像任何其他用户那样发布到墙上。请注意,URL中使用的ID与应用程序的ID相匹配。这将作为应用程序发布到应用程序的墙上。
https://graph.facebook.com/10258853/feed?access_token=XXXXXXX
确保您在发布到墙上之前也拥有publish_stream权限。
https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=[AppID]&client_secret=[AppSecret] 这是我用来获取令牌的。这不是验证令牌吗? – ThdK 2011-04-16 15:13:18
这将直接为用户提供访问令牌。你需要一个应用程序本身。我更新了上面的答案,以便更详细。 – 2011-04-16 15:18:02
好的这个作品完美的写一些东西到应用程序墙。但是如果我想使用我的粉丝页面,它不起作用。我也想在页面本身的行为页面上写一些东西。我试着用你以前的答案得到的access_tokens。 – ThdK 2011-04-18 10:27:37
最近我和FB api一起工作过。
我已经完成了JavaScript中的每一件事。
以下是我用来发布到用户墙上的内容。
我希望这可以帮助你。
<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>
$("#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.'; }); };
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);
}
}
您使用什么语言? – Shaz 2011-04-16 14:56:05
http://stackoverflow.com/questions/4641680/android-facebook-graph-api-to-update-status 这也会帮助你。谢谢 – SALMAN 2011-11-22 16:20:23