2015-05-13 15 views
5

AiutateciCome posta a parete facebook android-sdk: 4.0.0

I Codice Hava pulsante posta a parete:

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

public void postToWall() { 
    // post on user's wall. 
    facebook.dialog(this, "feed", new DialogListener() { 

     @Override 
     public void onFacebookError(FacebookError e) { 
     } 

     @Override 
     public void onError(DialogError e) { 
     } 

     @Override 
     public void onComplete(Bundle values) { 
     } 

     @Override 
     public void onCancel() { 
     } 
    }); 

} 

ma ho Nuova Faceboof Android SDK 4.0.0 e questo codice depravato

Come postare a muro con la nuova biblioteca?

ho letto this, ma non capisco come utilizzare

+1

Se si desidera pubblicare solo testo, è necessario utilizzare me/mangimi e costruire la vostra metodo proprio: https://developers.facebook.com/docs/android/graph, per le restanti opzioni di condivisione, i documenti che hai indicato hanno esempi chiari. Spero possa essere d'aiuto. –

risposta

5

Forse non è proprio la soluzione che state cercando, ma io sto usando.

Facebook Android SDK 4 ha la classe ShareApi per la condivisione dei contenuti. Questa classe ha metodo statico share():

public static void share(
      final ShareContent shareContent, 
      final FacebookCallback<Sharer.Result> callback) { 
     new ShareApi(shareContent) 
       .share(callback); 
    } 

e private String non statica message. Così, quando si sta cercando di condividere qualcosa (ad es.

ShareApi api = new ShareApi(content); 
api.setMessage("My message"); 
api.share(content, new FacebookCallback<Sharer.Result>() ...) 

) sarà creata nuova istanza di ShareApi con message = null e non si aggiungerà il tuo messaggio.

La soluzione:

  1. classe Open ShareApi se si sta utilizzando Facebook SDK come libreria esterna o copiare questa classe da Github https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/share/ShareApi.java se si sta utilizzando repository Maven.

  2. modificare questo codice:

    public static void share(
        final ShareContent shareContent, 
        final FacebookCallback<Sharer.Result> callback) { 
    new ShareApi(shareContent) 
         .share(callback); 
    } 
    

    a questo:

    public static void share(final String message, 
        final ShareContent shareContent, 
        final FacebookCallback<Sharer.Result> callback) { 
    new ShareApi(message, shareContent) 
         .share(callback); 
    } 
    
  3. modificare questo codice:

    a questo:

    public ShareApi(String message, final ShareContent shareContent) { 
        this.message = message; 
        this.shareContent = shareContent; 
        this.graphNode = DEFAULT_GRAPH_NODE; 
    } 
    
  4. Usa il tuo cambiato ShareApi classe per la condivisione di contenuti:

    ShareApi.share("My message", content, new FacebookCallback<Sharer.Result>() { 
    
         @Override 
         public void onSuccess(Sharer.Result result) { 
          if (AppConfig.DEBUG) { 
           Log.d(TAG, "SUCCESS"); 
          } 
         } 
    
         @Override 
         public void onCancel() { 
          if (AppConfig.DEBUG) { 
           Log.d(TAG, "CANCELLED"); 
          } 
         } 
    
         @Override 
         public void onError(FacebookException error) { 
          if (AppConfig.DEBUG) { 
           Log.d(TAG, error.toString()); 
          } 
         } 
        }); 
    

Se si desidera solo per condividere il testo, è possibile utilizzare il codice seguente per content oggetto:

ShareLinkContent content = new ShareLinkContent.Builder() 
       .build(); 

You' Ho già letto questo manuale https://developers.facebook.com/docs/sharing/android e posso aggiungere diversi ShareContent al tuo post. Utilizzare examples from Facebook Github repository per una migliore comprensione del nuovo SDK.

P.S. Naturalmente, dovresti avere un token di accesso valido e l'autorizzazione publish_actions.

+1

Ottima risposta, mi ha aiutato, ma vorrei suggerire un cambiamento. Invece di modificare la classe ShareApi, basta chiamare "api.share (new FacebookCallback () ...)" con il riferimento ShareApi appena creato. Questa funzione di condivisione non statica potrebbe non essere stata pubblica quando hai scritto la risposta. – NineToeNerd

6

