android - 在android studio中通过Facebook api 4.0解析登录

标签 android facebook android-studio parse-platform

我的代码是。

 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 的SettingsAuthentication 中,我在 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/

相关文章:

android - 当我尝试构建我的 android studio 项目时 : Gives me below error

android - 声明 Activity 的目的是什么?

java - 我如何才能始终记住每个传感器的最新值并将其写入文件?

facebook - Azure Web 应用程序 - 无法将主机名解析为有效的 IP 地址

javascript - 将 facebook 登录添加到 localhost 中的应用程序

java - Android:java.lang.NoSuchMethodError:没有静态方法 zzy。

android - 什么是同时显示函数返回类型、参数类型和名称的 Android Studio 快捷方式?

android - ArrayAdapter.getPosition 找不到我的对象

android - 设置首选项布局并更改其中的属性

android - 使用 com.facebook.widget.LoginButton 时 android 布局出错