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

标签 android facebook sdk

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

FB 应用程序的旧版本无法识别自定义 URL 并将其踢到浏览器。 (本题:Facebook SDK 3.0 with old Facebook app version redirects to browser and gets stuck)

如何查看设备上安装的 FB 应用程序版本?如果我能做到这一点,那么对于旧版本的 FB 应用程序,我将发送到浏览器或使用网络对话。

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

最佳答案

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

关于android - 检测安装了哪个版本的 Facebook apk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17167228/

相关文章:

java - 图像未通过位图从我的画廊上传

php - Facebook 登录和重定向

ruby-on-rails - 自动化 facebook/twitter 帖子

android - onSaveInstanceState 不能保存静态变量?

android - 如何修改 android 默认键盘上的键(图像或标签)

android - 如何从 R.raw 资源获取 java.io.File

ios - FBSDKLikeControl 变灰/禁用

ios - SPTYourMusic 请求后,包含 SPTListPage 的响应中的项目为零

android - AdMob + startapp 在 android 中?

c++ - POS 终端应用程序开发 - SDK、编程语言、模式、IDE