it-swarm.com.de

So posten Sie auf Facebook-Wand mit Facebook Android SDK, ohne das Dialogfeld zu öffnen

Ich verwende facebook sdk und mit Hilfe des mit diesem SDK angegebenen Beispiels habe ich einen Code zum Anmelden und Speichern von access_token in der Datenbank entwickelt

ich habe 2 Probleme:

1). Wenn ich versuche, access_token von der Datenbank abzurufen und an facebook weiterzugeben, kann ich nicht an diesem Pinnwand-Beispiel mit diesem Beispiel sdk posten. Warum ist das so?

2). Ich habe diesen facebook.Java-Code durchlaufen, aber ich habe den folgenden Befehl erhalten, um auf einer Wand zu posten, ein Dialogfeld zu öffnen, da es keine andere Methode gibt, um meine Nachricht sofort weiterzuleiten und zu posten. Sagen Sie mir bitte eine Lösung oder rufen Sie mich an, wenn ich an einer Wand posten möchte, 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);
                }
            });
        }
    }

Was ist falsch mit dem obigen Code .. es ist nicht an der Wand und gibt mir Wall Post: leer am Telefon und Emulator sowohl

Danke im Voraus..

17
Ankit

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

Ich habe mein Tutorial unter http://www.integratingstuff.com/2010/10/14/integrating-facebook-into-an-Android-application/ aktualisiert und beantwortet diese Frage jetzt genau basiert auf und ist im Wesentlichen die gleiche wie Ankits Antwort, führt aber die Menschen von Anfang bis Ende durch die Implementierung des gesamten Prozesses.

7

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

Das tatsächliche Layout des Mobilgeräts unterscheidet sich geringfügig, weist jedoch dasselbe Format auf. Dieser Prozess wird in den Beispielbeispielen von facebook Android sdk gut gezeigt.

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

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

Suchen Sie in dieser Frage nach: postParams.put (), in einigen Ihrer Java -Dateien wird ein ähnlicher Zeilentyp vorkommen. In diesen Zeilen können Sie die Daten auf Facebook veröffentlichen.

Zum Beispiel:

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

ist die nachricht,

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 die Anwendung, Beschreibung, Beschriftung, den Titel usw. bereitstellen.

alt text

2
viv

Ich habe Ankits Code für das Posten auf Facebook-Wall verwendet, aber sein Code gibt mir den Fehler Android.os.NetworkOnMainThreadException.

Nach der Suche nach diesem Problem sagte mir eine Lösung, dass Ihr Code in AsyncTask abgelegt wurde, um dieses Problem zu beseitigen. Nachdem er seinen Code geändert hat, funktioniert er gut für mich.

Der modifizierte Code sieht folgendermaßen 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
    }
}
1
Deepak

Diese Klasse hilft mir für gesendete Nachrichten auf meiner Facebook-PinnwandOHNEdialog:

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
anivaler