2015-04-10 14 views
9

dla mojej aplikacji na Androida Zaimplementowałem przycisk, który pozwala użytkownikowi dzielić wynik gry.Android Facebook API i ShareLinkContent

Mam zintegrowany pakiet SDK Facebooka, więc wszystkie klasy są znane mojemu projektowi. Manifest zawiera następujące tagi:

<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"/> 

Kiedy uruchomić aplikację mogę podzielić wynik meczu z poniższym kodzie.

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); 
    } 


} 

Są jednak rzeczy, których nie rozumiem.

  • Link udostępniony różni się od tego, co widzę w oknie dialogowym, zanim opublikuję.
  • Obrazy wydają się być dostępne przez Internet. Oznacza to, że nie można ustawić obrazu zasobu z mojego projektu.

Ponadto mam problem ze zrozumieniem, czego wymaga Facebook.

ten sposób Facebook wyświetla mój publikacji:

This is how Facebook displays my posting:

I to jest jak mój App zdają się zakładać zawartości

And this is how my App seem to post the content

Więc pytanie brzmi: Gdzie jest mój tytuł i opis minął ???

poważaniem

Oliver

+0

Możesz obejrzeć ten przykład za pomocą facebook sdk share https://github.com/oliguo/android-facebook – mustafasevgi

+0

Hey @mustafasevgi, dzięki za te informacje.Wydaje się jednak, że ten przykład dotyczy tylko dostępu do treści z Facebooka, nie tworzących treści. –

+0

proszę sprawdzić moją odpowiedź. – mustafasevgi

Odpowiedz

0

facebook SDK 3.x z zastosowania tego code.You mogą korzystać 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

Tak, dowiedziałem się, dlaczego mój tytuł i opis nie były widoczne na facebooku.

Przede wszystkim dzięki @mustafasevgi ale rozwiązanie odnosi się do SDK 3.5.x gdzie starałem się używać SDK 4.0

Wracając do rozwiązania ...

I odkryli, że mam ustawić mój adres URL treści do mojej aplikacji w sklepie Google Play. Jeśli skonfigurujesz URL treści poza Sklepem Google Play, tytuł i opis nie zostaną nadpisane.

+0

Co masz na myśli przez "URL treści do mojej aplikacji w Sklepie Google Play"? – Satyam

+0

@Satyam: Ustawiam tytuł zawartości, opis zawartości i URL zawartości 'ShareLinkContent linkContent = new ShareLinkContent.Builder() .setContentTitle (" Wynik wyniku gry ") .setContentDescription (" Mój nowy wynik to "+ suma. getText() + "!!") .setContentUrl (Uri.parse ("https://play.google.com/store/apps/details?id=de.ginkoboy.flashcards")) ' –

+0

powyższy opis w Odpowiedź jest taka sama jak w pytaniu prawym? Nie znajduję żadnej odpowiedzi na ten problem. Czy możesz mi pomóc – iappmaker

0

Użyłem systemu WebDialog ale mam komunikat:

Nie można użyć SessionLoginBehavior SSO_WITH_FALLBACK gdy com.facebook.LoginActivity nie jest zadeklarowana jako działalność w AndroidManifest.xml

Czy ktoś wie dlaczego?

+0

Czy zadeklarowałeś tę aktywność w swoim AndroidManifest? Coś '

+0

Według [Odniesienie LoginActivity] (https://developers.facebook.com/docs/reference/android/ 3.0/class/LoginActivity /) musisz zadeklarować w twoim manifeście LoginActivity: ' ' –

Powiązane problemy