Soru Android Facebook SDK'da zaten yetkilendirilmekten nasıl kaçınılmalı


Facebook'un Android SDK'sı için Tek Oturum açmayı kullandığımda tamamen işe yaramaz bir sayfa alıyorum.

"Zaten yetki verdiniz happyapp.   Devam etmek için "Tamam" a basın.

Bu sayfa kullanıcı deneyimini yok ederdi. Nasıl oluyor da ondan kurtuldum. Birçok insan bunu görüyordu, ancak hiçbir çözüm yollanmadı.

Facebook bile bunun bir problem olduğunu kabul ediyor, bkz: http://forum.developers.facebook.net/viewtopic.php?id=84548

Herhangi bir iş var mı?


31
2017-12-21 02:39


Menşei


Bağlantı şimdi öldü. - amalBit
internet hareket eder - hunterp
evet öyle .. Ve internetin içindeki her şey hareket etmeli .. sorunuzu da dahil .. - amalBit
Aynı sorunu yaşadım ve cihazda yerel FB uygulaması yüklü değilse, FB'ye her gönderimimde 'zaten yetkilendirilmiş' penceresi görünür ve yerel FB uygulamasını yükleyerek çözülür. - Mandeep Pasbola


Cevaplar:


Yaptığım yol (ek OAuth çözümü olmadan), erişim belirtecini Kieveli'nin önerdiği gibi tercihlerde saklamaktı. Ana etkinlik başladığında, tercihler arasından belirteci arayın, eğer yoksa, yetkilendirme işlemini başlatır ve sonuçta ortaya çıkan belirteci saklar.

Daha zor kısım, jetonun sona ermesini veya uygulamanızın yetkisini kaldırmasını sağlamaktır (yani, jeton tercihleri ​​içindedir, ancak artık geçerli değildir).

Bu durumda, her FB API / grafik çağrısı ile kimlik doğrulama başarısız gösteren bir istisna için kontrol edin. Başarısız olursa, yetki / jeton saklama prosedürünü tekrar başlatınız.


11
2018-02-18 21:04



Bu yüzden yine onaylanmış bir iletişim kutusu olacak, bu yüzden bu çözüm olmazsa ... bu Facebook'u kendi taraflarında düzeltmeli ... - Renetik


öneriyi kullanarak, bu benim için çalışan koddur, umarım birilerine yardım eder

giriş yapmadan önce bunu yap

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this); 
                        String access_token = prefs.getString("access_token", null); 
                        Long expires = prefs.getLong("access_expires", -1);


                        if (access_token != null && expires != -1)
                        {
                            facebook.setAccessToken(access_token);
                            facebook.setAccessExpires(expires);
                        }


                        if (!facebook.isSessionValid())
                        {
                            facebook.authorize(FacebookLogin.this, new DialogListener() {
...

başarıyla giriş yaptıktan sonra bunu yapın

String token = facebook.getAccessToken();
long token_expires = facebook.getAccessExpires();

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this);

prefs.edit().putLong("access_expires", token_expires).commit();

prefs.edit().putString("access_token", token).commit();

5
2018-04-15 14:23



Sanırım sorunun cevabını kaçırdınız. Gönderdiğiniz kod, verilen FB erişim belirteci hala geçerli iken (~ 48 saat) iyi çalışır, ancak nokta bundan sonra gerçekleşir. Bu durumda, erişim belirteci sona erdikten sonra, başka bir simge almak için Facebook yetkilendirme işlemini yeniden çalıştırmanız gerekir; bu, kullanıcıyı "Zaten yetkilendirilmiş X" iletişim kutusunu yeniden ele almaya zorlar. Bakınız: Kullanıcının onaylaması gerekmeden yeni erişim belirteçlerinin yayınlandığı saf web senaryosuyla. Gerekli olan, yerel uygulamalar için benzer bir işlemdir. - tomtheguvnor
yöntemleri setAccessToken(), setAccessExpires(), getAccessExpires() - kullanımdan kaldırıldı; / - machei


Herhangi bir cihaz facebook'la uygulamanıza yetki verdikten sonra bu soruna girdim. Emülatörüm mükemmel çalışmaya devam etti ancak telefonu "tamam" iletişim ekranını geçmesi ve anlamlı bir şey yapmasını sağlayamadım. Facebook.FORCE_DIALOG_AUTH parametresini authorize () çağrısına ekledim. Artık cihaz başına bir kez giriş yapmam isteniyor ve TOKEN ve son kullanma sürelerini paylaşımlı tercihlere göre ayarlıyor.

Button button_facebook = (Button) findViewById(R.id.button_share_on_facebook);
button_facebook.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        if (access_token != null) {
            facebook.setAccessToken(access_token);
        }

        if (expires != 0) {
            facebook.setAccessExpires(expires);
        }

        if (!facebook.isSessionValid()) {
            facebook.authorize(YourActivity.this, new String[] { "user_photos,publish_checkins,publish_actions,publish_stream" }, facebook.FORCE_DIALOG_AUTH, new DialogListener() {
                @Override
                public void onComplete(Bundle values) {
                    SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("access_token", facebook.getAccessToken());
                    editor.putLong("access_expires", facebook.getAccessExpires());
                    editor.commit();
                    postSomethingToFacebook();
                }

                @Override
                public void onFacebookError(FacebookError e) {
                    Log.e("Facebook-Authorize", "FacebookError Error: " + e.getMessage());
                }

                @Override
                public void onError(DialogError e) {
                    Log.e("Facebook-Authorize", "DialogError Error: "   + e.getMessage());
                }

                @Override
                public void onCancel() {
                    Log.w("Facebook-Authorize", "Cancelled.");
                }
            });
        } else {
            postSomethingToFacebook();
        }
});

1
2017-07-04 15:51





SDK'yı atlayın ve kendi OAuth çözümünüzü kullanın. Edinme işleminden sonra Erişim Simgesini kaydedin. Kullanıcıyı facebook izin sayfasına göndermeden doğrudan kullanmayı deneyin. Jetonun süresi dolduğunda, tekrar izin vermek için onlara ihtiyacınız olacak. Gelişmiş özellikleri ile daha düşük düzeyde sorumluluklar (ve daha fazla iş) gelir.


0
2017-12-30 19:45



Sana inanıyorum. Özellikle OAuth ile tekerleği yeniden icat etmekten korkuyorum. Android + Facebook + OAth için tavsiyeleriniz var mı? - hunterp
Android olmayan bir uygulama için Scribe kullanıyorum. - Kieveli


Cihazınızda FB uygulaması yoksa, safari tarayıcınızda açılır pencere görünür.    FB uygulamasını cihazınıza kurun ve daha önceden yetkilendirilmiş ekran görüntülenmediğinde FB ile giriş yapmayı deneyin. Teşekkür ederim.


0
2017-08-21 09:12



Uygulamam yüklendi, ancak yine de bu sayfayı gösteriyor. - Ccr