2016-07-02 3 views
1

이메일과 비밀번호를 사용하여 Firebase 콘솔에서 사용자를 만들려고하지만 오류가 나타나지 않습니다. 실제로 대시 보드로 이동하여 add user을 클릭하여 콘솔에 사용자를 추가 할 수 있지만이 프로세스를 자동화하고 싶습니다.Android Firebase createUser()가 작동하지 않습니다.

import android.content.Intent; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.firebase.client.AuthData; 
import com.firebase.client.Firebase; 
import com.firebase.client.FirebaseError; 
import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.OnFailureListener; 
import com.google.android.gms.tasks.OnSuccessListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.AuthCredential; 
import com.google.firebase.auth.AuthResult; 
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.auth.FirebaseUser; 
import com.google.firebase.auth.GoogleAuthProvider; 

import java.util.Map; 

public class SignInActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, 
     View.OnClickListener { 

    private static final String TAG = "SignInActivity"; 
    private static final int RC_SIGN_IN = 9001; 
    private SignInButton mSignInButton; 
    private Button but; 
    private EditText email; 
    private EditText password; 
    private FirebaseAuth mAuth; 
    private FirebaseUser mFirebaseUser; 

    private GoogleApiClient mGoogleApiClient; 
    private FirebaseAuth mFirebaseAuth; 
    String user_id="",pass=""; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sign_in); 
     email=(EditText)findViewById(R.id.emails); 


     password=(EditText)findViewById(R.id.passwords); 

     but=(Button)findViewById(R.id.create); 
     Firebase.setAndroidContext(getBaseContext()); 

     mAuth = FirebaseAuth.getInstance(); 

     but.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       user_id= email.getText().toString(); 
       pass= password.getText().toString(); 
       Firebase ref = new Firebase("https://final-6b828.firebaseio.com/auth"); 
       ref.createUser(user_id, pass, new Firebase.ValueResultHandler<Map<String, Object>>() { 
        @Override 
        public void onSuccess(Map<String, Object> result) { 
         System.out.println("Successfully created user account with uid: " + result.get("uid")); 
         String a= result.get("uid").toString(); 
         Log.i("Success",user_id); 
         Log.i("Success",pass); 
         Toast.makeText(getApplicationContext(), "Pass", 
           Toast.LENGTH_LONG).show(); 
        } 
        @Override 
        public void onError(FirebaseError firebaseError) { 
         // there was an error 
         System.out.println("Failed to create user account : "); 
         Log.i("Failed","a"); 
         Toast.makeText(getApplicationContext(), "Failed", 
           Toast.LENGTH_LONG).show(); 
        } 

       }); 


      } 
     }); 


     mSignInButton = (SignInButton) findViewById(R.id.sign_in_button); 


     mSignInButton.setOnClickListener(this); 

     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 

     // Initialize FirebaseAuth 
     mFirebaseAuth = FirebaseAuth.getInstance(); 
    } 

    private void handleFirebaseAuthResult(AuthResult authResult) { 
     if (authResult != null) { 

      FirebaseUser user = authResult.getUser(); 
      Toast.makeText(this, "Welcome " + user.getEmail(), Toast.LENGTH_SHORT).show(); 


      startActivity(new Intent(this, MainActivity.class)); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.sign_in_button: 
       signIn(); 

       break; 
      default: 
       return; 
     } 
    } 

    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 

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

     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 

       GoogleSignInAccount account = result.getSignInAccount(); 
       firebaseAuthWithGoogle(account); 
       Log.e(TAG, "Google Sign In Successfull."); 
      } else { 

       Log.e(TAG, "Google Sign In failed."); 
      } 
     } 
    } 

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
     Log.d(TAG, "firebaseAuthWithGooogle:" + acct.getId()); 
     AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
     mFirebaseAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 

         if (!task.isSuccessful()) { 
          Log.w(TAG, "signInWithCredential", task.getException()); 
          Toast.makeText(SignInActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
         } else { 
          startActivity(new Intent(SignInActivity.this, MainActivity.class)); 
          finish(); 
          try { 
           Thread.sleep(5000); 
          } catch (InterruptedException e) { 
           e.printStackTrace(); 
          } 
         } 
        } 
       }); 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

     Log.d(TAG, "onConnectionFailed:" + connectionResult); 
     Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); 
    } 

} 
} 

사용자를 생성하는 데 사용되는 코드는 다음과 같습니다 :

but.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      user_id= email.getText().toString(); 
      pass= password.getText().toString(); 
      Firebase ref = new Firebase("https://final-6b828.firebaseio.com/auth"); 
      ref.createUser(user_id, pass, new Firebase.ValueResultHandler<Map<String, Object>>() { 
       @Override 
       public void onSuccess(Map<String, Object> result) { 
        System.out.println("Successfully created user account with uid: " + result.get("uid")); 
        String a= result.get("uid").toString(); 
        Log.i("Success",user_id); 
        Log.i("Success",pass); 
        Toast.makeText(getApplicationContext(), "Pass", 
          Toast.LENGTH_LONG).show(); 
       } 
       @Override 
       public void onError(FirebaseError firebaseError) { 
        // there was an error 
        System.out.println("Failed to create user account : "); 
        Log.i("Failed","a"); 
        Toast.makeText(getApplicationContext(), "Failed", 
          Toast.LENGTH_LONG).show(); 
       } 

      }); 


     } 
    }); 
+0

안녕 Sachin

여기에 전체 코드입니다 StackOverflow에 오신 것을 환영합니다. 사용자 생성 오류로 질문을 편집 할 수 있습니까? 많은 코드를 게시했습니다! 그걸 줄여 줄래? :) –

+1

안녕하세요 Devid, 응답 주셔서 감사합니다. 답변을 얻었습니다. 사용자 생성에 사용 된 코드가 잘못되었습니다. 올바른 코드를 가져 왔습니다. [link] https://github.com/firebase/quickstart-android/blob/master/auth/app/src/main/java/com/google/firebase/quickstart/auth/EmailPasswordActivity.java#L69-L69 .. .....감사. –

+1

@SachinVarma 자신 만의 질문을 해결 한 경우 (질문에 추가하는 대신) 코드와 함께 답변을 게시하고 질문을 받아 들여 해결되지 않은 채로 남겨주세요. – Luksprog

답변

0

사용자가 작성하는 올바른 코드 ..

but.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      user_id= email.getText().toString(); 
      pass= password.getText().toString(); 
      createAccount(user_id,pass); 
} 
    }); 

private void createAccount(String email, String password) { 
    Log.d(TAG, "createAccount:" + email); 
    if (!validateForm()) { 
     return; 
    } 

    // showProgressDialog(); 

    // [START create_user_with_email] 
    mAuth.createUserWithEmailAndPassword(email, password) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); 

        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 
        if (!task.isSuccessful()) { 
         Toast.makeText(SignInActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } 

        // [START_EXCLUDE] 
        //hideProgressDialog(); 
        // [END_EXCLUDE] 
       } 
      }); 
    // [END create_user_with_email] 
} 
private boolean validateForm() { 
    boolean valid = true; 

    String emails = email.getText().toString(); 
    if (TextUtils.isEmpty(emails)) { 
     email.setError("Required."); 
     valid = false; 
    } else { 
     email.setError(null); 
    } 

    String passwords = password.getText().toString(); 
    if (TextUtils.isEmpty(passwords)) { 
     password.setError("Required."); 
     valid = false; 
    } else { 
     password.setError(null); 
    } 

    return valid; 
} 
관련 문제