gpt4 book ai didi

android - 应用程序针对 Facebook 登录配置错误 : Kindle Fire Integration Issue

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:52 24 4
gpt4 key购买 nike

我们在 Kindle Fire android 应用程序中集成了 Facebook 登录。大多数时候它都可以正常工作。但偶尔对于某些用户,当他们尝试使用 facebook 登录注册时,它会失败并出现错误“APP is misconfigured for facebook login”。我们检查了哈希键、包名等等,它们都是正确的。正如我所说,它适用于 95% 的用户。对于那些失败的用户,它会反复失败。 Facebook 的任何人都可以帮助我们解决这个问题吗?赞赏。 (顺便说一句,我们为我们的 Android 应用程序的谷歌播放版本使用相同的 facebook 应用程序也使用不同的哈希键,我们的谷歌播放应用程序从未遇到过这个问题。我们从亚马逊获得了 Kindle 的哈希键。)因为它没有在我们的任何设备上失败,并且仅在某些随机用户的设备上失败,我们无法获得任何调试消息。

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

最佳答案

我们刚刚在 Amazon 应用商店上的一个应用程序中遇到了同样的问题。在我们的例子中,我们意识到问题只有在这三个条件成立时才会发生:

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

这可以解释为什么在您的案例中它只发生在 5% 的案例中。

据我们所知,Amazon 放弃了 .apk,这破坏了 Facebook Android App Key Hash 检查。

涉及的解决方案:

  1. 获取我们应用程序的亚马逊 .apk(不是我们提交的,而是亚马逊应用商店分发的)
  2. 从 .apk 文件中提取签名证书
  3. Base64 对编码证书的 SHA 摘要进行编码
  4. 将生成的 Base64 key 哈希添加到我们的 Facebook 应用设置

这解决了问题。

事实证明,获取 .apk 非常棘手。应用程序位于设备文件系统的/data/app 文件夹中。但是,此目录受到保护以防止将其列出,因此除非您知道要查找的文件的名称,否则您会很不走运。您当然可以根设备。或者你可以通过做 adb pull /data/app/<app-id><suffix>.apk 试试你的盲目运气。其中后缀是空字符串或 -1 , -2等等,直到你成功。例如:

$ 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 文件后,您可以使用下面的代码获取 key 哈希。另存为 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 应用程序设置的 key 散列,然后解决问题。我很好奇其他人是否找到了与我们相同的哈希值(这意味着所有亚马逊游戏都使用相同的 key 退出)。在我们的例子中,散列以 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();
}
}

关于android - 应用程序针对 Facebook 登录配置错误 : Kindle Fire Integration Issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com