【问题标题】:Facebook SSO example not working - "An error ocurred. Please try again later"Facebook SSO 示例不起作用 - “发生错误。请稍后再试”
【发布时间】:2011-03-06 17:02:20
【问题描述】:

我正在尝试将 facebook 集成到我的应用程序中,因此按照以下教程操作:Facebook Android 但我无法让第一个示例(单点登录)工作。当我的应用程序加载时,我得到了 facebook 对话框,但它只是说“发生错误。请稍后再试。”底部有一个 facebook 风格的“确定”按钮,logcat 中没有任何内容:

我按照教程中的步骤进行操作,但我猜测 APP ID 或 keytool 生成的 hashkey 有问题。以下是我遵循的步骤:

  1. 克隆 fb git。
  2. 创建 fbSDK 项目。
  3. 创建自己的 fb 项目并将 fbSDK 链接为库。
  4. 然后我使用 openssl 执行 keytool cmd 并按照 stackoverflow 上其他人的建议输入密码“android”。
  5. 我访问了 developers.facebook.com 并创建了一个新应用。
  6. 在“编辑设置->移动和设备”中,我将哈希值放入提供的框中。
  7. 在“Edit Settings->Mobile and Devices”中,我选择“Native App”作为“Application Type”
  8. 回到应用程序中,我复制并粘贴了 SSO 示例代码。
  9. 我将 Facebook() 构造函数中的“YOUR_APP_ID”更改为新应用程序的 developers.facebokk.com 页面上显示的 APP ID。
  10. 我在手机上运行了该应用程序。

我不知道为什么 logcat 中什么都没有,但是当我安装它时,控制台总是说:ActivityManager: Warning: Activity not started, its current task has been brought to the front

我找不到任何对我的应用程序的 logcat 引用或我从 facebook sdk 得到的错误:Facebook-ProxyAuth(4828): Failed to read calling package's signature.

我已经在这工作了几个小时了,如果有任何帮助,我将不胜感激。我不敢相信 facebook SDK 和帮助对 Android 来说如此粗略,facebook 应该为自己感到羞耻。

谢谢,

英菲尼迪菲兹

【问题讨论】:

    标签: android facebook facebook-android-sdk


    【解决方案1】:

    您必须从单独的线程调用 .request()。如果您在 UI 线程上执行此操作,则 Facebook 授权不会在您的代码执行之前完成。所以在facebook授权的“onComplete”中调用新线程。此时您将拥有一个有效的访问令牌。祝你好运!

    (这就是 api 说“不要从 UI 线程调用它!”的原因。)

    【讨论】:

    • 嗯,我不认为这是我的问题,因为我现在只是使用 SDK 为单点登录显示的准系统示例代码,并且在运行 authorize() 时始终调用 OnFacebookError,不管我做什么,FacebookError 似乎都没有,尽管它以前不是 FacebookError 啊!
    【解决方案2】:

    其实我也遇到过同样的问题,而且解决了。 因此,在哈希键生成中使用以下步骤:

    1. 打开 cmd 并转到您的 android SDK 路径。
    2. 键入此命令: keytool -exportcert -alias androiddebugkey -keystore [你的 SDK 路径 |例如 c:\users\user].android\debug.keystore | openssl sha1 -二进制 | openssl base64
    3. 然后promet密码输入“android”
    4. 将结果复制到您的 Facebook 应用设置并保存设置。
    5. 在您的 android 应用中使用 facebook 应用 ID(不是 android 哈希键)。

    【讨论】:

      【解决方案3】:

      我遇到这个问题只是因为我在使用正确的密钥正确初始化 facebook 对象之前调用了 facebook api。只需确保您使用正确的密钥并正确初始化 Facebook 对象即可。

      此外,我也曾多次尝试使用不同的 android 应用程序密钥进行 facebook api 调用而被绊倒。请记住,facebook 教程会指导您使用已编译的 apk 创建密钥。如果您要从 IDE 运行代码(我使用的是 Eclipse),则此密钥哈希将有所不同。当您直接从 eclipse 运行您的应用程序时,facebook 密钥会有所不同,因为从 eclipse 运行您的应用程序时,它使用默认发布密钥来构建您的应用程序。

      因此,我通常在 facebook 开发者门户中有两个密钥。一个使用 Android 市场使用的 release-key 编译的 apk 创建的密钥,另一个通过直接从 eclipse 运行应用程序代码创建的密钥。

      【讨论】:

        【解决方案4】:

        您在第 7 步中选择 Native App 的原因是什么?我把它留在了默认的 HTML5 / 移动网络上,并让示例工作。

        【讨论】:

        • 哦,好吧,我不知道为什么要更改它,我只是假设,因为我正在为 Android 创建一个应用程序,而不是使用浏览器的 HTML5/移动网络应用程序。不过谢谢。
        • 好的,我没有更改本机应用程序的东西,但它似乎工作,我设法使用该应用程序发布到我的墙上!唯一的问题是,发布到我的墙上是通过 Facebook API 对话框完成的,该对话框只是转到他们的 Facebook 页面进行发布。因此,我仍然没有获得 API 的本地使用,我尝试使用 facebook.request("me") 调用 Graph API,但我只是收到一个关于不使用活动访问令牌的 Oauth 错误,我完全被难住了:(
        • 好的,我已经用网络视图登录了(愚蠢的 SSO 仍然没有运气),我正在使用 AsyncFacebookRunner 来调用 request("me");但每次我尝试时,第一次安装应用程序时它会获取关于我的信息(耶!)但每次之后我都会得到“必须使用活动访问令牌来查询有关当前用户的信息。”,每次尝试访问 Graph API 时,我应该将访问令牌存储在任何地方还是获取一个新令牌?谢谢。
        【解决方案5】:

        正确找出散列的最佳方法是这段代码。:

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        
            try {
                PackageInfo info = getPackageManager().getPackageInfo(
                        "com.facebook.samples.loginhowto", 
                        PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                    }
            } catch (NameNotFoundException e) {
        
            } catch (NoSuchAlgorithmException e) {
        
            }
            ...
        

        将 com.facebook.samples.loginhowto 替换为您自己的包名称。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-19
          • 1970-01-01
          相关资源
          最近更新 更多