2013-06-16 15 views
5

Mam w mojej aplikacji przycisk AUTBButton FB, który wykonuje połączenie z procesem FB
Mam urządzenie, na którym działa stara wersja aplikacji FB (wersja 1.8.3 - 1.8.4).Facebook SDK 3.0 ze starą wersją aplikacji Facebook przekierowuje do przeglądarki i utknął

Po kliknięciu przycisku logowania proces nie uruchamia natywnej aplikacji, ale wywołuje przeglądarkę, aby zakończyć proces.
w dziennikach, widzę te kłody:

06-16 12:26:00.709: E/ActivityThread(21597): Failed to find provider info for com.facebook.katana.provider.AttributionIdProvider 
06-16 12:26:03.321: E/Tab(21678): onReceivedError -10 fbconnect://success#access_token=MY_TOKEN&expires_in=5170432 The protocol is not supported. 

i na ekranie, przeglądarka pokazuje ten zrzut ekranu:

FB wtf?!

wszelkie myśli o tym, jak to naprawić lub ridirect z powrotem do mojego app ?

+0

[3-ty] (http://stackoverflow.com/a/16970648/2405196) w opcji ten wpis to 'WebDialog' implementuj zamiast przycisku auth FB. – Mihir

+0

Wiem, ale nie chcę zmuszać moich użytkowników do przejścia do dialogu w sieci, chyba że nie ma innego sposobu. ponieważ w tym przypadku użytkownik jest zainstalowany, (nie jest aktualizowany) i nie mam możliwości sprawdzenia wersji jego aplikacji na Facebooku, ani kontroli nad procesem logowania, jak mogę to naprawić? – thepoosh

+0

Zestaw SDK nie powinien wychodzić do przeglądarki Android. Jaki jest adres URL przeglądarki przed przekierowaniem do adresu fbconnect: // url? –

Odpowiedz

5

Stwierdziliśmy, że działa wersja Facebook 1.9.8+, która jest wersją kodu w wersji kodu 40477+.

Podczas korzystania z wycofanej klasy Facebook.java zmieniliśmy validateAppSignatureForPackage(). Wydaje się, że działa teraz dla wszystkich wersji aplikacji Facebook.

private boolean validateAppSignatureForPackage(Context context, String packageName) 
{ 
    PackageInfo packageInfo; 
    try 
    { 
     packageInfo = context.getPackageManager().getPackageInfo(packageName, 
         PackageManager.GET_SIGNATURES); 
     if(packageInfo.versionCode<40477) 
     { 
      Log.i("validateAppSignatureForPackage", 
       "Your facebook app version is prior to 1.9.8. Update your facebook app"); 
      return false; 
     } 
    } 
    catch (NameNotFoundException e) 
    { 
     Log.i("validateAppSignatureForPackage", e.getMessage()); 
     return false; 
    } 
    catch(Exception e) 
    { 
     Log.i("validateAppSignatureForPackage", e.getMessage()); 
     return false; 
    } 

    for (Signature signature : packageInfo.signatures) { 
     if (signature.toCharsString().equals(FB_APP_SIGNATURE)) { 
      return true; 
     } 
    } 
    return false; 
} 

Jeśli chcesz przetestować to samemu, można znaleźć poprzednie wersje aplikacji facebook tutaj: http://www.androiddrawer.com/2274/download-facebook-for-android-1-9-7-app-apk/#.Uctn6Zwaux4

+0

dziękuję za odpowiedź, spróbuję później na – thepoosh

+0

co zrobisz po zauważeniu, że posiadana wersja jest niezgodna z SDK? – thepoosh

+0

validateAppSignatureForPackage() zwraca wartość boolean, która określa, czy zainstalowana jest poprawna wersja aplikacji Facebook. Po prostu zwracając wartość false, sdk nie próbuje używać aplikacji Facebook i zamiast tego używa FBDialog.java. To jest poprawka, którą zrobiliśmy. Mam nadzieję, że to odpowie na twoje pytanie. – cowlinator