Android 在设备上安装Facebook应用程序时,SSO(单点登录)不工作
我正在开发一款与facebook集成的Android应用程序。当我设置LoginButton.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO)时,应用程序运行得非常好 当我尝试使用SSO时,问题出现了。我得到下面的错误。当我使用不正确的keyhash时,我常常会遇到类似的错误;现在不再是这种情况,因为Webview登录工作正常。更令人惊讶的是,如果Android应用程序安装在FB中,它就能正常工作。例如,我是应用程序管理者,因此默认情况下,它会安装在我的facebook个人资料中,但当我尝试使用另一个没有安装应用程序的fb帐户时,它不起作用。当我尝试登录时,会出现下面的错误,我会看到一个对话框,告诉我将授予基本权限,但实际上我甚至没有获得基本权限 我已经提交了应用程序进行审查,以便在应用程序中心上显示它。当我这样做时,对话框会显示一个复选框,我确认我的应用程序使用SSO。在我可以使用SSO之前,facebook是否需要批准我的应用程序(如果需要,这就没有意义了) 我花了几个小时试图解决这个问题,但我找不到解决办法。请帮忙Android 在设备上安装Facebook应用程序时,SSO(单点登录)不工作,android,facebook,Android,Facebook,我正在开发一款与facebook集成的Android应用程序。当我设置LoginButton.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO)时,应用程序运行得非常好 当我尝试使用SSO时,问题出现了。我得到下面的错误。当我使用不正确的keyhash时,我常常会遇到类似的错误;现在不再是这种情况,因为Webview登录工作正常。更令人惊讶的是,如果Android应用程序安装在FB中,它就能正常工作。例如,我是应用程序管理者,因此默认情况下,它
08-24 01:39:16.058: W/Bundle(21880): Key com.facebook.platform.protocol.PROTOCOL_VERSION expected String but value was a java.lang.Integer. The default value <null> was returned.
08-24 01:39:16.068: W/Bundle(21880): Attempt to cast generated internal exception:
08-24 01:39:16.068: W/Bundle(21880): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
08-24 01:39:16.068: W/Bundle(21880): at android.os.Bundle.getString(Bundle.java:1069)
08-24 01:39:16.068: W/Bundle(21880): at android.content.Intent.getStringExtra(Intent.java:4350)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient$KatanaLoginDialogAuthHandler.tryAuthorize(AuthorizationClient.java:821)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:272)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient.tryNextHandler(AuthorizationClient.java:238)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient$GetTokenAuthHandler.getTokenCompleted(AuthorizationClient.java:772)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient$GetTokenAuthHandler$1.completed(AuthorizationClient.java:731)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.internal.PlatformServiceClient.callback(PlatformServiceClient.java:144)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.internal.PlatformServiceClient.handleMessage(PlatformServiceClient.java:128)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.internal.PlatformServiceClient$1.handleMessage(PlatformServiceClient.java:54)
08-24 01:39:16.068: W/Bundle(21880): at android.os.Handler.dispatchMessage(Handler.java:99)
08-24 01:39:16.068: W/Bundle(21880): at android.os.Looper.loop(Looper.java:137)
08-24 01:39:16.068: W/Bundle(21880): at android.app.ActivityThread.main(ActivityThread.java:5227)
08-24 01:39:16.068: W/Bundle(21880): at java.lang.reflect.Method.invokeNative(Native Method)
08-24 01:39:16.068: W/Bundle(21880): at java.lang.reflect.Method.invoke(Method.java:511)
08-24 01:39:16.068: W/Bundle(21880): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-24 01:39:16.068: W/Bundle(21880): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-24 01:39:16.068: W/Bundle(21880): at dalvik.system.NativeStart.main(Native Method)
08-24 01:39:16.058:W/Bundle(21880):Key com.facebook.platform.protocol.protocol\u版本应为字符串,但值为java.lang.Integer。返回了默认值。
08-24 01:39:16.068:W/捆绑包(21880):尝试强制转换生成的内部异常:
08-24 01:39:16.068:W/Bundle(21880):java.lang.ClassCastException:java.lang.Integer无法转换为java.lang.String
08-24 01:39:16.068:W/Bundle(21880):位于android.os.Bundle.getString(Bundle.java:1069)
08-24 01:39:16.068:W/Bundle(21880):位于android.content.Intent.getStringExtra(Intent.java:4350)
08-24 01:39:16.068:W/Bundle(21880):在com.facebook.AuthorizationClient$KatanaLoginDialogAuthHandler.tryAuthorize(AuthorizationClient.java:821)
08-24 01:39:16.068:W/Bundle(21880):在com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:272)
08-24 01:39:16.068:W/Bundle(21880):位于com.facebook.AuthorizationClient.tryNextHandler(AuthorizationClient.java:238)
08-24 01:39:16.068:W/Bundle(21880):在com.facebook.AuthorizationClient$gettokenauthnhandler.getTokenCompleted(AuthorizationClient.java:772)
08-24 01:39:16.068:W/Bundle(21880):在com.facebook.AuthorizationClient$GetTokenAuthHandler$1.完成(AuthorizationClient.java:731)
08-24 01:39:16.068:W/Bundle(21880):位于com.facebook.internal.PlatformServiceClient.callback(PlatformServiceClient.java:144)
08-24 01:39:16.068:W/Bundle(21880):位于com.facebook.internal.PlatformServiceClient.handleMessage(PlatformServiceClient.java:128)
08-24 01:39:16.068:W/Bundle(21880):在com.facebook.internal.PlatformServiceClient$1.handleMessage(PlatformServiceClient.java:54)
08-24 01:39:16.068:W/Bundle(21880):在android.os.Handler.dispatchMessage(Handler.java:99)上
08-24 01:39:16.068:W/Bundle(21880):在android.os.Looper.loop(Looper.java:137)
08-24 01:39:16.068:W/Bundle(21880):位于android.app.ActivityThread.main(ActivityThread.java:5227)
08-24 01:39:16.068:W/Bundle(21880):位于java.lang.reflect.Method.invokenactive(本机方法)
08-24 01:39:16.068:W/Bundle(21880):位于java.lang.reflect.Method.invoke(Method.java:511)
08-24 01:39:16.068:W/Bundle(21880):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-24 01:39:16.068:W/Bundle(21880):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-24 01:39:16.068:W/束(21880):在dalvik.system.NativeStart.main(本机方法)
问题是hashkey是wong
适用于Linux
开放式终端:
用于调试生成
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
您将在“.android”文件夹中找到debug.keystore,将其复制并粘贴到桌面上,然后运行上述命令
发布版本
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
keytool-exportcert-alias-keystore | openssl sha1-binary | openssl base64
注意:确保在这两种情况下都必须询问密码。如果它没有要求输入密码,这意味着命令中有错误。我不确定这是否有用,但可能与新的SDK版本有关。您是否正在使用Android Facebook SDK v3.5?也许可以尝试使用早期版本的SDK,3.0.2,你可以在浏览他们的网站时找到它 编辑: 我已经解决了案例中的问题,但不能说我知道实际问题是什么:
- 检查您的哈希和app_id,确保将哈希键添加到开发人员网站上的应用程序中,而不是示例应用程序中
- 确保清单中包含的此活动与示例中指定/显示的内容完全一致
活动android:name=“com.facebook.LoginActivity”
android:theme=“@android:style/theme.transparent.NoTitleBar”
android:label=“@string/app\u name” - 确保在清单的
标记中添加元数据 元数据android:name=“com.facebook.sdk.ApplicationId”android:value=“@string/app\u id” - 确保在您的Facebook开发者帐户上,您正在部署的应用程序指定了正确的包和主类名
- 我还从清单中的主要登录活动中删除了以下属性: android:exported=“true” android:noHistory=“true”
这就是我所做的,目前看来还有效,我不能说这是否是一个通用的解决方案,但至少值得检查所有这些都是正确的。通过WebView登录工作的事实并不意味着hashkey是正确的,因为即使Facebook应用程序设置中没有hashkey,它也能工作。所以仔细检查你的hashkey 此外,既然你说它只适用于你的个人资料,而不适用于其他人,请检查你是否正确地将他们添加为测试人员,或者你不是
Log.e("FACEBOOK LOGIN ERROR", error.getLocalizedMessage());
intent.getStringExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION));
""+intent.getIntExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION, 0));