Facebook Login CallbackManager FacebookCallback çağrılmadı mı?

  • LoginButton ile giriş yapmaya çalışıyorum ancak giriş geri aramaları çağrılmıyor. (LoginButton bir Fragment içinde).
  • FacebookSdk.sdkInitialize, Uygulama onCreate uygulamasında çağrılır
  • Oturum açma işlemi tamamlandıktan sonra hiçbir Geri Çağrı aranmaz. İşte Kod:

Aktivite:

public class FrameActivity extends BaseActivity {

 public static CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
// FacebookSdk.sdkInitialize is called in the Application onCreate

callbackManager = CallbackManager.Factory.create();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);

}
}

Fragment:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   //Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_login, container, false);
    LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setReadPermissions("user_friends");
    loginButton.setReadPermissions("public_profile");
    loginButton.setReadPermissions("email");
    loginButton.setReadPermissions("user_birthday");
   //If using in a fragment
    loginButton.setFragment(this);
   //Other app specific specialization

   //Callback registration
    loginButton.registerCallback(FrameActivity.callbackManager, new FacebookCallback() {
        @Override
        public void onSuccess(LoginResult loginResult) {


}
        @Override
        public void onCancel() {
           //App code

        }

        @Override
        public void onError(FacebookException exception) {
           //App code

        }
    });
    return view;
}
28
Faaliyetinizde FacebookSdk.sdkInitialize() işlemini başlatıp deneyebilirsiniz. Ve Giriş Yapın onSuccess (), onCancel (), onError() yöntemleri
katma yazar Raghu Rami Reddy, kaynak
facebook giriş kodunu fragman ile gönderebilir misin ... eğer çalışıyorsa yukarıdaki gibi facebook giriş yapamıyorum
katma yazar TheGreat004, kaynak
FacebookBTN.setFragment eksikti (bu); her şeyin çalışması için, bunu parçalar için yapmanız gerektiğini unuttum
katma yazar Odaym, kaynak
bu yanıtı benim için çalıştığını deneyin stackoverflow.com/a/38158506/4685534
katma yazar parvez rafi, kaynak
Hayır, onunla da çalışmıyor. Lütfen yardım et. Evet Günlükleri koydum ve hata ayıklama noktaları yerleştirdim (buraya yapıştırılan koddan kaldırıldı)
katma yazar Muhammad Sadiq Alvi, kaynak

7 cevap

Bunu dene:

  1. Incode FacebookSdk.sdkInitialize() parçasının onCreateView().

  2. bölümüne
  3. Sonraki satır init callbackManager = CallbackManager.Factory.create() ;

  4. Fragment sınıfındaki onActivityResult() öğesini uygulayın.

  5. callbackManager.onActivityResult sunucunuzu ekleyin (requestCode, resultCode, data); onActivityResult().

  6. parçasında

FacebookInit() ve callbackManager etkinliklerini kaldırdığınızdan emin olun.

49
katma
Teşekkürler ! Günümü kurtardın. Bu kod da çalıştı
katma yazar thiagolsilva, kaynak
bu kodu uyguluyorum ancak beni gösteremiyor ... fb oturum açtıktan sonra LoginManager ile birlikte "publish_actions" izni eklemek istiyorum
katma yazar Dhruv Raval, kaynak
Peki, FacebookCallback kullanmadan loginResult'u nasıl alabilirim?
katma yazar Zin Win Htet, kaynak
Unutmayın ki Fragment'te logInWithReadPermissions (.., ..) kullanıyorsanız, getActivity() yerine ilk parametre olarak (bu) iletin, çünkü biri diğer etkinliği Fragment alır.
katma yazar nikolaDev, kaynak
Parçadan çağırıyorsanız, Aktivite parçasının da onActivityResult() içinde super.onActivityResult() öğesini çağırdığından emin olun. Bu benim sorunumdu.
katma yazar mco, kaynak
CallbackManager.onActivityResult (requestCode, resultCode, data) ekleme; onActivityResult parçasında. benim için çalıştı. Çok teşekkürler .
katma yazar Muhammad Sadiq Alvi, kaynak

daha eski sürümler için:

yöntemi aşağıdaki gibi değiştirin:

 @Override
 public void onActivityResult(int requestCode, int resultCode, Intent data)
 {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK)
    {

        com.facebook.Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }
    else
    {
        com.facebook.Session.getActiveSession().closeAndClearTokenInformation();
    }

}

GÜNCELLEME: v2.3 için buradaki :

Geri aramayı etkinliğinize veya parçanızın onCreate() yöntemine ekleyin:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());

callbackManager = CallbackManager.Factory.create();

LoginManager.getInstance().registerCallback(callbackManager,
        new FacebookCallback() {
            @Override
            public void onSuccess(LoginResult loginResult) {
               //App code
            }

            @Override
            public void onCancel() {
                //App code
            }

            @Override
            public void onError(FacebookException exception) {
                //App code   
            }
});
}

Giriş başarılı olursa, LoginResult parametresi yeni AccessToken ve en son verilen veya reddedilen izinlere sahiptir.

Giriş yapabilmek için bir registerCallback'e ihtiyacınız yok, geçerli erişim belirteci değişikliklerini aşağıda açıklanan AccessTokenTracker sınıfıyla izlemeyi seçebilirsiniz.

Ardından onActivityResult() 'da giriş sonuçlarını onCreate() ' da oluşturulan callbackManager 'a gönderin:

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

