通过android工作室中的Facebook api 4.0解析登录

9 android facebook parse-platform android-studio

我的代码是.

 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!");
            }
        }
    });

}
Run Code Online (Sandbox Code Playgroud)

这段代码总是提供用户为空..我用的Facebook SDK是最新的

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

Parse是: Parse-1.9.1.jar

我有使用Android Studio.这个方法是单击按钮时调用此方法是工作意味着facebook弹出窗口是打开但它总是提供用户为空.给定的是user为null但刷新后parseuser不为null.

Mar*_*ena 5

根据Parse 文档和我在网上找到的一些提示,这些是我用ParseUsers进行用户注册/登录/链接的步骤.请检查您是否没有错过任何步骤,因为我遇到了同样的问题,我不得不重新执行所有步骤:

  • 首先,我访问了这个网站并创建了一个新的应用程序.
  • 我下载了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 GAAD as ALIAS'-keystore | C:\ OpenSSL\bin\openssl sha1 -binary | C:\ OpenSSL\bin\openssl base64

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

我在我的AndroidManifest.xml内部Application标签中添加了这个:

<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" />
Run Code Online (Sandbox Code Playgroud)

还有这个:

<meta-data android:name="com.facebook.sdk.ApplicationId"
    android:value="@string/facebook_app_id"/>
Run Code Online (Sandbox Code Playgroud)

build.gradle应用程序中我添加了这些内部的android因为一些错误Diamond(对不起,我不记得确切的错误):

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}
Run Code Online (Sandbox Code Playgroud)

由于未定义变量的一些错误,我将SDK版本更改为数字:

minSdkVersion 14
targetSdkVersion 19
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)
  • 在我想用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();
                            }
                        }
                    }
                });
            }
        });
    
    Run Code Online (Sandbox Code Playgroud)
  • 通过以上所有步骤,我可以使用我的Facebook帐户注册或登录,我_User在Parse.com中获得一个新的对象,我可以随时更改数据(我将其作为正常符号处理 -用户)


Des*_*tro 2

不确定,但请检查https://developers.facebook.com上您的应用程序的密钥哈希设置。您需要在应用程序开发人员控制台中设置发布版本和调试版本的密钥哈希值。您可能刚刚为调试环境设置了密钥哈希。有关更多信息,请参阅设置发布密钥哈希。希望能帮助到你。

  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();


            }
        }

    });
Run Code Online (Sandbox Code Playgroud)

还加上这个..

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ParseFacebookUtils.onActivityResult(requestCode, resultCode, data);
 }    
Run Code Online (Sandbox Code Playgroud)

这段代码运行完美..