我在使用Parse登录Android时遇到问题。一切正常,但我总是让用户通过Facebook登录。
我发现一个有同样问题的人在这里Facebook登录无法正常工作(解析),但他的答案对我不起作用。
List<String> permissions = Arrays.asList("email");
ParseFacebookUtils.logIn(permissions, getActivity(), new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
if (user == null) {
Log.d("WelcomeMainFragment",
"Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.d("WelcomeMainFragment",
"User signed up and logged in through Facebook!");
} else {
Log.d("WelcomeMainFragment",
"User logged in through Facebook!");
}
}
});
user.isNew()
总是返回false!即使我的应用程序中有新的Facebook帐户。我需要有工作的isNew()方法才能在该代码块中首次创建解析用户。
多谢。
经过一番研究,我发现了问题所在。基本上我有两个问题:
- 我没有正确获取密钥哈希。
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH |OpenSSL SHA1 -二进制 |Openssl base64
上面做我得到了错误的密钥哈希。所以我鼓励你用这段代码来获取它:
try { PackageInfo info = getPackageManager().getPackageInfo( "your.package.name", 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) { }
您必须在调试和生产中执行它才能获得这两个密钥。
- 最重要的问题是我必须在Parse上允许Facebook身份验证,并包含Facebook应用程序ID和应用程序密钥。您可以转到Facebook>"设置>身份验证"进行操作。
我希望这可以帮助某人。