2013-06-18 116 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'方法。 –

相关问题