![](/img/trans.png)
[英]Android Application Login with Facebook is not working with Facebook App installed
[英]Android facebook login not working with installed Facebook app
我已经设置了简单的 facebook 登录。 对于 Android 2.3.6 一切正常,用户得到提示登录对话框,输入数据,应用程序继续。 我还以为是android版本问题,结果发现手机安装了facebook应用后登录不上!
测试于:Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 Android 模拟器 4.1.2
即使是 facebook 样本也不起作用!
每次应用程序执行时 - else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }
else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }
好像 session 没有打开,但这是为什么? 遵循本指南 - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
代码:
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
Log.d("Access_token", session.getAccessToken());
}
}
});
} else {
Log.d("SESSION NOT OPENED", "SESSION NOT OPENED");
}
}
});
我正在为那些使用Facebook SDK 4.X
人写这个答案
你可以用以下两种方式之一打开facebook的登录门户网站:
如果你有Android 1.9.X
的Android设备和Facebook App
安装在这里称为Native Login
Method的设备,你不需要使用facebook WebView
如果您尚未在Android设备中安装Facebook App
,那么最好使用WebView
所以这个Facebook提供3个Constants
NATIVE_ONLY
(仅在Facebook App中打开时使用) WEB_ONLY
(仅在想要在WebView
打开时使用) NATIVE_WITH_FALLBACK
(如果未安装应用程序,推荐使用Facebook检测和操作webView
) 请查看以下链接以获取详细信息https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting
LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY);
LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);
使用此函数获取散列密钥(debug和release apk)并将其放入developer.facebook.com/apps中的应用程序中
private void calculateHashKey(String yourPackageName) {
try {
PackageInfo info = getPackageManager().getPackageInfo(
yourPackageName,
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) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
这对我很有帮助..希望这对你也有帮助..
查看步骤4的底部: https : //developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
如果您没有正确输入您的应用程序密钥哈希,Facebook通过WebView弹出窗口登录(如果未安装该应用程序)仍然有效,但通过本机Facebook应用程序登录将不会。
您应该在LogCat中看到此异常:
com.facebook.http.protocol.ApiException: remote_app_id does not match stored id
Facebook SDK会打印出异常,因此无论如何还要检查是否存在其他问题。
如果我有活跃的facebook会话(来自facebook应用程序),看起来我无法获取数据。
所以在我打开会话之前,我要求强制登录,即使用户已经从facebook应用程序打开了facebook会话。
openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
所以现在一切正常,但用户必须手动输入数据。 它并不理想但它有效。
Facebook应用程序打开时,即使是facebook样本也不适合我。
如果有人有更好的解决方案,请随时提出建议。
如果没有正确生成散列键,那么您可能会面临类似的问题
显示本机登录对话框,但在接受权限弹出后,日志cat中没有任何反应
但是如果禁用设备上的本机应用程序,则登录和共享将正常工作(在这种情况下,在Web视图中打开登录对话框,并且此处不需要正确的哈希键)
我遇到了同样的问题,并通过使用此代码获取哈希密钥解决了这个问题。 散列键与使用openSSl和keytool生成的键不同
在Facebook应用程序中更新此哈希键后,一切正常
//================================== To Get Facebook Hash key Programmatically =========================//
PackageInfo info;
try {
info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.e("hash key", something);
}
} catch (NameNotFoundException e1) {
Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
Log.e("exception", e.toString());
}
只需更改您的包名称并获取正确的哈希键即可
在Android 的 Facebook 登录快速入门底部有一个重要步骤。
对于 Android 11 及更高版本,应用需要为它想了解的每个应用创建一个queries
条目。 如果没有这个,应用程序将不知道 Facebook 已安装,并且将始终打开自定义 Chrome 选项卡。
在AndroidManifest.xml
查询中添加com.facebook.katana
的条目。
<queries>
<package android:name="com.facebook.katana" />
</queries>
作为参考,我使用的是 FB SDK 5.6
禁用SAndbox模式...这将允许您的应用在所有设备上运行。 试试这个解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.