I have spent quite much time trying to implement Facebook share with no success. I have tried various implementations and read quite a few Q&As related to similar problems I had occurred.
I have as much as simple Facebook Example does. What I want is to set description or at least message of the feed dialog. This is what I have added to example's code:
Bundle parameters = new Bundle();
parameters.putString("caption", "1000vaikai Caption...");
parameters.putString("description", "This is a description"); // the message to post to the wall
parameters.putString("user_message_prompt", "This is message prompt");
parameters.putString("user_message", "MEEEESAGE");
mFacebook.dialog(Example.this, "feed", parameters,
new SampleDialogListener());
But it has no effect. There is nothing preset, just a plain feed dialog. Here it says dialog methods has key-value parameters but I can't find a list of them. As you can see, I tried using parameters from the feed URL but it doesn't work.
Anyone got it working properly?
EDIT
I hacked Facebook SDK and it seems to generate proper URL (https://m.facebook.com/dialog/feed + my parameters + ones taken from Facebook SDK itself). That means it DOES use same parameters as the ones listed in documentation about feed dialog page. But it still doesn't work. These parameters are being set:
user_message
redirect_uri
description
app_id
display
caption
access_token
user_message_prompt
Only app_id (I can see my app name), access_token (share actually works) and redirect_uri (it redirects back to mobile app) seem to have the effect
So I have figured out that you must provide either a link or picture. If not - it simply ignores all the over parameters.
Related
I am using facebook sdk 3.6 for android. I am trying to share link to users fb wall through my app.
I have used
Bundle postParam = new Bundle();
postParam.putString("link","http://mylink.com/image/09324 324.jpg"
postParam.putString("caption","my caption");
… … …
Request request = new Request(session, "me/feed", postParam, HttpMethod.POST, reqCallback);
RequestAsyncTask reqTask = new RequestAsyncTask(request);
reqTask.execute();
The link contains space character.
I can visit that link from browser simply by replacing the space character by %20. But when i do the same using link.replaceAll(" ","%20");, i get Facebook api exception,
ErrorMessage = This link could not be posted.
ErrorCode = 1500
ErrorType= FacebookApiException
I supposed this as url encoding problem, but it is neither get solved using URLEncoder nor by replacing space by %20 by replaceAll method of String object.
There are no any non-printable characters in the string.
Note: The same link when copied from log cat output and added back to that bundle works fine.
Update: When i retried to post the same link (not log cat copied) from program, it get successfully posted.
What is the problem and how could it be solved?
Sometimes Facebook will block a link or domain from their blacklist. One way to test this is if you try to post directly onto Facebook with the same link.
Link below might be of help, they suggest you use https://safeweb.norton.com to if the link is safe or not and therefore blacklisted.
https://www.facebook.com/help/community/question/?id=541062392623556
hmmm maybe using
link.replaceAll("\\s","");
\s = Anything that is a space character (including space, tab characters etc)
as you can see here:
Answer
Hope it helps :)
Actually i have used facebook shareDialog and present user with the status dialog box where app can populate the link, picture,descriptionandmessage`(message is only populated on webview i.e. in device with no fb application installed) property and the user can edit/fill in the status and post on his on timeline.
This is more nicer way to post on somebody's wall because the user can see what he is posting.
Sorry to answer my own question so lately, though i have solved it already.
How can i post message along with Picture using Facebook SDK 3.0 on Android,
The link -> can post small pic with link and all other information.
http://developers.facebook.com/docs/howtos/androidsdk/3.0/feed-dialog/
What i want, is only to post Pic on wall with message, not a link with description ?
I want grab screen shot of my current Android screen that i did and saved it into SD card, i need to post it with message on custom button click.
How can i do this with Facebook SDK 3.0 for android ?
You can use the Graph API to post photos to a user's wall.
See the reference page for more details.
In the Facebook SDK, you would use the Request class to make Graph API calls.
You can use the newUploadPhotoRequest method to add a photo.
If you want to add a description as well, try setting the "message" parameter:
Request photoRequest = Request.newUploadPhotoRequest(...);
Bundle params = photoRequest.getParameters();
params.putString("message", "description goes here");
photoRequest.executeAsync();
Facebook changed this implementation for there version 2 Graph API requests, they recommend a Custom Story instead of posting (if you have your own content to put on the wall of the facebook user beside his comment, or even without his comment)
documentation goes here :
https://developers.facebook.com/docs/android/open-graph?locale=en_GB
just an error in the documentation, the facebook Open Graph objects are refered to by a colon, and not a dot, for example
they mention an open graph Object named "book" in a work space named "books" that way
"books.book"
the correct way is
"books:book"
and after you finish implementation you will need to review your application to facebook, which it's documentation goes here as well
https://developers.facebook.com/docs/apps/review?locale=en_GB
i really hate facebook documentation, it sucks
I want to upload a foto from my android app to a facebook fan page using the facebook API.
When i look in the hackbook android example app (link). the code looks as following to a upload photo:
Bundle params = new params.putString("url",
"http://www.facebook.com/images/devsite/iphone_connect_btn.jpg"); params.putString("caption",
"FbAPIs Sample App photo upload");
Utility.mAsyncRunner.request("me/photos", params,
"POST", new PhotoUploadListener(), null);
This code works, it posts the photo on my own facebook page. But i don't want the photo to be posted on my page but on a fan page.
As explained in the facebook documentation 'me' could be changed with a facebook User_ID. I tried changing the "me/photo" in "[fanpagename]/photo" or "[fanpageID]/photo", but that did not work. when i used the username i got an error, when i used the ID it post the photo on my own page. In the graphAPI photo documentation (link) no example or explanation is givin on how to upload a foto on fan page.
also the
params.putString("to", [fbid]);
does not work.
Any suggestions?
I have been busy with this research for three full days and did not find the answer for my problem. But i think i have an explanation for it.
if a user posts a photo to friend/fan_page with the official android FB app it uses a "feed" with a picture(url-link). The user can't see on his own wall that he actually shared or posted a picture on the friend/fan_page. (for example: "Bob - posted a photo on CocaCola")
This is probably the reason why the function is disabled because developers could use this to send photo's to all kinds of friends/fan_pages without the user being aware of it.
I came to this hypotheses because i found a sort of work around. First upload the photo to users own album. get the URL of that photo and then post a "feed" on the friend/fan_page with a picture(url-lnk). Facebook then gave this error: "FBCDN image is not allowed in stream" in other words, you can't use photos that are on FB website domain to link to. So I think there is quite a bug/lazyness in the facebook developement departmet :P which is a pity because it is a nice socialnetworking function for mobile apps.
You are on the right track, but to publish photos to a Page you will need the publish_stream and manage_pages permissions, and the Page Access Token to prove you have them. You can read more about this here:
http://developers.facebook.com/docs/reference/api/page/#photos
http://developers.facebook.com/docs/reference/api/page/#page_access_tokens
Some example code (using the PHP SDK, but the logic should be the same in any language) is here: https://stackoverflow.com/a/7222078/164439
Update:
If you want to post to the Page's Wall/Feed (without being a Page Admin), you can do that without the Manage Pages permission and the Access Token stuff.
But it's different than publishing a Photo object to the Page's Photos collection, which is what I thought you asked. You actually want to do a regular Post to the Page, with a Picture attachment.
Here are some resources to do this:
Facebook Post API: http://developers.facebook.com/docs/reference/api/post/
http://facebook.stackoverflow.com/questions/691425/how-do-you-post-to-the-wall-on-a-facebook-page-not-profile
http://facebook.stackoverflow.com/questions/5756474/post-to-facebook-page-wall
Using Facebook Graph to simply post a wall message with just javascript
Good luck!
I have a lot of apps published using the FB android sdk
github.com/facebook/facebook-android-sdk
All my applications that use FB stopped working since few days.
This is necessarily a change or a bug from FB side, because nothing has changed in my applications, It worked for months.
The dialog that opens to post a message ("stream.publish") seems not use the param "message", the form opens but the text box is empty!
Bundle parameters = new Bundle();
parameters.putString("message", "test message");
mFacebook.dialog(Example.this, "stream.publish", parameters,new SampleDialogListener());
Using debug I saw the URL with the "message" param:
https://m.facebook.com/dialog/stream.publish?message=test+message&app_id=....
The text input in the webview is emtpy!
Somebody have an idea or a workaround to fix this issue?
Try "feed" instead of "stream.publish"
Had the same problem for the last few days. Looks like Facebook is deprecating the Stream API: http://developers.facebook.com/docs/reference/rest/stream.publish/, not sure if this has anything to do with that.
Anyway, switching to using the Graph API's 'feed' method worked for me.
I am trying to let users "like" a Facebook fan page from within an Android app. I am able to successfully "like" objects such as wall comments using code like this,
mFacebook = new Facebook(APP_ID);
SessionStore.restore(mFacebook, this);
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
Bundle parameters = new Bundle();
mAsyncRunner.request(COMMENT_ID + "/likes", parameters, "POST", new MyRequestListener(), "");
However, if I put in a page id rather than a comment id, I get this error message in the Facebook response,
Response: {"error":{"type":"OAuthException","message":"(#200) App does not have permission to make this call"}}
I am obtaining both the "publish_stream" and "offline_access" publishing permissions at login, and they are given to the Facebook object with SessionStore.restore().
1) Does Facebook let apps "like" fan pages?
2) If so, any ideas on what I am doing wrong?
Thanks,
Matt
The Facebook documentation for Pages has been updated and is current (see https://developers.facebook.com/docs/reference/api/page/). You cannot like a Page via the Graph API, even though you can read the like count information.
As other answers say, it is not possible to 'like' pages via the Graph API.
The confusion in this topic comes from the API documentation, where is says You can comment on or like any object that has a /comments or /likes connection (The key term here is connection)
Going a little deeper:
Any object (in this case a Page), has a number of Fields and Connections. Fields are basically used to access the object information and Connections are used to perform operations in that object.
In sum, a Page doesn't have a /likes Connection, but it has a /likes Field, reason why we can get the number of likes of a given page, but we cannot like a page.
Unfortunately, as far as I know so far, you can't like Pages via the API. You can render a Like button via a web view, but I think you're out of luck here at least. You can (as you note) like comments and posts, but pages still require direct user interaction.