La documentazione ufficiale di Facebook su come condividere da Android SDK 4,0 si trova qui:

https://developers.facebook.com/docs/sharing/android

Questo collegamento ha esempi di come condividere chiamando l'API o la condivisione grafico chiamando la Facebook app nativa dialogo.

Ecco come ho implementato la finestra di condivisione nel mio app:

in XML per l'attività/frammento ho aggiunto il Button

<Button 
     android:layout_width="144dp" 
     android:layout_height="144dp" 
     android:id="@+id/shareFacebookButton" 
     android:text="" 
     android:background="@drawable/facebook_button" 
     android:layout_gravity="center" 
     android:layout_marginBottom="6dp" 
     /> 

Poi all'interno del frammento:

Button shareButton = (Button)view.findViewById(R.id.shareFacebookButton); 
shareDialog = new ShareDialog(this); 
callbackManager = CallbackManager.Factory.create(); 
shareDialog.registerCallback(callbackManager, new 

FacebookCallback<Sharer.Result>() { 
    @Override 
    public void onSuccess(Sharer.Result result) {} 

    @Override 
    public void onCancel() {} 

    @Override 
    public void onError(FacebookException error) {} 
}); 

shareButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (ShareDialog.canShow(ShareLinkContent.class)) { 
      ShareLinkContent linkContent = new ShareLinkContent.Builder() 
       .setContentTitle("Hello Facebook") 
       .setContentDescription("The 'Hello Facebook' sample showcases simple Facebook integration") 

      .setContentUrl(Uri.parse("http://developers.facebook.com/android")) 
          .build(); 

     shareDialog.show(linkContent); 
      } 
    }}); 

Ora, quando qualcuno fa clic sul pulsante, incontrerà la finestra di dialogo di Facebook come ci si aspetterebbe.

Spero che questo aiuti.

+0

Come pubblicare un'immagine insieme a titolo e descrizione del contenuto? –

+0

usa semplicemente '.setImageUrl (imageUrl)' dove 'imageUrl' è un tipo di oggetto' URI' valido. –

1

Questo è un esempio funzionante (13.02.2017) basato sulla risposta massima.

Gradle: compilare 'com.facebook.android:facebook-android-sdk:[4,5)'

public class ShareOnFacebook extends Activity { 

    private static final String TAG = "ShareOnFacebook"; 

    CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     shareOnWall(); 
    } 

    void shareOnWall() { 
     ShareDialog shareDialog = new ShareDialog(this); 
     callbackManager = CallbackManager.Factory.create(); 
     shareDialog.registerCallback(callbackManager, new 

       FacebookCallback<Sharer.Result>() { 
        @Override 
        public void onSuccess(Sharer.Result result) { 
         Log.d(TAG, "onSuccess: "); 
         Toast.makeText(ShareOnFacebook.this, "onSuccess", Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onCancel() { 
         Log.d(TAG, "onCancel: "); 
         Toast.makeText(ShareOnFacebook.this, "onCancel", Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onError(FacebookException error) { 
         Log.d(TAG, "onError: "); 
         Toast.makeText(ShareOnFacebook.this, "onError" + error.toString(), Toast.LENGTH_SHORT).show(); 
        } 
       }); 

     if (ShareDialog.canShow(ShareLinkContent.class)) { 
      ShareLinkContent linkContent = new ShareLinkContent.Builder() 
        .setContentTitle("Hello Facebook") 
        .setContentDescription("The 'Hello Facebook' sample showcases simple Facebook integration") 
        .setContentUrl(Uri.parse("http://developers.facebook.com/android")) 
        .build(); 

      shareDialog.show(linkContent); 
     } 
    } 

    @Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 


} 
+0

https://developers.facebook.com/docs/sharing/android, A partire dal 18 aprile 2017, i seguenti parametri non sono più supportati dalle versioni Graph API 2.9 e successive. Per le versioni 2.8 e precedenti, i parametri continueranno a funzionare fino al 17 luglio 2017. un contentTitle che rappresenta il titolo del contenuto nel collegamento un imageURL, l'URL dell'immagine in miniatura che apparirà sul post a contentDescrizione di il contenuto, di solito 2-4 frasi. In breve tutti hanno bisogno di controllare la documentazione di Facebook ogni volta –

Problemi correlati