我尝试了许多基于Parse SDK实现Facebook登录的解决方案但没有成功。 好像我错过了什么。
我尝试使用此命令(以及许多其他命令)和password = android:
生成哈希keytool -exportcert -alias androiddebugkey -keystore C:\ Users \ Ido \ .android \ debug.keystore | openssl sha1 -binary | openssl base64
但它对我没有用,每次我尝试登录时都会收到一个错误,即哈希密钥未经授权。 将此代码放入Appliction OnCreate为我工作(我没有得到错误):
try {
PackageInfo info = getPackageManager().getPackageInfo("com.idob.soccertimer", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign= Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
Toast.makeText(getApplicationContext(), sign, Toast.LENGTH_LONG).show();
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
我为Facebook和Parse做了调整:
在应用程序的onCreate中初始化:
ParseFacebookUtils.initialize(的getString(R.string.facebook_app_id));
覆盖loginFragment中的onActivityResult方法:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ParseFacebookUtils.finishAuthentication(requestCode, resultCode, data);
}
添加元标记:
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
我使用此代码登录:
ParseFacebookUtils.logIn(getActivity(), new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
if (user != null) {
Log.e("MyApp", err.getMessage());
}
if (user == null) {
Log.d("MyApp", "Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.d("MyApp", "User signed up and logged in through Facebook!");
} else {
Log.d("MyApp", "User logged in through Facebook!");
}
}
});
我的问题是LogInCallback没有调用,当我尝试登录两次时 - 返回一个LogInCallback,其中user = null且err = null 根本没有调用OnActivityResult。
答案 0 :(得分:0)
这条路对我来说不对:
C:\Users\Ido. android\debug.keystore
我是Linux用户,无法100%确定Windows路径,但我很确定它应该位于:
C:\Documents and Settings\[User Name]\.android\debug.keystore
或
C:\Users\[User Name]\.android\debug.keystore
答案 1 :(得分:0)
片段onActivityResult不会自动调用,它应该由活动的onActivityResult调用