как разместить изображение на стене facebook с помощью диалога

Я использую Facebook SDK и вызываю WebDialog в своем приложении, чтобы опубликовать что-то на Facebook, оно может публиковать текст, но не изображение, разве оно не может использовать params.putByteArray?

Как я могу решить эту проблему с webDialog?

Bundle params = new Bundle();
params.putByteArray("picture",  baos.toByteArray());

WebDialog feedDialog = (
    new WebDialog.FeedDialogBuilder(CameraActivity.this,
        mData.sFB,
        params))
    .setOnCompleteListener(new OnCompleteListener(){
        @Override
        public void onComplete(Bundle values,FacebookException error) {
        })
        .build();                   
feedDialog.show();

person user2724022    schedule 31.03.2014    source источник


Ответы (2)


Для этого вы можете использовать Simple facebook, он очень прост в использовании. Публикация полного класса для справки, просто обратитесь к нему и проверьте.

 package com.core;

    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Window;
    import android.widget.Toast;

    import com.minoritybiz.BaseActivity;
    import com.minoritybiz.R;
    import com.minoritybiz.data.ConstantData;
    import com.minoritybiz.facebook.entities.Feed;
    import com.minoritybiz.facebooks.Permissions;
    import com.minoritybiz.facebooks.SimpleFacebook;
    import com.minoritybiz.facebooks.SimpleFacebookConfiguration;

    public class FacebookShareActivity extends BaseActivity {

        private SimpleFacebook simpleFacebook;
        private SimpleFacebookConfiguration.Builder simpleFacebookConfigurationBuilder;
        private SimpleFacebookConfiguration simpleFacebookConfiguration;

        private String IN_MESSAGE;
        private String IN_CAPTION;
        private String IN_NAME;
        private String IN_PICTURE;
        private String IN_LINK;
        private String IN_DESCRIPTION;

        private String shareLabel = "Download our mobile app on ITunes or Google Play";

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);

            setContentView(R.layout.ij_facebook_share);

            simpleFacebook = SimpleFacebook.getInstance(this);
            simpleFacebookConfigurationBuilder = new SimpleFacebookConfiguration.Builder();
            simpleFacebookConfigurationBuilder.setAppId(ConstantData.facebook_app_id);
            simpleFacebookConfigurationBuilder.setPermissions(new Permissions[] { Permissions.PUBLISH_ACTION, Permissions.PUBLISH_STREAM });
            simpleFacebookConfiguration = simpleFacebookConfigurationBuilder.build();
            SimpleFacebook.setConfiguration(simpleFacebookConfiguration);
            getIntentData();
            if (simpleFacebook.isLogin()) {
                publishFeed();
            } else {
                simpleFacebook.login(new OnLoginListener());
            }
        }

        private void getIntentData() {

            try {
                IN_NAME = this.getIntent().getStringExtra("NAME");
                IN_DESCRIPTION = this.getIntent().getStringExtra("DESCRIPTION");
                IN_LINK = this.getIntent().getStringExtra("LINK");
                IN_PICTURE = this.getIntent().getStringExtra("THUMB");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            simpleFacebook.onActivityResult(this, requestCode, resultCode, data);
            super.onActivityResult(requestCode, resultCode, data);
        }

        private void publishFeed() {
            final Feed feed = new Feed.Builder().setName(IN_NAME).setDescription(IN_DESCRIPTION).setPicture(IN_PICTURE).setMessage(ConstantData.eventCatName).setLink(IN_LINK)
                    .setMessage(shareLabel).build();
            simpleFacebook.publish(feed, new onPublishListener());
        }

        class OnLoginListener implements SimpleFacebook.OnLoginListener {

            @Override
            public void onLogin() {
                publishFeed();
            }

            @Override
            public void onNotAcceptingPermissions() {
            }

            @Override
            public void onThinking() {
            }

            @Override
            public void onException(Throwable throwable) {
            }

            @Override
            public void onFail(String reason) {
                Toast.makeText(FacebookShareActivity.this, "Failure", Toast.LENGTH_LONG).show();
            }
        }

        class onPublishListener implements SimpleFacebook.OnPublishListener {

            @Override
            public void onComplete(String id) {
                hideProgressDialog();
                Toast.makeText(FacebookShareActivity.this, "Posted Successfully...", Toast.LENGTH_LONG).show();
                finish();
            }

            @Override
            public void onThinking() {
                // showProgressDialog("Doing Facebook Sharing...",FacebookShareActivity.this,true);
                showProgressDialog();
            }

            @Override
            public void onException(Throwable throwable) {
                hideProgressDialog();
                throwable.printStackTrace();
            }

            @Override
            public void onFail(String reason) {
                hideProgressDialog();
                Toast.makeText(FacebookShareActivity.this, "Post failed due to some error...", Toast.LENGTH_LONG).show();
                finish();
            }
        }
    }
person Pratik Dasa    schedule 31.03.2014

В одиночку picture не сработает, нужно еще добавить link. Это логично?

При публикации фида, если вы хотите добавить изображение, с ним должна быть связана ссылка и описание/подпись (необязательно). Поскольку изображение в ленте связано со ссылкой, которой вы делитесь. Вот как выглядит фид-

Если вы один хотите опубликовать фото — это не фид; вместо этого вы должны использовать /photos API и опубликовать фотографию.

Так что добавьте picture и link к параметрам, иначе измените API.

person Sahil Mittal    schedule 31.03.2014
comment
Я хочу опубликовать изображение с мобильного телефона, когда я использую другое приложение, они публикуют изображение, отобразят диалоговое окно для отображения изображения и, возможно, могут ввести какое-то слово. После отправки оно покажет состояние обновления на мобильном телефоне, поэтому... как это сделать Это? - person user2724022; 01.04.2014
comment
Посмотрите приложения, о которых вы говорите, используйте /feed с picture и link. Это картинка + ссылка с ней. Просто попробуйте picture с link в своем приложении. - person Sahil Mittal; 01.04.2014
comment
Я хочу загрузить изображение со своего мобильного телефона, но на изображении нет ссылки (я вставляю путь к файлу изображения, но выдает ошибку). как загрузить изображение на стену из веб-диалога? - person user2724022; 01.04.2014
comment
Вы не можете! Для этого вы должны использовать Graph API, как я уже упоминал в ответе. Если не верите, можете пожалуйста добавить скрины приложения, которое позволяет то же самое? - person Sahil Mittal; 01.04.2014