Posten Sie auf der Facebook-Wand mit dem Facebook Android SDK, ohne das Dialogfeld zu öffnen

Lesezeit: 7 Minuten

Posten Sie auf der Facebook Wand mit dem Facebook Android SDK
Ankit

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

1) Ich hole ein access_token aus der Datenbank und bestehen die access_token auf Facebook, aber ich darf nicht an einer Pinnwand posten.

2) Ich kann meine Nachricht nicht veröffentlichen, 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?

  • Es scheint so einfach zu sein, aber ich habe den Code von Ankit ausprobiert und erhalte folgenden Fehler: 02-02 16:52:58.672: WARN/Bundle(6774): Key access_token erwartetes Byte[] aber der Wert war ein java.lang.String. Der Standardwert wurde zurückgegeben. Wieso den?

    Benutzer322281

    10. Feb. ’11 um 2:20

  • Es scheint, dass Sie die Werte von Access_Token und Token_Exprires im Facebook-Objekt vorher nicht wiederhergestellt haben Antwort = mFacebook.request(“me/feed”, parameters,”POST”); Die Lösung für Ihr Problem könnte also sein, SessionStore.restore(mFacebook, this); (Methode im Facebook-Beispiel mit dem Dateinamen SessionStore angegeben) Oder sonst FacebookObject.setAccessToken (Zugangstoken wiederherstellen, die von Facebook bereitgestellt wurden); FacebookObject.setAccessExpires (Zugangsdaten wiederherstellen, die von Facebook bereitgestellt wurden);

    – Ankit

    10. Feb. ’11 um 2:20

Ich habe folgenden Code angewendet 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();
         }
    }

  • Ich suche jedoch nach einer Lösung, um von einer anderen Aktivität aus an einer Wand zu posten.

    – Ankit

    7. Dezember ’10 um 12:15

  • Ich habe auch eine Lösung dafür gefunden, ich habe gerade meine Facebook-Sitzung von der Seite, auf der ich Beiträge erstellen möchte, wiederhergestellt, indem ich “SessionStore.restore(mFacebook, this);” aufgerufen habe. (Methode im Facebook-Beispiel mit dem Dateinamen SessionStore angegeben)

    – Ankit

    15. Dezember ’10 um 7:15

  • Hallo Ankit, können Sie mir sagen, wie Sie den Benutzer autorisieren, bevor Sie diese Funktion aufrufen. Ich habe versucht, ein Facebook-Objekt zu erstellen, das die Anwendungs-ID übergibt, und dann die Autorisierungsfunktion aufgerufen. Das Anmeldefeld wird angezeigt, aber nach dem Anmelden passiert nichts

    – Mako

    22. Januar ’11 um 7:57

  • mFb.authorize(dieser, neuer String[] {“publish_stream”, “read_stream”, “offline_access”},new LoginDialogListener()); Das bietet mir AccessToken, TokenExpire-Wert, der in sharedPreferences gespeichert wird, nachdem ich ein Facebook-Objekt in einer AsyncTask erstellt habe, und durch Wiederherstellen dieser AccessToken- und Ablaufwerte in Facebook-Objekt kann ich die obige Aufgabe in jeder Aktivität meiner Android-Anwendung ausführen.

    – Ankit

    24. Januar ’11 um 6:42


  • Danke für deinen Code, funktioniert super. Ich habe mit den Emulatoren und meinem echten Telefon experimentiert. Es scheint mich immer eingeloggt zu halten. Warum ist es notwendig, Token-Informationen in den gemeinsamen Einstellungen zu speichern? Ist es nur notwendig, wenn offline_access angefordert wird? Vielen Dank für Ihre Zeit.

    – Mel

    10. Feb. ’11 um 2:19

Ich habe mein Tutorial aktualisiert unter http://www.integratingstuff.com/2010/10/14/integrating-facebook-into-an-android-application/ und beantwortet nun genau diese Frage. Es basiert auf der Antwort von Ankit und ist im Grunde dieselbe, führt die Menschen jedoch von Anfang bis Ende durch die Implementierung des gesamten Prozesses.

Posten Sie auf der Facebook Wand mit dem Facebook Android SDK
viv

Nun, es ist nicht so, dass etwas an die Wand gepostet wird, ohne den Benutzer zu informieren. Wenn der Benutzer Ihre Anwendung zulässt, zeigt das Android Facebook-SDK eine weitere Seite an, auf der sich ein Text befindet, den Ihre Anwendung sendet, und eine Textbox, in die der Benutzer an seine Wand schreiben kann, ähnlich dem Screenshot, den ich angehängt habe

Das tatsächliche Layout auf Mobilgeräten unterscheidet sich geringfügig, weist jedoch dasselbe Format auf. Dieser Vorgang wird in den Beispielbeispielen von Facebook Android SDK gut gezeigt.

Überprüfen Sie nun die in diesem Beitrag gestellte Frage:

Facebook Connect Android — using stream.publish @ http://api.facebook.com/restserver.php’>Facebook Connect Android — using stream.publish @ http://api.facebook.com/restserver.php

Suchen Sie in dieser Frage nach diesen: postParams.put(), ähnliche Zeilen werden in einigen Ihrer JAVA-Dateien vorhanden sein. Dies sind die Zeilen, über die Sie die Daten an Facebook posten können.

Beispielsweise:

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 ein Symbol für Anwendung, Beschreibung, Bildunterschrift, Titel usw. angeben.

Alt-Text

  • Hey viv, danke für die Antwort. Aber wie würde ich dies wie in meiner Anwendung handhaben, wenn der Benutzer auf eine bestimmte Schaltfläche klickt, nachdem er sich bei Facebook authentifiziert hat, sollte etwas an seiner Wand gepostet werden, ohne ihn aufzufordern.

    – Ankit

    18. November ’10 um 12:34

  • Ich bin nicht in der Lage, dieses Fenster zu bekommen.. sollte ich dieses Fenster entwerfen… oder wenn es eine Prozedur gibt, dann lassen Sie es mich bitte wissen

    – kamal_tech_view

    6. Juli ’12 um 5:37

  • @kamal_tech_view : Dafür gibt es eine neue Methode. Öffnen Sie einen Dialog, überprüfen Sie dies: developer.facebook.com/docs/reference/androidsdk/dialog , dann verwenden Sie folgende Parameter , überprüfen Sie dies : developer.facebook.com/docs/reference/dialogs/feed

    – viv

    7. Juli ’12 um 14:18

Ich habe Ankits Code zum Posten auf der Facebook-Wand verwendet, aber sein Code gibt mir einen Fehler android.os.NetworkOnMainThreadException.

Nachdem ich nach diesem Problem gesucht hatte, wurde mir eine Lösung mitgeteilt, die Ihren Code einfügte AsyncTask um dieses Problem loszuwerden. Nachdem er seinen Code geändert hat, funktioniert er bei mir einwandfrei.

Der geänderte Code sieht so 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
    }
}

1641924234 798 Posten Sie auf der Facebook Wand mit dem Facebook Android SDK
valerybodak

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

}

.

377300cookie-checkPosten Sie auf der Facebook-Wand mit dem Facebook Android SDK, ohne das Dialogfeld zu öffnen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy