在android studio中通过Facebook api 4.0parsinglogin

我的代码是。

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

compile 'com.facebook.android:facebook-android-sdk:4.0.1'

Parse是: Parse-1.9.1.jar

我已经使用Android Studio 。 这个方法是在点击button的时候调用的,这个方法就是工作方式,意思就是说popup窗口是打开的,但是总是提供用户为空。 这给出的是用户为空,但刷新之后parseuser不为空。

不确定,但请检查https://developers.facebook.com上的Key Hash设置。 您需要同时在应用开发人员控制台中设置发布和debugging版本的密钥哈希值。 这可能是因为你刚刚设置了debugging环境的关键哈希值。 有关更多信息,请参阅设置释放密钥散列。 希望能帮助到你。

  ParseFacebookUtils.logInWithReadPermissionsInBackground(this, Arrays.asList("email", "user_photos", "public_profile", "user_friends") , new LogInCallback() { @Override public void done(ParseUser user, ParseException err) { if (user == null) { Toast.makeText(Form.this,"User Already logged up through Twitter!",Toast.LENGTH_LONG).show(); } else if (user.isNew()) { } else { Toast.makeText(Form.this,"User Already logged up through Facebook!",Toast.LENGTH_LONG).show(); } } }); 

加这个也..

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ParseFacebookUtils.onActivityResult(requestCode, resultCode, data); } 

此代码正在工作完美..

这些是我遵循的步骤,根据Parse 文档和我在网上find的一些提示,使用ParseUsers注册/login/链接用户。 请检查一下,你没有错过任何一步,因为我和你有同样的问题,我必须重新做所有的步骤:

  • 首先,我去了这个网站,并创build了一个新的应用程序。
  • 我下载了Facebook SDK,我做了第4步和第5步,并添加了我的包名和默认的类名
  • 我添加了关键的哈希值:

开发关键:

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

释放键:

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

  • “设置身份validation”中的 parse.com中,我在Facebook应用程序中添加了在Facebook中创build的APP ID
  • 据此,我做了所有的步骤,直到使用login或共享 (包括这个)。
  • 我去了这里 ,我添加了我的开发哈希键。
  • 在我在Facebook中创build的应用程序的设置中,我在Key Hashes字段中检查了开发密钥和释放密钥。
  • 我使用了正确答案的教程来使我的应用程序生活。
  • 我从QuickStart下载了最新的Parse( 1.9.1 )SDK,因为1.8不工作。
  • 我在项目的libs文件夹中添加了SDK的新.jar文件和ParseFacebookUtilsV4-1.9.1 ,并同步了build.gradle文件。
  • 我在strings.xml添加了这一行:
    <string name="facebook_app_id">1421******</string>

我在Application标签内的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中,我添加了这些android内的一些错误,因为与Diamond (我很抱歉,我不记得确切的错误)的错误:

 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } 

我将SDK版本更改为数字,因为未定义的variables有一些错误:

 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做所有这些事情的活动中,我做了以下几件事情:

      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帐户注册或login,并且在_User对象中获得一个新行,可以在任何时候更改数据(我将其作为正常标志处理用户)

不要忘记在应用程序类中初始化您的ParseFacebookUtils类,因为它在文档中提供:

 ParseFacebookUtils.initialize(this); 

同时将onActivityResult传递给ParseFacebookUtils。

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ParseFacebookUtils.onActivityResult(requestCode, resultCode, data); } 

希望有所帮助;)。

资料来源: https : //parse.com/docs/android/api/com/parse/ParseFacebookUtils.html

咱们试试吧:

在你的build.gradle

删除这一行compile fileTree(dir: 'libs', include: ['*.jar']) ,然后添加这些:

 compile files('libs/Parse-1.9.1.jar') compile files('libs/ParseFacebookUtilsV4-1.9.1.jar') 

这对我和这种情况完美的作品:D

你把Facebook的活动放入你的清单吗?

 <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" />