我的代码是。
private void facebook() {
List<String> permissions = Arrays.asList("public_profile", "email");
ParseFacebookUtils.logInWithReadPermissionsInBackground(this, permissions, new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
progressDialog.dismiss();
Log.e("Facebook", user + " " + err.getMessage());
if (user == null) {
Log.e("MyApp", "Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.e("MyApp", "User signed up and logged in through Facebook!");
} else {
userinfo(user);
Log.e("MyApp", "User logged in through Facebook!");
}
}
});
}
此代码始终提供用户为空..
我使用最新的 Facebook SDK
是
编译'com.facebook.android:facebook-android-sdk:4.0.1'
和Parse
是:Parse-1.9.1.jar
并且我使用过 Android Studio
。
单击按钮时调用此方法此方法有效意味着 facebook 弹出窗口已打开但它始终提供用户为空。给定的是用户为空,但刷新后 parseuser
不为空。
最佳答案
这些是我根据 Parse documentation 使用 ParseUsers 进行用户注册/登录/链接的步骤。以及我在网上找到的一些技巧。请检查你没有遗漏任何步骤,因为我和你有同样的问题,我不得不重新做所有的步骤:
- 首先,我去了this网站并创建了一个新的应用程序。
- 我下载了 Facebook SDK,执行了第 4 步和第 5 步,并添加了包名和默认类名
- 我添加了 key 哈希:
开发 key :
cd C:\Program Files\Java\jdk1.8.0_05\bin keytool -exportcert -alias androiddebugkey -keystore C:\Users\'YOUR NAME'.android\debug.keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64
发布 key :
cd C:\Program Files\Java\jdk1.8.0_05\bin keytool -exportcert -alias 'NAME YOU GAVE AS ALIAS' -keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64
- 在 parse.com 的Settings 和Authentication 中,我在 Facebook Application 中添加了 APP ID在 Facebook 中创建。
- 根据 this ,我完成了所有步骤,直到使用登录或共享(包括这个)。
- 我去了here并且我添加了我的开发哈希 key 。
- 在我在 Facebook 中创建的应用程序的设置中,我检查了 key 哈希字段中的开发 key 和发布 key 。
- 我使用了 tutorial使我的应用程序生效的正确答案。
- 我从 QuickStart 下载了最新的 Parse SDK (1.9.1),因为 1.8 无法正常工作。
- 我在
libs
中添加了 SDK 的新 .jar 文件和 ParseFacebookUtilsV4-1.9.1我项目的文件夹并同步了 build.gradle 文件。 - 我在
strings.xml
中添加了这一行:
<string name="facebook_app_id">1421******</string>
我在我的 AndroidManifest.xml
中添加了这个内部应用程序标签:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
还有这个:
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
在build.gradle
由于 Diamond
的一些错误,我在 android 中添加了这些应用程序(很抱歉,我不记得确切的错误):
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
由于 undefined variable 的一些错误,我将SDK版本更改为数字:
minSdkVersion 14
targetSdkVersion 19
相关dependencies
在同一个文件中:
compile fileTree(include: 'Parse-*.jar', dir: 'libs')
compile fileTree(include: 'ParseFacebookUtilsV4-*.jar', dir: 'libs')
compile 'com.facebook.android:facebook-android-sdk:4.0.0'
在我想用 facebook 做所有这些事情的 Activity 中,我做了以下事情:
Parse.initialize(this, "hoMaK", "wWV193mE"); FacebookSdk.sdkInitialize(getApplicationContext()); ParseFacebookUtils.initialize(getApplicationContext()); final List<String> permissions = Arrays.asList("public_profile", "email"); fb.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { proDialog.show(); ParseFacebookUtils.logInWithReadPermissionsInBackground(HomeActivity.this, permissions, new LogInCallback() { @Override public void done(final ParseUser user, ParseException err) { if (user == null) { Log.d("MyApp", "Uh oh. The user cancelled the Facebook login."); Toast.makeText(getApplicationContext(), "Log-out from Facebook and try again please!", Toast.LENGTH_SHORT).show(); ParseUser.logOut(); proDialog.hide(); } else if (user.isNew()) { Log.d("MyApp", "User signed up and logged in through Facebook!"); if (!ParseFacebookUtils.isLinked(user)) { ParseFacebookUtils.linkWithReadPermissionsInBackground(user, HomeActivity.this, permissions, new SaveCallback() { @Override public void done(ParseException ex) { if (ParseFacebookUtils.isLinked(user)) { Log.d("MyApp", "Woohoo, user logged in with Facebook!"); proDialog.hide(); } } }); } else{ Toast.makeText(getApplicationContext(), "You can change your personal data in Settings tab!", Toast.LENGTH_SHORT).show(); } } else { Log.d("MyApp", "User logged in through Facebook!"); if (!ParseFacebookUtils.isLinked(user)) { ParseFacebookUtils.linkWithReadPermissionsInBackground(user, HomeActivity.this, permissions, new SaveCallback() { @Override public void done(ParseException ex) { if (ParseFacebookUtils.isLinked(user)) { Log.d("MyApp", "Woohoo, user logged in with Facebook!"); proDialog.hide(); } } }); } else{ proDialog.hide(); } } } }); } });
通过上述所有步骤,我可以使用我的 Facebook 帐户注册或登录,并且我在
_User
中换了一行Parse.com 中的对象,我可以随时更改其中的数据(我将其作为普通注册用户处理)
关于android - 在android studio中通过Facebook api 4.0解析登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29748256/