Posten Sie auf der Facebook-Wand mit dem Facebook Android SDK, ohne das Dialogfeld zu öffnen
Lesezeit: 7 Minuten
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.
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.
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.
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
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
}
}
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);
}
}
.
3773000cookie-checkPosten Sie auf der Facebook-Wand mit dem Facebook Android SDK, ohne das Dialogfeld zu öffnenyes
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