0

我的 Parse 东西在 Back4App 上运行。我已经让 Facebook 注册/登录工作通过 Parse 并通过 Facebook 进行身份验证,如果用户在 Parse 用户表中不存在,它会创建条目。然后,用户可以在 Android 应用程序上登录/注销,一切正常。

我遇到的问题是 Parse 没有保存它首先从 Facebook 检索到的用户名/电子邮件,而是在用户名字段中保存了会话令牌(或我不确定的其他值)。我希望它将用户的电子邮件和从 Facebook 检索到的姓名保存在 _User 表中。

我可以看到,当我在 Android Studio 中跟踪代码时,它可以看到我从 Facebook 提取的全名、电子邮件等,但它没有将该信息放入 Parse _User 表中。

例如,当我使用我的 Facebook 帐户注册应用程序时:

在此处输入图像描述

 @Override
        public void onClick(View v) {
            ParseFacebookUtils.logInWithReadPermissionsInBackground(Login.this, permissions, new LogInCallback() {
                @Override
                public void done(ParseUser user, ParseException err) {
                    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!");
                        getUserDetailFromFB();
                        Intent intent = new Intent(getApplicationContext(),CategoryList.class);
                        startActivity(intent);
                        finish();
                    } else {
                        Log.d("MyApp", "User logged in through Facebook!");
                        getUserDetailFromParse();
                        Intent intent = new Intent(getApplicationContext(),CategoryList.class);
                        startActivity(intent);
                        finish();
                    }
                }
            });
        }
    });


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

void getUserDetailFromParse(){
    ParseUser user = ParseUser.getCurrentUser();
    mUsernameField.setText(user.getUsername());
    mUsernameField.setText(user.getEmail());
    Toast.makeText(getApplicationContext(), "Welcome Back!" + mUsernameField.getText().toString() + " Login.Email:" + mUsernameField.getText().toString(), Toast.LENGTH_SHORT).show();
}

void getUserDetailFromFB(){
    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),new GraphRequest.GraphJSONObjectCallback(){
        @Override
        public void onCompleted(JSONObject object, GraphResponse response) {
            try{
                FbUsername=(object.getString("name"));
                //FbUsername=response.getJSONObject().getString("name");
            }catch(JSONException e){
                e.printStackTrace();
            }
            try{
                FbEmail=response.getJSONObject().getString("email");
            }catch(JSONException e){
                e.printStackTrace();
            }
            saveNewUser();
        }
    });
    Bundle parameters = new Bundle();
    parameters.putString("fields","name,email");
    request.setParameters(parameters);
    request.executeAsync();
}
void saveNewUser(){
    ParseUser user = ParseUser.getCurrentUser();
    user.setUsername(FbUsername);
    user.setEmail(FbEmail);


    //user.put("email", FbEmail);
    user.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            Toast.makeText(getApplicationContext(), "Welcome " +FbUsername+"!", Toast.LENGTH_SHORT).show();
        }
    });
}
4

1 回答 1

0

没关系,上面的代码对于其他人来说 100% 有效。我的错误在于 Parse - 我已经在 _Users 表中找到了我的电子邮件地址,因为我之前创建了一个帐户并直接通过 Parse 进行了身份验证。

根据 Parse 日志,它无法为新用户设置我的电子邮件地址,因为该用户已经存在于表中。

于 2017-01-24T21:29:39.270 回答