Messaggio a muro di Facebook con text e image

Sono stato bloccato per giorni in cerca di un semplice tutorial per fare un post a muro di facebook con un'icona o un'image e un text utilizzando l'API del grafico. Ho provato innumerevoli esercitazioni e tutti sembrano molto complicate e non posso farli lavorare. Anche i campioni che vengono forniti con l'SDK non creano sessioni.

Sono stato felice di impostare l'SDK e get il mio APP_ID tutto quello che resta è il codice Java per un button personalizzato per condividere la mia applicazione sul muro degli utenti.

  • Cartella risorse di Android Studio Unit Test
  • NoClassDefFoundError: android / support / v4 / content / LocalBroadcastManager
  • Perché è sempre chiamato OnDestroy quando si torna all'attività del padre?
  • Streaming in diretta TV live di Android VideoView (HLS)
  • android sblocca l'intento dello schermo?
  • NestedScrollView e Horizontal RecyclerView Scorrimento liscio
  • Come distriggersre l'emoji da inserire in Android EditText?
  • come risolvere questo emulatore: ERRORE: nome della pelle sconosciuta 'WVGA800' soluzione
  • ExpandableListView all'interno di PopUp
  • Ottieni l'identificazione NFC Static Tag con la modalità HCE
  • Perché OSX non riesce Android Galaxy S per il debug USB?
  • Scattare foto con la camera su Android in modo programmato
  • 3 Solutions collect form web for “Messaggio a muro di Facebook con text e image”

    puoi submit la tua image con text dalla tua applicazione in modo molto semplice.

    Chiama questo metodo mentre btnImagePostToWall clic sul widget del button dire btnImagePostToWall come …

     btnImagePostToWall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { postImageToWall(); } }); 

    Ottieni informazioni sul profilo facendo richiesta a API di Facebook Graph ….

     public void postImageToWall() { facebook.authorize( this, new String[] { "user_photos,publish_checkins,publish_actions,publish_stream" }, new DialogListener() { @Override public void onFacebookError(FacebookError e) { // TODO Auto-generated method stub } @Override public void onError(DialogError dialogError) { // TODO Auto-generated method stub } @Override public void onComplete(Bundle values) { postImageonWall(); } @Override public void onCancel() { // TODO Auto-generated method stub } }); } private void postImageonWall() { byte[] data = null; Bitmap bi = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); data = baos.toByteArray(); Bundle params = new Bundle(); params.putString(Facebook.TOKEN, facebook.getAccessToken()); params.putString("method", "photos.upload"); params.putByteArray("picture", data); // image to post params.putString("caption", "My text on wall with Image "); // text to post AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); } 

    Basta creare una class SampleUploadListener che implementa AsyncFacebookRunner.RequestListener …

     class SampleUploadListener implements AsyncFacebookRunner.RequestListener { @Override public void onComplete(String response, Object state) { } @Override public void onIOException(IOException e, Object state) { } @Override public void onFileNotFoundException(FileNotFoundException e, Object state) { } @Override public void onMalformsdURLException(MalformsdURLException e, Object state) { } @Override public void onFacebookError(FacebookError e, Object state) { } } 

    Spero che questo ti aiuterà un po '…. 🙂

    È ansible pubblicare l'image su Facebook in due modi diversi. Se vuoi submit un'image da un URL, puoi pubblicarla come sotto:

     Bundle parameters = new Bundle(); parameters.putString("description","your description/message"); parameters.putString("link", "your link"); parameters.putString("name", "Name of your application/ any name you want to post"); // parameters.putString("caption", " caption if any!"); parameters.putString("picture", "Link to your image"); try { facebook.request("me"); response = facebook.request("me/feed", parameters, "POST"); Log.d("Tests", "got response: " + response); } catch (Exception e) { e.printStackTrace(); } 

    o se vuoi submit un'image dalla scheda SD, puoi creare un bitmap dall'image che desideri pubblicare e poi convertirlo in ByteArray e invialo come segue:

     Bundle parameters = new Bundle(); Log.e("byte arrays", ""+mByteArray); parameters.putString("message", "your message"); parameters.putByteArray("picture", mByteArray); try { facebook.request("me"); response = facebook.request("me/photos", parameters, "POST"); Log.d("Tests", "got response: " + response); } catch (Exception e) { e.printStackTrace(); } 

    PS Il primo metodo è quello di pubblicare l'image sul muro di Facebook dell'utente, e quest'ultimo è per il caricamento di foto con messaggio nell'album di foto dell'utente su Facebook, che sarà anche pubblicato come aggiornamento!

    Ecco qui. potrebbe essere necessario eseguire alcuni debug ecc., ma questo ha funzionato per me.

    Classe FbLoginActivity: esegue l'authentication e i post sul tuo wall e / o sulla panetworking dell'app.

    utilizzo:

     Intent i = new Intent(getApplicationContext(), FbLoginActivity.class); i.putExtra("SCORE", score); startActivity(i); 

    FbLoginActivity:

     import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformsdURLException; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; import android.widget.Toast; import com.facebook.android.AsyncFacebookRunner; import com.facebook.android.AsyncFacebookRunner.RequestListener; import com.facebook.android.DialogError; import com.facebook.android.Facebook; import com.facebook.android.Facebook.DialogListener; import com.facebook.android.FacebookError; import com.facebook.android.Util; public class FbLoginActivity extends Activity { private final String TAG = "FbLoginActivity"; private String token; // used to identify the fb user private static final String FACEBOOK_APP_ID = "your_key_here"; //private String[] permissions = { "email", "friends_about_me", "friends_location"}; private String[] permissions = {"publish_stream" }; private String rankText; public static String userName; private AlertDialog alertDialog; private boolean isMyWall = false, isAppWall = true; // facebook SSO Facebook fb = new Facebook(FACEBOOK_APP_ID); private AsyncFacebookRunner runner = new AsyncFacebookRunner(fb); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.register); showFbDialog(); SessionEvents.addAuthListener(new SampleAuthListener()); } private void accessUserData(String token) { // get information about the currently logged in user runner.request("me", meRequestListener); } private String getRankText() { String txt = "your text to be shared here" return txt; } private void postToFb() { // post to feed Bundle params = new Bundle(); params.putString("to", "me"); params.putString("message", "test msg"); try { runner.request("me/feed", params, "POST", meRequestListener, null); } catch(Throwable t) { Log.e(TAG, "caught throwable: " + t, t); Toast.makeText(this, "Error on login, is Facebook Installed?", Toast.LENGTH_LONG).show(); startActivity(new Intent(getApplicationContext(), MaleRankingActivity.class)); } } public void postImageonWall() { byte[] data = null; Bitmap bi = BitmapFactory.decodeFile("/sdcard/viewitems.png"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); data = baos.toByteArray(); Bundle params = new Bundle(); params.putString(Facebook.TOKEN, fb.getAccessToken()); params.putString("method", "photos.upload"); params.putByteArray("picture", data); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(fb); //mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); } private RequestListener meRequestListener = new RequestListener () { //called on successful completion of the Request public void onComplete(final String response, final Object state){ Log.d(TAG, "<onComplete> response: " + response); try { JSONObject fbResponse = new JSONObject(response); // set userName userName = fbResponse.getString("name"); Log.d(TAG, "<onComplete> fbResponse: " + fbResponse); } catch (JSONException e) { Log.e(TAG, "caught exception: " + e, e); } } // called if there is an error public void onFacebookError(FacebookError error, final Object state){} public void onMalformsdURLException(java.net.MalformsdURLException e, Object state){} public void onFileNotFoundException(FileNotFoundException arg0, Object arg1) { // TODO Auto-generated method stub } public void onIOException(IOException arg0, Object arg1) { // TODO Auto-generated method stub } }; private void authorizeAndPost() { final Bundle params = new Bundle(); try { // force authorization //fb.logout(this); /* * Get existing access_token if any */ SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); String access_token = mPrefs.getString("access_token", null); long expires = mPrefs.getLong("access_expires", 0); if(access_token != null) { fb.setAccessToken(access_token); } if(expires != 0) { fb.setAccessExpires(expires); } fb.authorize(this, permissions, new DialogListener() { public void onComplete(Bundle values) { Log.d(TAG, "<onComplete> entry"); // get rank text rankText = getRankText(); // set text params.putString("message", rankText); // post to ur wall if (isMyWall) { runner.request("me/feed", params, "POST", new WallPostRequestListener(), null); } // post to rate ur date wall if (isAppWall) { runner.request("259166150820823/feed", params, "POST", new WallPostRequestListener(), null); } // toast CharSequence text = "Posted date to Facebook!"; int duration = Toast.LENGTH_LONG; Toast toast = Toast.makeText(getApplicationContext(), text, duration); toast.show(); // start ranking activity Intent intent = new Intent(getApplicationContext(), ShareResultActivity.class); intent.putExtra("share_result", "You have successfully posted your date to Facebook!"); token = fb.getAccessToken(); Log.d(TAG, "<onComplete> fb access token: " + token); //intent.putExtra("userId", token); long token_expires = fb.getAccessExpires(); Log.d(TAG, "<onComplete> token expires: " + token_expires); SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FbLoginActivity.this); prefs.edit().putLong("access_expires", token_expires).commit(); prefs.edit().putString("access_token", token).commit(); //fb.setAccessExpires(300000); // for testing // access user data accessUserData(token); //postDateToFb(); startActivity(intent); } public void onFacebookError(FacebookError e) { Log.e(TAG, "fb error: " + e.getMessage(), e); } public void onError(DialogError e) { Log.e(TAG, "dialog error: " + e.getMessage(), e); } public void onAuthFail(String error) { Log.d("<fbExample>", "login failed: " + error); } public void onCancel() { Log.d(TAG, "fb cancelled"); } }); } catch(Throwable t) { Log.e(TAG, "caught throwable: " + t, t); Toast.makeText(this, "Error on login, is Facebook Installed?", Toast.LENGTH_LONG).show(); startActivity(new Intent(getApplicationContext(), LandingActivity.class)); } } public class WallPostRequestListener extends BaseRequestListener { public void onComplete(final String response, final Object state) { Log.d("Facebook-Example", "Got response: " + response); String message = "I just rated my date a creeper!"; 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; FbLoginActivity.this.runOnUiThread(new Runnable() { public void run() { //mText.setText(text); } }); } public void onCancel() { Log.d(TAG, "fb cancel"); } public void onComplete(Bundle arg0) { Log.e(TAG, "fb complete."); } public void onError(DialogError arg0) { Log.e(TAG, "fb err:" + arg0.getMessage()); } public void onFacebookError(FacebookError arg0) { Log.e(TAG, "fb err:" + arg0.getMessage()); } public void onFacebookError(FacebookError arg0, Object arg1) { Log.e(TAG, "fb err:" + arg0.getMessage()); } public void onFileNotFoundException(FileNotFoundException arg0, Object arg1) { Log.e(TAG, "fb err:" + arg0.getMessage(), arg0); } public void onIOException(IOException arg0, Object arg1) { Log.e(TAG, "fb err:" + arg0.getMessage(), arg0); } public void onMalformsdURLException(MalformsdURLException arg0, Object arg1) { Log.e(TAG, "fb err:" + arg0.getMessage(), arg0); } } public class SampleAuthListener implements SessionEvents.AuthListener { public void onAuthSucceed() { Log.d("<fbExample>", "fb auth token: " + fb.getAccessToken()); } public void onAuthFail(String error) { Log.d("<fbExample>", "login failed: " + error); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { fb.authorizeCallback(requestCode, resultCode, data); } private void showFbDialog() { alertDialog = new AlertDialog.Builder(this) .setTitle("I want to:") .setMultiChoiceItems(new String[] {"Post to my wall", "Post to app's wall" }, new boolean[]{false, true, false, true, false, false, false}, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { /* User clicked on a check box do some stuff */ Log.d(TAG, "multichoice got click, whichButton: " + whichButton + ", isChecked: " + isChecked); if (whichButton == 0 && isChecked) { isMyWall = true; } if (whichButton == 1 && isChecked) { isAppWall = true; } else if (whichButton == 1 && !isChecked) { isAppWall = false; } } }) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked Yes so do some stuff */ Log.d(TAG, "Ok got click"); authorizeAndPost(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked No so do some stuff */ Log.d(TAG, "Cancel got click"); startActivity(new Intent(getApplicationContext(), YourActivity.class )); } }) .create(); alertDialog.show(); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.