2013-06-09 3 views
8

Sto cercando di aggiornare a Facebook SDK 3.0 e finalmente ho ottenuto tutto per funzionare con Request.newStatusUpdateRequest(). Tuttavia la mia app condivide/pubblica il testo insieme a un link. Ho provato/guardato nel seguente:Condividi link e testo con Android Facebook SDK 3.0

Request.newStatusUpdateRequest() 

Questo non sembra avere alcuna opzione per un pacchetto o di qualsiasi altro modo per includere un link e l'icona.

Request.newRestRequest() 

saltato questo perché ho visto resto era in corso di ammortamento.

new WebDialog.FeedDialogBuilder(_activity, session, params).build().show(); 

Questo in realtà funziona abbastanza bene ma il post risultante non sembra essere legato al mio Facebook App e io non sono sicuro di come questo influenzerà le mie intuizioni di Facebook.

Request.newPostRequest() 

Da quello che ho letto, questo metodo sembra essere il modo corretto. Tuttavia, non riesco a capire dove ottenere il GraphObject da passare come uno dei parametri.

Qual è il modo PROPPER per pubblicare/condividere testo, collegamento e immagine sulla bacheca dell'utente? Sembra Request.newPostRequest() quindi includerò il codice che ho per quello.

Request request = Request.newPostRequest(session, "me/feed", ??graph_object??, new Request.Callback() { 
    @Override 
    public void onCompleted(Response response) { 
     showPublishResult("message", response.getGraphObject(), response.getError()); 
    } 
}); 
request.setParameters(params); 
Request.executeBatchAsync(request); 

Ma ciò che è veramente un GraphObject? Dove ottengo il graph_object? Più leggo da FB su GraphObject/OpenGraph/Graph API più mi confondo.

Se mi sto dirigendo completamente verso la direzione sbagliata, mi dica. Se Request.newPostRequest è il modo propilo per farlo, per favore forniscimi maggiori informazioni sul parametro GraphObject.

risposta

15

finalmente riuscito a ottenere tutto il necessario con il Facebook SDK 3.0 utilizzando la seguente:

Bundle params = new Bundle(); 
params.putString("caption", "caption"); 
params.putString("message", "message"); 
params.putString("link", "link_url"); 
params.putString("picture", "picture_url"); 

Request request = new Request(Session.getActiveSession(), "me/feed", params, HttpMethod.POST); 
request.setCallback(new Request.Callback() { 
    @Override 
    public void onCompleted(Response response) { 
     if (response.getError() == null) { 
      // Tell the user success! 
     } 
    } 
}); 
request.executeAsync(); 
+0

Ho la stessa domanda. Usare una richiesta "vanilla" invece di usare un newPostRequest (.. openGraphObject ..) mi sembra un po 'brute-force anche a me, ma più guardo e più arrivo alla conclusione che la maggior parte delle persone fa solo ciò che hai scritto sopra. – JRun

+0

fornisce errore di compilazione: La richiesta di costruzione (Session, String, Bundle, HttpMethod) non è definita – kgandroid

+0

Non è più possibile accedere alla classe Request. Lo hanno inserito in un pacchetto privato ora. – rafid059

4

ho fatto utilizzando questo metodo. Verifica se questo può essere d'aiuto o meno.

public static void publishFeedDialog(final Activity current, final String title, 
     final String caption, final String description, final String link, 
     final String pictureUrl) { 
    // start Facebook Login 
    Session.openActiveSession(current, true, new Session.StatusCallback() { 

     // callback when session changes state 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      if (session.isOpened()) { 
       Bundle params = new Bundle(); 
       params.putString("name", title); 
       params.putString("caption", caption); 
       params.putString("description", description); 
       params.putString("link", link); 
       params.putString("picture", pictureUrl); 

       WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(
         current, Session.getActiveSession(), params)) 
         .setOnCompleteListener(new OnCompleteListener() { 

          @Override 
          public void onComplete(Bundle values, 
            FacebookException error) { 
           if (error == null) { 
            // When the story is posted, echo the 
            // success 
            // and the post Id. 
            final String postId = values 
              .getString("post_id"); 
            if (postId != null) { 
             ToastHelper.MakeShortText("Posted"); 
            } else { 
             // User clicked the Cancel button 
             ToastHelper 
               .MakeShortText("Publish cancelled"); 
            } 
           } else if (error instanceof FacebookOperationCanceledException) { 
            // User clicked the "x" button 
            ToastHelper 
              .MakeShortText("Publish cancelled"); 
           } else { 
            // Generic, ex: network error 
            ToastHelper 
              .MakeShortText("Error posting story"); 
           } 
          } 

         }).build(); 
       feedDialog.show(); 
      } 
     } 
    }); 
1

Per condividere la pagina o un link

Bundle params = new Bundle(); 
params.putString("link", "link_url"); 


Request request = new Request(Session.getActiveSession(), "me/feed", params, HttpMethod.POST); 
request.setCallback(new Request.Callback() { 
    @Override 
    public void onCompleted(Response response) { 
     if (response.getError() == null) { 
      // Tell the user success! 
     } 
    } 
}); 
request.executeAsync(); 

Per più parametri Post Vedi me/feed on developer.facebook.com