2013-06-16 8 views
5

Ho nella mia app un FB AuthButton che sta facendo la connessione al processo FB
Ho un dispositivo che esegue una vecchia versione dell'app FB (versione 1.8.3 - 1.8.4).Facebook SDK 3.0 con la vecchia versione dell'app Facebook reindirizza al browser e si blocca

quando faccio clic sul pulsante di accesso, il processo non avvia l'app nativa, ma chiama il browser per completare il processo.
Nei registri, vedo quei tronchi:

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. 

e sullo schermo, il browser mostra questo screenshot:

FB wtf?!

qualche idea su come risolvere questo o ridirect di nuovo al mio app ?

+0

[3] Opzione (http://stackoverflow.com/a/16970648/2405196) in questo post è implementato da 'WebDialog' al posto del pulsante di autenticazione FB. – Mihir

+0

Lo so, ma non voglio forzare i miei utenti ad andare in una finestra di dialogo web a meno che non ci sia altro modo. poiché in questo caso, l'utente _ha installato l'app, (non è appena aggiornato), e non ho modo di scoprire la versione della sua app di Facebook e nessun controllo sulla procedura di accesso, come posso risolvere il problema? – thepoosh

+0

L'SDK non dovrebbe uscire sul browser Android. Qual è l'URL nel browser prima di reindirizzare a fbconnect: // url? –

risposta

5

Abbiamo trovato che la versione di Facebook 1.9.8+ funziona, che è il codice di versione codice versione 40477+.

Poiché stiamo utilizzando la deprecata classe Facebook.java, abbiamo modificato validateAppSignatureForPackage(). Sembra funzionare ora per tutte le versioni dell'app 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; 
} 

Se si desidera verificare da soli, è possibile trovare le versioni precedenti dell'app facebook qui: http://www.androiddrawer.com/2274/download-facebook-for-android-1-9-7-app-apk/#.Uctn6Zwaux4

+0

grazie per la risposta, proveremo più tardi su – thepoosh

+0

cosa fai dopo aver notato che la versione che hai non è compatibile con l'SDK? – thepoosh

+0

validateAppSignatureForPackage() restituisce un valore booleano che indica se è installata una versione valida dell'app Facebook. Semplicemente restituendo false, il sdk non tenta di utilizzare l'app di Facebook e utilizza invece FBDialog.java. Questa è la correzione che abbiamo fatto. Spero che risponda alla tua domanda. – cowlinator