2013-06-18 113 views
3

我的應用使用應用FB AuthButton。如果設備上沒有安裝FB應用程序,則用戶轉到瀏覽器的m.facebook並登錄。如果安裝了當前的FB應用程序,則fb自定義URL(fbconnect)允許用戶使用FB應用程序登錄。檢測Facebook APK的安裝版本

較早版本的FB應用程序無法識別自定義URL並將它踢到瀏覽器。 (此問題:Facebook SDK 3.0 with old Facebook app version redirects to browser and gets stuck

如何檢查設備上安裝的FB應用程序版本?如果我可以做到這一點,那麼我將發送給瀏覽器或使用webdialoug的舊版FB應用程序。

最近我發現將使用getPackageManager()。getApplicationInfo(「com.example.name」,0) 但我不確定我是否可以得到它返回apk版本。

+0

的可能重複[舊的Facebook應用程序版本的Facebook SDK 3.0重定向到瀏覽器和卡] (http://stackoverflow.com/questions/17131868/facebook-sdk-3-0-with-old-facebook-app-version-redirects-to-browser-and-gets-stu) – thepoosh

回答

3
context.getPackageManager().getPackageInfo(packageName, 
    PackageManager.GET_SIGNATURES).versionCode 

確實返回facebook版本代碼(與版本名稱不同)。經過一番深入研究,我們發現Facebook 1.9.8+版本可用,版本代碼版本號爲40477+。

由於我們使用的已棄用的Facebook.java類,我們修改了validateAppSignatureForPackage(),它似乎工作!

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; 
} 

如果你想這個測試自己,你可以找到Facebook的應用程序在此之前的版本: http://www.androiddrawer.com/2274/download-facebook-for-android-1-9-7-app-apk/#.Uctn6Zwaux4

+2

如果你不使用特定的'Facebook.java',那麼你應該修改'NativeProtocol.java'中的'validateSignature'方法。 –

相關問題