Post image from android to facebook page

2019-08-18 03:06发布

问题:

I have successfully post a feed in facebook page form the graph api.

     try {
                   resObj.put("message","feed from android");
//resObj.put("object_attachment",bitmap);

                } catch (JSONException e) {
                    e.printStackTrace();
                }

                GraphRequest request = GraphRequest.newPostRequest(
                        AccessToken.getCurrentAccessToken(),"363453267193844/photos",resObj,
                        new GraphRequest.Callback() {
                            @Override
                            public void onCompleted(GraphResponse graphResponse) {
                                Log.i(TAG,"post page response::"+graphResponse);

                            }
                        }
                    );

                request.executeAsync();

But, I'm unable to post image into facebook page. The problem is I'm unable to find the key for image attachment in Json data posted in Graph Api.

The failed response from facebook is

{Response:  responseCode: 400, graphObject: null, error: {HttpStatus: 400, errorCode: 324, errorType: OAuthException, errorMessage: (#324) Requires upload file}}

回答1:

Finally, finally, I was able to post an image into facebook page. This is how I did to post an photo.

  Bundle bundle=new Bundle();
        bundle.putByteArray("object_attachment",byteArray);// object attachment must be either byteArray or bitmap image
        bundle.putString("message","some message here");

        GraphRequest graphRequest=new GraphRequest(AccessToken.getCurrentAccessToken(),
                "{page_id}/photos",
                bundle,
                HttpMethod.POST,
                new GraphRequest.Callback() {

                    @Override
                    public void onCompleted(GraphResponse graphResponse) {

                      Log.i("post page response::" + graphResponse);

                }
        );
        graphRequest.executeAsync();


回答2:

1.) Make sure you a page access token with publish_pages permission that can be used to publish new photos.

2.) From the docs . Note that you dont have a "/" before pageid in your call.

There are two separate ways of publishing photos to Facebook:

1: Attach the photo as multipart/form-data. The name of the object doesn't matter, but historically people have used source as the parameter name for the photo. How this works depends on the SDK you happen to be using to do the post.

2: Use a photo that is already on the internet by publishing using the url parameter:

Bundle params = new Bundle();
params.putString("url", "{image-url}");
/* make the API call */
new Request(
    session,
    "/{page-id}/photos",
    params,
    HttpMethod.POST,
    new Request.Callback() {
        public void onCompleted(Response response) {
            /* handle the result */
        }
    }
).executeAsync();

There is no way to publish more then one photo in the same graph API call.

3.) Example ==>

Try it like this i.e post byteArrayStream of your photo

postParams = new Bundle();

            postParams.putString("message", "feed from android");
            postParams.putBoolean("published",true);
            String pageID = "363453267193844";

            //Post to the page as the page user
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            <YOURBITMAPPHOTOHANDLE>.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            postParams.putByteArray("source", byteArray);

            postParams.putString("access_token", "your_page_access_token");

         /* make the API call */
            new Request(
                    sessionInstance,
                    "/" + pageID + "/photos",
                    postParams,
                    HttpMethod.POST,
                    new Request.Callback() {
                        public void onCompleted(Response response) {
                            //An error occurred during posting to facebook
                            FacebookRequestError error = response.getError();
                            if (error != null) {
                                isPostingError = true;
                                postingErrorMessage = error.getErrorUserMessage();

                            } else {
                                isPostingError = false;
                            }

                        }


                    }
            ). executeAsync();