Как разместить на стене Facebook с помощью Android SDK Facebook, не открывая диалоговое окно - PullRequest
17 голосов
/ 18 ноября 2010

Я использую Facebook SDK и с помощью примера, приведенного с этим SDK, я разработал код для входа и сохранения access_token в базе данных

У меня 2 проблемы:

1). Когда я пытаюсь получить access_token из базы данных и передать его в Facebook, это не позволяет мне публиковать на стене, используя этот пример, приведенный с этим Facebook SDK, почему так ??

2). Я прошел этот код facebook.java, но я получил, что для публикации на стене мне нужно было открыть диалоговое окно, так как нет другого способа передать мое сообщение сразу и опубликовать. Пожалуйста, скажите мне решение по этому поводу или скажите мне, что я должен делать, когда я хочу разместить на стене, не открывая диалоговое окно

   mPostButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String message = "Post this to my wall";

                Bundle params = new Bundle();             

                params.putString("message", message);

                mAsyncRunner.request("me/feed", params, "POST", new WallPostRequestListener());

            }
        });

 public class WallPostRequestListener extends BaseRequestListener {

        public void onComplete(final String response) {
            Log.d("Facebook-Example", "Got response: " + response);
            String message = "<empty>";
            try {
                JSONObject json = Util.parseJson(response);
                message = json.getString("message");
            } catch (JSONException e) {
                Log.w("Facebook-Example", "JSON Error in response");
            } catch (FacebookError e) {
                Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
            }
            final String text = "Your Wall Post: " + message;
            Example.this.runOnUiThread(new Runnable() {
                public void run() {
                    mText.setText(text);
                }
            });
        }
    }

Что не так с приведенным выше кодом ... он не публикуется на стене и не выдает мне сообщение на стене: пусто на телефоне и на эмуляторе

Заранее спасибо ..

Ответы [ 5 ]

37 голосов
/ 07 декабря 2010

Я применил следующий код и мог успешно опубликовать свое сообщение на стене.

public void postOnWall(String msg) {
        Log.d("Tests", "Testing graph API wall post");
         try {
                String response = mFacebook.request("me");
                Bundle parameters = new Bundle();
                parameters.putString("message", msg);
                parameters.putString("description", "test test test");
                response = mFacebook.request("me/feed", parameters, 
                        "POST");
                Log.d("Tests", "got response: " + response);
                if (response == null || response.equals("") || 
                        response.equals("false")) {
                   Log.v("Error", "Blank response");
                }
         } catch(Exception e) {
             e.printStackTrace();
         }
    }
7 голосов
/ 04 декабря 2011

Я обновил свой учебник на http://www.integratingstuff.com/2010/10/14/integrating-facebook-into-an-android-application/, и теперь он точно отвечает на этот вопрос. Он основан на ответе Ankit и в основном совпадает с ним, но помогает людям от начала до конца реализовать весь процесс.

2 голосов
/ 18 ноября 2010

Ну, это не значит, что что-то публикуется на стене без уведомления пользователя. Когда пользователь разрешает ваше приложение, Android Facebook SDK представляет другую страницу, на которой есть текст, который отправляет ваше приложение, и текстовое поле, где пользователь может написать на своей стене, подобно скриншоту, который я прикрепил

Фактическое расположение на мобильном устройстве немного отличается, но в том же формате. Этот процесс хорошо показан на примерах Facebook android sdk.

Теперь проверьте вопрос, заданный в этом сообщении:

Facebook Connect Android - с помощью stream.publish @ http://api.facebook.com/restserver.php'>Facebook Connect Android - с помощью stream.publish @ http://api.facebook.com/restserver.php

В этом вопросе ищите следующее: postParams.put (), аналогичные типы линий будут присутствовать в некоторых ваших файлах JAVA. Это строки, с помощью которых вы можете публиковать данные в Facebook.

Например:

postParams.put("user_message", "TESTING 123");

это сообщение,

postParams.put("attachment", "{\"name\":\"Facebook Connect for Android\",\"href\":\"http://code.google.com/p/fbconnect-android/\",\"caption\":\"Caption\",\"description\":\"Description\",\"media\":[{\"type\":\"image\",\"src\":\"http://img40.yfrog.com/img40/5914/iphoneconnectbtn.jpg\",\"href\":\"http://developers.facebook.com/connect.php?tab=iphone/\"}],\"properties\":{\"another link\":{\"text\":\"Facebook home page\",\"href\":\"http://www.facebook.com\"}}}");

- это строка, где вы предоставляете значок для приложения, описания, подписи, заголовка и т. Д.

alt text

1 голос
/ 15 ноября 2012

Этот класс помогает мне при отправке сообщений на моей стене Facebook БЕЗ диалога:

public class FBManager{

  private static final String FB_ACCESS_TOKEN = "fb_access_token";
  private static final String FB_EXPIRES = "fb_expires";

  private Activity context;
  private Facebook facebookApi;

  private Runnable successRunnable=new Runnable(){
    @Override
    public void run() {
        Toast.makeText(context, "Success", Toast.LENGTH_LONG).show();
    }
  };    

  public FBManager(Activity context){

    this.context = context;

    facebookApi = new Facebook(FB_API_ID);

    facebookApi.setAccessToken(restoreAccessToken());

  } 

  public void postOnWall(final String text, final String link){
    new Thread(){
        @Override
        public void run(){
            try {
                Bundle parameters = new Bundle();
                parameters.putString("message", text);
                if(link!=null){
                    parameters.putString("link", link);
                }
                String response = facebookApi.request("me/feed", parameters, "POST");
                if(!response.equals("")){
                    if(!response.contains("error")){
                        context.runOnUiThread(successRunnable);                     
                    }else{
                        Log.e("Facebook error:", response);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }.start();     
  }


  public void save(String access_token, long expires){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    Editor editor=prefs.edit();
    editor.putString(FB_ACCESS_TOKEN, access_token);
    editor.putLong(FB_EXPIRES, expires);
    editor.commit();
  }

  public String restoreAccessToken(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    return prefs.getString(FB_ACCESS_TOKEN, null);      
  }

  public long restoreExpires(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    return prefs.getLong(FB_EXPIRES, 0);        
  } 

}

1 голос
/ 16 августа 2012

Я использовал код Анкита для размещения на стене в фейсбуке, но его код выдает мне ошибку android.os.NetworkOnMainThreadException.

После поиска по этой проблеме, мне сказали, что введите код AsyncTask, чтобы избавиться от этой проблемы. После изменения его кода у меня все работает нормально.

Модифицированный код выглядит так:

public class UiAsyncTask extends AsyncTask<Void, Void, Void> {

    public void onPreExecute() {
        // On first execute
    }

    public Void doInBackground(Void... unused) {
        // Background Work
         Log.d("Tests", "Testing graph API wall post");
         try {
                String response = facebook.request("me");
                Bundle parameters = new Bundle();
                parameters.putString("message", "This test message for wall post");
                parameters.putString("description", "test test test");
                response = facebook.request("me/feed", parameters, "POST");
                Log.d("Tests", "got response: " + response);
                if (response == null || response.equals("") || response.equals("false")) {
                   Log.v("Error", "Blank response");
                }
         } catch(Exception e) {
             e.printStackTrace();
         }
        return null;
    }

    public void onPostExecute(Void unused) {
         // Result
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...