17 Stimmen

Mit Facebook Android SDK auf der Facebook-Pinnwand posten, ohne das Dialogfeld zu öffnen

Mit dem Facebook SDK kann ich mich anmelden und meine Daten speichern. access_token in eine Datenbank. Wenn ich versuche, einen Beitrag zu erstellen, ist die Facebook-Pinnwand aufgrund dieser Probleme sowohl auf meinem Telefon als auch auf dem Emulator immer noch leer:

1) Ich hole eine access_token aus der Datenbank und übergeben die access_token auf Facebook, aber ich darf nicht auf einer Pinnwand posten.

2) Ich kann meine Nachricht nicht abschicken, ohne ein Dialogfeld zu öffnen.

   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);
                }
            });
        }
    }

Wie kann ich auf Facebook posten, ohne das Dialogfeld zu öffnen?

37voto

Ankit Punkte 1148

Ich habe den folgenden Code angewandt und konnte meine Nachricht erfolgreich an der Wand veröffentlichen.

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();
         }
    }

7voto

Integrating Stuff Punkte 5111

Ich habe mein Tutorial unter http://www.integratingstuff.com/2010/10/14/integrating-facebook-into-an-Android-application/ und sie beantwortet jetzt genau diese Frage. Sie basiert auf der Antwort von Ankit und ist im Grunde genommen identisch mit ihr, führt die Menschen aber von Anfang bis Ende durch die Umsetzung des gesamten Prozesses.

2voto

viv Punkte 6118

Nun, es ist nicht so, dass etwas auf der Pinnwand gepostet wird, ohne den Benutzer zu informieren. Wenn der Benutzer Ihre Anwendung zulässt, dann präsentiert das Android Facebook sdk eine andere Seite, wo es einen Text gibt, den Ihre Anwendungen sendet, und eine textBox, wo der Benutzer auf seine Wand schreiben kann, ähnlich wie der Screenshot, den ich angehängt habe

Das tatsächliche Layout auf mobilen Geräten ist etwas anders, aber es hat das gleiche Format. Dieser Prozess wird in den Beispielen von Facebook Android sdk gut gezeigt.

Prüfen Sie nun die in diesem Beitrag gestellte Frage:

Facebook Connect Android - mit stream.publish @ http://api.facebook.com/restserver.php'> Facebook Connect Android - mit stream.publish @ http://api.facebook.com/restserver.php

Suchen Sie in dieser Frage nach diesen Zeilen: postParams.put(), ähnliche Zeilen werden in einigen Ihrer JAVA-Dateien zu finden sein. Dies sind die Zeilen, mit denen Sie die Daten an Facebook senden können.

Zum Beispiel:

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

ist die Botschaft,

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\"}}}");

ist die Zeile, in der Sie das Symbol für die Anwendung, die Beschreibung, die Beschriftung, den Titel usw. angeben.

alt text

1voto

Deepak Punkte 1989

Ich habe Ankits Code für die Veröffentlichung auf der Facebook-Pinnwand verwendet, aber sein Code gibt mir einen Fehler android.os.NetworkOnMainThreadException .

Nach der Suche nach diesem Problem sagte mir eine Lösung, dass Sie Ihren Code in AsyncTask um dieses Problem loszuwerden. Nachdem ich seinen Code geändert habe, funktioniert es bei mir gut.

Der geänderte Code sieht wie folgt aus:

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
    }
}

1voto

valerybodak Punkte 3780

Diese Klasse hilft mir bei gesendeten Nachrichten auf meiner Facebook-Pinnwand OHNE Dialog:

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);        
  } 

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X