我在android中使用Facebook登录 的代码:
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) this.findViewById(R.id.login_button);
loginButton.setReadPermissions("email", "public_profile");
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.println(Log.ASSERT, "FB", "inicio session ");
}
@Override
public void onCancel() {
Log.println(Log.ASSERT, "FB", "OP NO completada");
// App code
}
@Override
public void onError(FacebookException exception) {
Log.println(Log.ASSERT, "FB", " Errro de sesion ");
exception.printStackTrace();
// App code
}
});
但总是收到以下错误:
SERVER_ERROR:[code] 1675030 [message]:执行查询时出错。 [extra]:执行操作“ProxyAuthAppLoginQuery”时出错:At Query.proxy_auth_app_login:无法解析字段。 W / System.err的:
在 com.facebook.login.LoginManager.onActivityResult(LoginManager.java:190) W / System.err:at com.facebook.login.LoginManager $ 1.onActivityResult(LoginManager.java:159) W / System.err:at com.facebook.internal.CallbackManagerImpl.onActivityResult(CallbackManagerImpl.java:82) W / System.err:at com.procibernetica.moca.MainActivity.onActivityResult(MainActivity.java:130) W / System.err:at android.app.Activity.dispatchActivityResult(Activity.java:5423) W / System.err:at android.app.ActivityThread.deliverResults(ActivityThread.java:3401) W / System.err:at android.app.ActivityThread.handleSendResult(ActivityThread.java:3448) W / System.err:at android.app.ActivityThread.access $ 1300(ActivityThread.java:138) W / System.err:at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1284) W / System.err:at android.os.Handler.dispatchMessage(Handler.java:102)W / System.err:
在android.os.Looper.loop(Looper.java:149)W / System.err:at android.app.ActivityThread.main(ActivityThread.java:5061) W / System.err:at java.lang.reflect.Method.invokeNative(Native 方法)W / System.err:at java.lang.reflect.Method.invoke(Method.java:515)W / System.err:at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:787) W / System.err:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603) W / System.err:at dalvik.system.NativeStart.main(Native Method)
我添加了以下权限。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
答案 0 :(得分:48)
答案 1 :(得分:25)
facebook上的文档不正确。我必须添加所有3个默认权限才能使其正常工作。
loginButton.setReadPermissions("email", "public_profile", "user_friends");
答案 2 :(得分:20)
app public
,然后任何人都可以登录。
答案 3 :(得分:14)
我遇到了类似问题,因为Firebase用户界面指定了android:value
。这就是我解决它的方法:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme.Base">
<meta-data
android:name="com.facebook.sdk.ApplicationId"
tools:replace="android:value"
android:value="@string/facebook_app_id" />
<acitivity
...
</activity>
...
答案 4 :(得分:10)
以上所有答案对我没有帮助,使用此命令时是什么
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
获取您在Facebook配置中放入的密钥哈希。
它将要求您输入密码,最初我没有设置密码,所以当我输入android
作为密码时,问题就发生了。它起作用了!
答案 5 :(得分:3)
在我的情况下,生成的哈希密钥是错误的,因为我使用的是错误的OpenSSL。 我使用的是openssl-0.9.8k_X64.zip而不是openssl-0.9.8e_X64.zip,这给我生成了一个错误的哈希密钥,从而导致了此问题,希望它可以帮助一些我迷失了大约8个小时的人来弄清楚这个问题。
答案 6 :(得分:3)
就我而言,问题是错误生成的密钥哈希,需要在Facebook应用页面上提交 本文https://developers.facebook.com/docs/facebook-login/android/advanced
上找到的解决方案手动检查密钥哈希-您可以打印出发送给Facebook的密钥哈希,并在App Dashboard中使用该值。在您的主要活动中对 onCreate()进行以下更改:
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) {
}
答案 7 :(得分:2)
在其他情况下也会返回此错误 - 即使您的应用是公开的,或者您被列为测试人员。
仔细检查你的
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
正在解析为正确的Facebook App ID,特别是如果您使用gradle构建动态指定它,而不是在strings.xml中对其进行硬编码。
答案 8 :(得分:2)
除了其他答案之外,还请检查用于登录的帐户的电子邮件是否已经过验证。
答案 9 :(得分:1)
添加字符串资源&#34; facebook_application_id&#34;在你的strings.xml中
将APP_ID替换为您的Facebook应用ID
<string name="facebook_application_id" translatable="false">APP_ID</string>
答案 10 :(得分:1)
问题日志: SERVER_ERROR:[代码] 1675030 [消息]:执行查询时出错
和准确的解决方案针对此特定问题(执行查询时出错)
由 @aloha 回答是通过更新查询进行访问。
loginButton.setReadPermissions(“ email”,“ public_profile”,“ user_friends”);
图片参考
问题日志:应用未设置。这个应用程式仍处于开发模式。而且您无权访问。注册测试用户或向应用程序管理员寻求许可
如何更改为实时模式
1.转到:https://developers.facebook.com
2.在“ 我的应用”列表中选择您的应用
3.将开关从OFF切换到ON
如何添加为测试或管理员
1.转到:https://developers.facebook.com
2.在“ 我的应用”列表中选择您的应用
3.转到:角色>角色>按添加,例如管理员
4.搜索您的新管理员/测试者Facebook帐户。
5.管理员必须输入facebook密码进行确认。然后提交
新管理员必须转到developer.facebook页面并接受请求
6.转到:https://developers.facebook.com
7.个人资料>请求>确认
8. 恭喜您,您已被分配为新管理员
如何获取和设置用于开发的Hashkey
请参阅Facebook登录文档
https://developers.facebook.com/docs/android/getting-started/#create_hash
我最喜欢的解决方案是通过代码(示例应用程序进行故障排除)
它会打印出哈希键。你可以更新
https://developers.facebook.com/apps/yourFacebookappID/settings/basic/
在 Android>哈希值部分
有关如何获取hashKey的分步过程。
逐步介绍如何在Facebook Developer上进行更新。
打开Facebook开发人员页面。您需要访问权限来更新Facebook Developer页面:https://developers.facebook.com
按照以下步骤进行操作。
答案 11 :(得分:1)
答案 12 :(得分:1)
尝试一下,在android build文件夹中找到您的app-debug.apk
//img[@alt = "Purple - Los Angeles"]
将其粘贴到Facebook密钥哈希中。
答案 13 :(得分:1)
您需要查看在手机Facebook应用程序中连接的用户是否是在应用程序页面上具有Facebook开发人员中的测试或开发人员权限的用户。
答案 14 :(得分:0)
我刚刚添加了这一行,它对我有用。
facebookLogin.setReadPermissions("email", "public_profile", "user_friends");
答案 15 :(得分:0)
我不知道这是否会有所帮助,但是根据您的个人经验,当您生成开发密钥时,您需要输入密码“ android”,并确保在字段中添加=时在代码后添加=在开发人员的Facebook域上