Facebook登录时应用程序配置错误:Kindle Fire Integration问题

时间:2013-02-01 03:35:48

标签: android facebook kindle-fire

我们在我们的Kindle Fire安卓应用上集成了Facebook登录功能。它在大多数情况下都没有任何问题。但偶尔对某些用户来说,当他们尝试使用facebook登录进行注册时,会失败,并显示错误“APp配置错误,因为Facebook登录”。我们检查了哈希密钥,包名称以及所有这些,它们都是正确的。正如我所说,它适用于95%的用户。对于那些失败的用户,它会反复失败。来自facebook的任何人都可以帮我们解决这个问题吗?赞赏。 (顺便说一句,我们使用相同的Facebook应用程序为Android应用程序的谷歌播放版本也使用不同的哈希键,我们从来没有这个问题为我们的谷歌播放应用程序。我们从亚马逊得到了Kindle的哈希键。)因为它没有在我们的任何设备中失败,并且仅在某些随机用户的设备上失败,我们无法获得任何调试消息。

PS:我已经阅读了帖子App is misconfigured for Facebook login: Android Facebook integration issue。我是新用户,我不能在那里问这个问题。

5 个答案:

答案 0 :(得分:2)

我们在亚马逊appstore上的某个应用程序遇到了同样的问题。在我们的例子中,我们意识到问题只有在这三个条件成立时才会发生:

  • Kindle Fire HD
  • 已安装Facebook应用并已登录用户
  • 用户还通过设置登录Facebook - >我的帐户 - >管理社交帐户

这可以解释为什么在你的情况下它只发生在5%的情况下。

据我们所知,亚马逊取消了.apk,它打破了Facebook Android App Key Hash检查。

所涉及的解决方案:

  1. 获取我们应用的Amazon .apk(不是我们提交的那个,但是亚马逊appstore分发的那个)
  2. 从.apk文件中提取签名证书
  3. Base64编码编码证书的SHA摘要
  4. 将生成的Base64密钥哈希添加到我们的Facebook应用程序设置
  5. 这解决了问题。

    获得.apk证明是棘手的。应用程序驻留在设备文件系统的/ data / app文件夹中。但是,这个目录受到保护以防止列出它,所以除非你知道你正在寻找的文件的名称,否则你运气不好。你当然可以根设备。或者,你可以通过adb pull /data/app/<app-id><suffix>.apk来尝试你的运气,其中后缀是空字符串或-1-2等,直到你成功为止。 E.g:

    $ adb pull /data/app/com.example.game.apk
    remote object '/data/app/com.example.game.apk' does not exist
    $ adb pull /data/app/com.example.game-1.apk
    remote object '/data/app/com.example.game-1.apk' does not exist
    $ adb pull /data/app/com.example.game-2.apk
    3658 KB/s (1085140 bytes in 0.289s)
    

    如果此方法失败,则生根可能是唯一的选择。

    获得.apk文件后,可以使用下面的代码获取密钥哈希值。保存为Main.java,使用javac Main.java进行编译并使用java Main <APK>运行,例如:

    $ javac Main.java
    $ java Main com.example.game-1.apk
    com.example.game-1.apk: 478uEnKQV+fMQT8Dy4AKvHkYibo=
    

    478uEnKQV+fMQT8Dy4AKvHkYibo=添加到我们的Facebook应用设置的关键哈希值,然后解决问题。我很好奇,如果其他人找到我们得到的相同哈希(这意味着所有亚马逊游戏都使用相同的密钥辞职)。在我们的示例中,哈希以wwYPegrz...开头。

    以下是代码:

    import java.security.MessageDigest;
    import java.security.cert.Certificate;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.jar.JarEntry;
    import java.util.jar.JarFile;
    
    import sun.misc.BASE64Encoder;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            for (String jarFilename : args)
                extractHash(jarFilename);
        }
    
        private static void extractHash(String jarFilename) throws Exception {
            BASE64Encoder base64 = new BASE64Encoder();
            MessageDigest sha1 = MessageDigest.getInstance("SHA");
            Set<Certificate> certificates = new HashSet<Certificate>();
            JarFile jarFile = new JarFile(jarFilename);
            for (JarEntry jarEntry : Collections.list(jarFile.entries())) {
                jarFile.getInputStream(jarEntry).skip(Long.MAX_VALUE);
                Certificate[] certs = jarEntry.getCertificates();
                if (certs == null)
                    continue;
                certificates.addAll(Arrays.asList(certs));
            }
            System.out.printf("%s:", jarFilename);
            for (Certificate cert : certificates) {
                byte[] digest = sha1.digest(cert.getEncoded());
                System.out.printf(" %s", base64.encode(digest));
            }
            if (certificates.isEmpty())
                System.out.printf(" NOT SIGNED!");
            System.out.println();
            jarFile.close();
        }
    }
    

答案 1 :(得分:2)

@Blacka的答案在技术上是正确的,但是我找到了一种更简单的方法:只需转到Amazon开发者控制台并复制我在红色矩形中突出显示的值:SHA1 base 64

答案 2 :(得分:1)

Blanka的解决方案有效。

但是,如果你能在Kindle Fire上重现这个问题,这里的另一个解决方案更容易。

从LogCat中检索Facebook发送的身份验证请求:

03-13 15:21:19.360: D/WebCore(26863): *-* Total load time: 1535.31 ms, thread time: 287.00 ms for
https://m.facebook.com/dialog/oauth?android_key=XXXXXXXXXXXXX&calling_package_key=<app_package_id>
&client_id=YYYYYYYYYYYY&display=touch&redirect_uri=fbconnect%3A%2F%2Fsuccess&scope=email%
2Cpublish_stream&type=user_agent&_rdr

android_key参数是您应用的Hash Key。 您需要在Facebook Dashboad上添加此密钥。

注意:请注意,https请求中哈希的编码格式可能与Facebook所需的格式不同。

答案 3 :(得分:0)

我认为hashkey的问题,我也遇到了同样的问题。我通过下载openssl和生成的哈希解决了这个问题。请尝试以下回答https://stackoverflow.com/a/14826036/1258999

答案 4 :(得分:0)

在Kindle或任何其他设备上发现了更简单的处理方法。如果您安装了FB应用程序(在我的情况下,我没有尝试其他登录路径但也可以工作?),并且您正在使用的登录名在开发人员的FB应用程序中列为开发人员。有问题的应用程序的facebook.com,哈希将出现在它给你在应用程序本身的错误消息中。说&#34;哈希键xxxxxxxxxxxxxxxxx无法识别。在应用程序ID yyyyyyyyyyyy&#34;的开发人员门户中管理您的哈希键。

很抱歉,如果文字不完全正确,我自己也没有在解决问题之前截图,但这就是它的要点。