2017-01-24 3 views
0

Backsex에서 Parse를 실행하고 있습니다. 사용자가 Parse 사용자 테이블에 존재하지 않으면 항목을 작성하는 Facebook 로그인/로그인 작업을 파싱하고 Facebook을 통해 인증합니다. 그런 다음 사용자는 Android 앱에서 로그인/로그 아웃 할 수 있습니다. 모두 작동합니다.Parse Android Facebook은 이름/이메일을 저장하지 않습니다.

내가 겪고있는 문제는 Parse가 사용자 이름을 저장하지 않는다는 것입니다/처음으로 Facebook에서 검색 한 이메일, 사용자 이름 필드 (또는 확실하지 않은 다른 값)에 세션 토큰을 저장하고 있습니다. _User 테이블에 Facebook에서 검색 한 사용자의 이메일과 이름을 저장하고 싶습니다.

Android Studio에서 코드를 추적 할 때 페이스 북에서 가져온 내 이름, 이메일 등을 볼 수 있지만 해당 정보를 Parse _User 테이블에 넣지는 않습니다. 내 페이스 북 계정을 사용하여 응용 프로그램에 가입하실

예 :

enter image description here

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

답변

0

결코 마음은, 위의 코드를 찾고 다른 사람에 대한 100 % 작동합니다. Parse에서 내 오류가 발생했습니다. 이전에 계정을 만들고 Parse로 직접 인증했기 때문에 _Users 테이블에 이미 내 이메일 주소가 있습니다.

파스 로그에 따르면 사용자가 이미 테이블에 있었기 때문에 새 사용자에 대한 내 이메일 주소를 설정할 수 없습니다.