2015-04-10 12 views
9

per la mia app per Android Ho implementato un pulsante che consente all'utente di condividere il risultato di un gioco.Android Facebook API e ShareLinkContent

Ho integrato l'SDK di Facebook, quindi tutte le classi sono note al mio progetto. Il manifesto contiene i seguenti tag:

<meta-data android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/app_id" /> 

    <provider android:authorities="com.facebook.app.FacebookContentProvider16..." 
     android:name="com.facebook.FacebookContentProvider" 
     android:exported="true"/> 

Quando eseguo l'applicazione posso condividere il risultato della partita con il codice qui sotto.

public void onShareResult(View view){ 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
    final ShareDialog shareDialog = new ShareDialog(this); 

    shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 

     @Override 
     public void onSuccess(Sharer.Result result) { 
      Log.d(LOG_TAG, "success"); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      Log.d(LOG_TAG, "error"); 
     } 

     @Override 
     public void onCancel() { 
      Log.d(LOG_TAG, "cancel"); 
     } 
    }); 


    if (shareDialog.canShow(ShareLinkContent.class)) { 

     ShareLinkContent linkContent = new ShareLinkContent.Builder() 
       .setContentTitle("Game Result Highscore") 
       .setContentDescription("My new highscore is " + sum.getText() + "!!") 
       .setContentUrl(Uri.parse("https://play.google.com/store/apps/details?id=de.ginkoboy.flashcards")) 

       //.setImageUrl(Uri.parse("android.resource://de.ginkoboy.flashcards/" + R.drawable.logo_flashcards_pro)) 
       .setImageUrl(Uri.parse("http://bagpiper-andy.de/bilder/dudelsack%20app.png")) 
       .build(); 

     shareDialog.show(linkContent); 
    } 


} 

Tuttavia ci sono alcune cose che non capisco.

  • Il collegamento condiviso è diverso da quello che vedo nella finestra di dialogo prima della pubblicazione.
  • Le immagini sembrano essere state disponibili via internet. Ad esempio, non è possibile impostare un'immagine di una risorsa dal mio progetto.

Inoltre, ho qualche problema a capire cosa richiede Facebook.

Questo è il modo in Facebook mostra il mio messaggio:

This is how Facebook displays my posting:

Ed è così che la mia app sembra di inviare il contenuto

And this is how my App seem to post the content

Quindi la domanda è: Dove è il mio titolo e la descrizione è andata ???

migliori saluti

Oliver

+0

Puoi guardare questo esempio con facebook sdk share https://github.com/oliguo/android-facebook – mustafasevgi

+0

Hey @mustafasevgi, grazie per queste informazioni.Tuttavia, sembra che questo esempio riguardi solo l'accesso ai contenuti di Facebook che non creano contenuti. –

+0

per favore controlla la mia risposta. – mustafasevgi

risposta

0

facebook sdk 3.X con uso questo code.You possono utilizzare WebDialog.

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

import com.facebook.FacebookException; 
import com.facebook.FacebookOperationCanceledException; 
import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.model.GraphUser; 
import com.facebook.widget.WebDialog; 
import com.facebook.widget.WebDialog.OnCompleteListener; 

public class FaceShare extends Activity { 

    String link = "", id = "", pic = "", title = ""; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent i = getIntent(); 
     Bundle b = i.getExtras(); 

     // link = b.getString("link"); 
     // id = b.getString("id"); 
     // pic = b.getString("pic"); 
     // title = b.getString("title"); 

     try { 

     // start Facebook Login 
     Session.openActiveSession(this, true, new Session.StatusCallback() { 

      @Override 
      public void call(Session session, SessionState state, Exception exception) { 
       if (session.isOpened()) { 

        // make request to the /me API 
        Request.newMeRequest(session, new Request.GraphUserCallback() { 

        @Override 
        public void onCompleted(GraphUser user, Response response) { 

        } 

        // callback after Graph API response with user object 
        }).executeAsync(); 

        publishFeedDialog(title, "title", "caption", link, pic); 
       } 
      } 

      // callback when session changes state 
     }); 
     } 
     catch (Exception e) { 
     Log.e("FACE", e.toString()); 
     finish(); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
    } 

    private void publishFeedDialog(String name, String caption, String description, String link, String urlPicture) { 
     Bundle params = new Bundle(); 
     // params.putString("name", name); 
     // params.putString("caption", caption); 
     // params.putString("description", description); 
     // params.putString("link", link); 
     // params.putString("picture", urlPicture); 
     params.putString("name", "name"); 
     params.putString("caption", "caption"); 
     params.putString("description", "description"); 
     params.putString("link", "https://s-media-cache-ak0.pinimg.com/236x/1b/2b/19/1b2b19519b1b3439f783181026d9872b.jpg"); 
     params.putString("picture", "https://s-media-cache-ak0.pinimg.com/236x/1b/2b/19/1b2b19519b1b3439f783181026d9872b.jpg"); 

     Session session = Session.getActiveSession(); 

     WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(FaceShare.this, session, params)).setOnCompleteListener(new OnCompleteListener() { 
     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) { 
        Toast.makeText(getApplicationContext(), "Shared.", Toast.LENGTH_LONG).show(); 
        finish(); 
       } 
       else { 
        finish(); 
       } 
      } 
      else if (error instanceof FacebookOperationCanceledException) { 
       finish(); 
      } 
      else { 
       Toast.makeText(getApplicationContext(), 
           "error occured, try again", 
           Toast.LENGTH_LONG).show(); 
       finish(); 
      } 
     } 

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

} 
7

Quindi, ho scoperto il motivo per cui il mio titolo e la descrizione non erano visibili in Facebook.

Prima di tutto grazie @mustafasevgi ma la soluzione si riferisce alla SDK 3.5.x in cui ho cercato di utilizzare SDK 4.0

Tornando alla soluzione ...

ho scoperto che ho impostato il mio contenuto URL alla mia app all'interno del Google Play Store. Se imposti un URL di contenuto al di fuori di Google Play Store, il titolo e la descrizione non verranno sovrascritti.

+0

Che cosa intendi con "URL del contenuto della mia app nel Google Play Store"? – Satyam

+0

@Satyam: ho impostato il titolo del contenuto, la descrizione del contenuto e l'url del contenuto 'ShareLinkContent linkContent = new ShareLinkContent.Builder() .setContentTitle (" Risultato finale del gioco ") . SetContentDescription (" Il mio nuovo record è "+ somma. getText() + "!!") .setContentUrl (Uri.parse ("https://play.google.com/store/apps/details?id=de.ginkoboy.flashcards")) " –

+0

il frammento di cui sopra in la risposta è la stessa della domanda giusto? Non trovo nessuna risposta a questo problema. Potresti per favore aiutarmi a – iappmaker

0

ho usato sistema WebDialog ma ho questo messaggio:

Impossibile utilizzare SessionLoginBehavior SSO_WITH_FALLBACK quando com.facebook.LoginActivity non è dichiarato come un'attività in AndroidManifest.xml

Qualcuno sa perché?

+0

Hai dichiarato questa attività nel tuo AndroidManifest? Qualcosa come '

+0

Secondo [Riferimento di LoginActivity] (https://developers.facebook.com/docs/reference/android/ 3.0/class/LoginActivity /) è necessario dichiarare LoginActivity nel file manifest: ' ' –