FacebookSDK Giriş Yap veya Paylaş ile birleştirdiğiniz her etkinlik ve parça, onActivityResult öğesini callbackManager'a iletmelidir.

10
katma
@ user3450413 LoginManager.getInstance (). registerCallback'i kullanmam gerekmediğini söylüyorsunuz, çünkü geri arama yöneticisini onActivityResult içindeki callbackManager.onActivityResult (requestCode, resultCode, data);
katma yazar Ashraf Alshahawy, kaynak
com.facebook.Session sınıfı son sdk'de değil (maven remote repository- Android Studio kullanıyorum)
katma yazar Muhammad Sadiq Alvi, kaynak
Facebook sdk belgelerini okuyordum ve şunu öğrendim: Session Removed - AccessToken, LoginManager ve CallbackManager sınıfları, Session sınıfındaki işlevselliği üst üste getiriyor ve onun yerine geçiyor. LoginManager veya CallbackManager ile yapmak istiyorum. Telkl lütfen beni son şartname ile nasıl yapabilirim
katma yazar Muhammad Sadiq Alvi, kaynak
Giriş yapmak için geri arama yöneticisi kaydetmediniz. güncellenmiş cevabı gör
katma yazar user4670319, kaynak
şu anda bunu kullanıyorum. bu benim için çalışan bir kod.
katma yazar user4670319, kaynak
loginButton.setFragment(this); 

Bu çizgi zaten soruda. Ama bunu sadece bakacak diğer geliştiriciler için yazmak istedim.

Bir parçada FB giriş düğmesini kullanıyorsanız, bunu onCreateView yönteminize eklediğinizden emin olun. Bu, etkinliğinize gitmek yerine geri aramanın Fragment'e gitmesini sağlar.

9
katma
@pickle_inspector Yardım ettiğine sevindim. Bu kod satırını gözden geçirdim ve neler olduğunu anlamak için saatler harcamak zorunda kaldım.
katma yazar Prakash, kaynak
Beni doğru yöne çevirdiğin için çok teşekkür ederim! Giriş yaptıktan sonra fb giriş iletişim kutusunun kapanmayacağı konusunda bir sorunum vardı. Saatlerdir bunu anlamaya çalışıyorum. Görünen o ki, tıklandığında kendi diyalog penceresini açan fb LoginButton'u kullanıyorum ve ayrıca farklı bir diyalog penceresi açıyordum. Yorumunuz, fb LoginButton programının aslında kendi yerleşik int mantığının olduğunu anlamamı sağladı.
katma yazar pickle_inspector, kaynak
Günümü kurtardın dostum. Bunu takdir ettim! Teşekkür ederim.
katma yazar deinier, kaynak

Ayrıca, iki farklı işlem için iki geri arama yöneticiniz varsa (oturum açma ve paylaşma gibi), ActivityResult'u alan ilk sunucunun ikincisinin geri aramasını alabileceğini ve bunun tersinin de olabileceğini unutmayın. Bu davranış aynı zamanda geri aramanızın çağrılmamasını da sağlayabilir.

2
katma

Bu benim için çalıştı

Geri arama yöneticisini başlat

CallbackManager sCallbackManager = CallbackManager.Factory.create();

Geri aramayı kaydetmek için yöntem oluşturun

private void configureFacebookAppInviteCallBack(){

    AppInviteDialog appInviteDialog = new AppInviteDialog(InviteHomeFragment.this);
                        appInviteDialog.registerCallback(sCallbackManager,
                                new FacebookCallback() {
                                    @Override
                                    public void onSuccess(AppInviteDialog.Result result) {
                                        Log.d("rht", "Invitation Sent Successfully");
                                        CommonUtils.getInstance().showToast("50");
                                    }

                                    @Override
                                    public void onCancel() {
                                        Log.d("rht", "Error Occured in facebook invite ");
                                    }

                                    @Override
                                    public void onError(FacebookException e) {
                                        if(e!=null) {
                                            Log.d("rht", "Error Occured in facebook invite ");
                                        }else{
                                            Log.d("rht", "Error Occured in facebook invite");
                                        }
                                    }
                                });


}

onActivityResult uygulayın.

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.v("rht", "onActivityResult called requestCode "+requestCode+" resultCode "+resultCode);

        sCallbackManager.onActivityResult(requestCode, resultCode, data);
    }
1
katma

Facebook API kullanarak yanlış anladığımı anlamak için ~ 3 saat harcadım.

    void someInitCode() {
        callbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        callAPI();
                    }
                    @Override
                    public void onCancel() {
                    }

                    @Override
                    public void onError(FacebookException exception) {
                    }

                });

}
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (AccessToken.getCurrentAccessToken() != null) callAPI();
            else callbackManager.onActivityResult(requestCode, resultCode, data);
        } else {
            Log.d("hole", "not ok");
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

Orijinal çağrı, onSuccess() kodunu ayrı ayrı callAPI() işlevine koymadı, bu nedenle zaten giriş başarılı olsa bile API hiçbir zaman çağrı yapmıyor. Bunun nedeni, giriş yapmak ve tekrar giriş yapmak onSuccess() !

Bulduğum geçici çözüm, erişim belirtecini kontrol et ve çağrıyı onSuccess() ve onActivityResult() 'da callAPI() ' ya ayır.

0
katma

Fragment içinde bu önemliyse loginButton.setFragment (this);

0
katma