Comment poster sur le mur facebook en utilisant Facebook android SDK, sans ouvrir la boîte de dialogue
j'utilise facebook sdk et avec l'aide de l'exemple donné avec ce SDK j'ai développé un code pour me connecter et stocker access_token dans la base de données
j'ai 2 problèmes:
1). quand j'essaie de récupérer access_token de la base de données et de le passer à facebook, il ne me permet pas de poster sur le mur en utilisant cet exemple donné avec ce sdk facebook, pourquoi est-ce ainsi??
2). j'ai vécu cette facebook.code java, mais ce que j'ai c'est que pour poster sur un mur je dois ouvrir un boîte de dialogue comme il n'y a pas d'autre méthode pour passer mon message immédiatement et post. Merci de m'indiquer la solution vis à vis d'elle ou tel me wat dois-je faire quand je veux poster sur un mur sans ouverture de la boîte de dialogue
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);
}
});
}
}
ce qui ne va pas avec le code ci-dessus.. ce n'est pas poster sur le mur et me donner MUR Post: vide sur le téléphone et émulateur à la fois
Merci d'avance..
5 réponses
j'ai appliqué le code suivant et j'ai réussi à afficher mon message sur wall.
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();
}
}
j'ai mis à jour mon tutoriel à http://www.integratingstuff.com/2010/10/14/integrating-facebook-into-an-android-application/ et il répond maintenant exactement à cette question. Il est basé sur et essentiellement le même que la réponse D'Ankit, mais guide les gens du début à la fin à travers la mise en œuvre de l'ensemble du processus.
ce n'est pas que quelque chose soit posté sur un mur sans en informer l'utilisateur. Lorsque l'Utilisateur autorise votre application, alors le sdk Facebook Android présente une autre page, où il ya un texte que vos applications envoie, et une boîte de textes où l'utilisateur peut écrire sur son mur, similaire à la capture d'écran que j'ai attaché
La configuration sur l'appareil mobile est légèrement différent, mais c'est dans le même format. Ce processus est bien illustré dans les exemples de facebook android SDK.
maintenant, vérifiez la question posée dans ce post:
Facebook connectez Android -- en utilisant stream.publier @ http://api.facebook.com/restserver.php Facebook connectez Android -- en utilisant stream.publier @ http://api.facebook.com/restserver.php
Par exemple:
postParams.put("user_message", "TESTING 123");
est le message,
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\"}}}");
est la ligne où vous fournissez l'icône pour l'application,la description, La légende, le titre, etc.
j'ai utilisé le code D'Ankit pour poster sur le mur facebook mais son code me donne une erreur android.os.NetworkOnMainThreadException
.
après avoir cherché sur ce problème une solution m'a dit que mettre votre code dans AsyncTask
pour se débarrasser de ce problème. Après avoir modifié son code, ça marche très bien pour moi.
le code modifié ressemble à:
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
}
}
cette classe m'aide pour envoyer des messages sur mon mur Facebook sans boîte de dialogue:
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);
}
}