检测安装了哪个版本的Facebook apk

时间:2013-06-18 11:02:03

标签: android facebook sdk

我的应用程序使用应用程序FB AuthButton。如果设备上没有安装FB应用程序,则用户在浏览器上转到m.facebook并登录。如果安装了当前的FB应用程序,则fb自定义URL(fbconnect)允许用户使用FB应用程序登录。

较早版本的FB应用无法识别自定义网址并将其踢到浏览器。 (这个问题:Facebook SDK 3.0 with old Facebook app version redirects to browser and gets stuck

如何查看设备上安装的FB应用程序版本?如果我可以这样做,那么对于旧版本的FB应用程序,我将发送到浏览器或使用webdialoug。

我发现最接近的是使用getPackageManager()。getApplicationInfo(“com.example.name”,0) 但我不确定我是否可以让它返回apk版。

1 个答案:

答案 0 :(得分: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 app: http://www.androiddrawer.com/2274/download-facebook-for-android-1-9-7-app-apk/#.Uctn6Zwaux4