2015-05-04 20 views
9

Korzystam z poniższego kodu, aby udostępnić łącze na Facebooku. kiedy użytkownik kliknie anuluj w interfejsie dialogowym Udostępnij, metoda wywołania zwrotnego onSuccess() jest wywoływana czasami zamiast onCancel(). I otrzymuję post id null. Proszę mi pomóc, co jest nie tak?Android Facebook SDK 4.0.0 Współdzielenie wywołania nie działa poprawnie

ShareButton btn; 
CallbackManager callbackManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(this); 
    callbackManager = CallbackManager.Factory.create(); 
    setContentView(R.layout.activity_share); 

    btn = (ShareButton) findViewById(R.id.btn_share); 

    btn.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 
     @Override 
     public void onSuccess(Sharer.Result result) { 
      Log.e("Tag","Successfully posted"); 
      Log.e("Post id",result.getPostId()); 
     } 

     @Override 
     public void onCancel() { 

      Log.e("Tag","Canceled by user"); 

     } 

     @Override 
     public void onError(FacebookException error) { 

      Log.e("Tag",error.getLocalizedMessage()); 
     } 
    }); 
    ShareLinkContent content = new ShareLinkContent.Builder() 
      .setContentUrl(Uri.parse("My Custom URL")) 
      .setContentTitle("Test") 
      .build(); 

    btn.setShareContent(content); 

} 

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

Mam podobne problemy. Czy byłeś w stanie to rozwiązać? – cjserio

+0

Mam również do czynienia z tym samym problemem. – Shankar

+0

Mam również ten sam problem i nie mogę znaleźć rozwiązania w dowolnym miejscu. Wygląda jak błąd w Facebook SDK na Androida lub czegoś brakuje w dokumentacji. –

Odpowiedz

3

Cóż, może jestem spóźniony, ale miałem do czynienia z tym samym problemem kilka tygodni temu. Zauważyłem, że jeśli w oknie dialogowym udostępniania w sieci zostanie naciśnięty przycisk Anuluj, wywoływana jest metoda onSuccess(), ale obiekt Share.Result zawiera zerowy postID, więc można kontrolować, gdy użytkownik naciśnie przycisk anuluj lub udostępnij, sprawdzając odpowiedź Share.Result.

Inną rzeczą, którą zauważyłem jest to, że jeśli udostępniasz treści z zainstalowaną natywną aplikacją, pole postID ma zawsze wartość null ... musisz więc sprawdzić, czy użytkownik ma zainstalowaną aplikację, aby sprawdzić pole postID.

+0

Próbowałem użyć 'PostID ', aby zidentyfikować działanie po akcji, ale jak powiedziałeś, gdy natywna aplikacja jest zainstalowana,' PostId' jest zawsze puste. Czy masz jakieś rozwiązanie do wykrycia anulowania w tym scenariuszu? – agarwaen

+0

Sprawdź, czy użytkownik ma zainstalowany pakiet Facebooka, aby wykonać jedną lub inną logikę. – ablanco

+0

To rozwiązanie nie powiedzie się, gdy użytkownik zainstaluje aplikację macierzystą Facebooka i anuluje udostępnianie, klikając przycisk strzałki wstecz w lewym górnym rogu okna dialogowego, w tym przypadku ponownie wywoływana jest opcja SUKCJA, przy czym postID ma wartość null. – NecipAllef

Powiązane problemy