2017-08-10 52 views
0

我遇到了使用Facebook時將用戶註冊到Parse-Server的問題。Parse-Server Facebook登錄

當用戶點擊註冊與Facebook圖標這個代碼將運行..

ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginRegister.this, permissions, new LogInCallback() { 
    @Override 
    public void done(ParseUser user, ParseException err) { 
     if (user == null) { 
      MethodContants.showLog(TAG, "Uh oh. The user cancelled the Facebook login.", true); 
     } else if (user.isNew()) { 
      MethodContants.showLog(TAG, "User logged in through Facebook", false); 
      getUserDetailsFromFacebook(); 
     } else { 
      MethodContants.showLog(TAG, "User logged in through Facebook", false); 
      Intent intent = new Intent(LoginRegister.this, MainActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
      startActivity(intent); 
     } 
    } 
}); 

我getUserDetailsFromFacebook()方法看起來像這樣

private void getUserDetailsFromFacebook() { 
    GraphRequest graphRequest = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
     @Override 
     public void onCompleted(JSONObject jsonObject, GraphResponse response) { 

      try { 
       facebookUser = jsonObject.getString("name"); 
       MethodContants.showLog(TAG, "json name object: " + jsonObject.getString("name"), false); 
      } catch (JSONException e) { 
       MethodContants.showLog(TAG, "Error when getting facebook name: " + e.getMessage(), true); 
       showToast("Error saving Facebook user."); 
      } 
      try { 
       facebookEmail = jsonObject.getString("email"); 
       MethodContants.showLog(TAG, "json email object: " + jsonObject.getString("email"), false); 
      } catch (JSONException e) { 
       MethodContants.showLog(TAG, "Error when getting facebook email: " + e.getMessage(), true); 
       showToast("Error saving Facebook email."); 
      } 
      saveNewFacebookUser(); 
     } 
    }); 

    Bundle parameters = new Bundle(); 
    parameters.putString("fields", "name,email"); 
    graphRequest.setParameters(parameters); 
    graphRequest.executeAsync(); 

} 

我saveNewFacebookUser()看起來是這樣的...

private void saveNewFacebookUser() { 
    final ParseUser newFacebookUser = new ParseUser(); 
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.profile_picture); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] image = stream.toByteArray(); 
    ParseFile file = new ParseFile(AppConstants.PARSEUSER_IMAGE_FILE_NAME, image); 
    newFacebookUser.setUsername(facebookUser); 
    newFacebookUser.setEmail(facebookEmail); 
    newFacebookUser.put(AppConstants.PARSEUSER_FULLNAME, facebookUser); 
    newFacebookUser.put(AppConstants.PARSEUSER_FIRST_TIME_LOGGED_IN, "true"); 
    newFacebookUser.put(AppConstants.PARSEUSER_PROFILE_IMAGE, file); 

    file.saveInBackground(new SaveCallback() { 
     @Override 
     public void done(ParseException e) { 
      if (e == null) { 
       newFacebookUser.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         if (e == null) { 
          // USER CREATED! 
          // TODO SEND AN EMAIL TO THE USER WITH USERNAME AND PASSWORD 
          Intent intent = new Intent(LoginRegister.this, MainActivity.class); 
          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
          intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
          startActivity(intent); 
         } else { 
          MethodContants.showLog(TAG, "Facebook Error:" + e.getMessage(), true); 
          showToast("Facebook Error: " + e.getMessage()); 
         } 
        } 
       }); 
      } else { 
       MethodContants.showLog(TAG, "Facebook Error:" + e.getMessage(), true); 
       showToast("Facebook Error: " + e.getMessage()); 
      } 
     } 
    }); 
} 

錯誤告訴我,我必須使用sig nUpInBackground而不是saveInBackground。但是,當我這樣做,我得到另一個錯誤,說我需要爲用戶保存一個密碼 - >這挫敗了Facebook登錄的全部目的。

任何幫助將不勝感激!

回答

0

我發現了這個問題。

在saveNewFacebookUser()方法中,我將它設置爲一個全新的用戶。

ParseUser new = new ParseUser(); 

這本來

ParseUser new = ParseUser.getCurrentUser(); 

我會的情況下,離開這件事任何人有問題。