Как объединить регистрацию по логину и паролю с подтверждением телефона?
Есть приложение в котором регистрация по логину и паролю с помощью rest api с web server. Сделал отдельное приложение по подтверждению номера телефона с помощью firebase которое работает на ура. Но у меня не получается встроить подтверждения номера телефона в приложение с регистрация по логину и паролю!
В приложение с регистрация по логину и паролю после того как пользователь зарегистрировался его перекидывает с страницы регистрации в само приложение то есть сразу же авторизует, а конкретно с
Intent intent = new Intent(SubscribeActivity.this, MainActivity.class);
А мне нужно сделать что бы с страницы регистрации перекидывало на страницу подтверждения номера телефона, а конкретно с
Intent intent = new Intent(SubscribeActivity.this, VerifyOTPActivity.class);
А после того если пользователь подтвердил номер телефона, его перекидывает с страницы подтверждения в само приложение то есть сразу же авторизует, а конкретно с
Intent intent = new Intent(VerifyOTPActivity.this, MainActivity.class);
Вот код SubscribeActivity
public class SubscribeActivity extends BaseActivity {
private TextView send,i_have_account;
private String val_firstname_subs, val_email_subs, val_phone_subs, val_password_subs, val_password_conf_subs,account_type;
private static EditText phone_subs,password_subs,password_conf,firstname_subs,email_insc;
private Context context;
private static ProgressBar progressBar_subs;
private TextInputLayout input_layout_firstname_subs, input_layout_phone_subs,input_layout_password_inc
,input_layout_password_conf,input_layout_email_insc;
private static String global_url = AppConst.Server_url;
private TextView title;
private String id_driver = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_subscribe);
context = SubscribeActivity.this;
Bundle objetbundle = this.getIntent().getExtras();
account_type = objetbundle.getString("account_type");
TextView send = findViewById(R.id.send);
final EditText phone_subs = findViewById(R.id.phone_subs);
i_have_account = (TextView)findViewById(R.id.i_have_account);
password_subs = (EditText) findViewById(R.id.password_subs);
password_conf = (EditText) findViewById(R.id.password_conf);
firstname_subs = (EditText)findViewById(R.id.firstname_subs);
email_insc = (EditText)findViewById(R.id.email_insc);
progressBar_subs = (ProgressBar) findViewById(R.id.progressBar);
input_layout_firstname_subs = (TextInputLayout)findViewById(R.id.input_layout_firstname_subs);
input_layout_phone_subs = (TextInputLayout)findViewById(R.id.input_layout_phone_subs);
input_layout_password_inc = (TextInputLayout)findViewById(R.id.input_layout_password_inc);
input_layout_password_conf = (TextInputLayout)findViewById(R.id.input_layout_password_conf);
input_layout_email_insc = (TextInputLayout)findViewById(R.id.input_layout_email_insc);
title = (TextView) findViewById(R.id.title);
title.setTypeface(AppConst.font_quicksand_medium(context));
if(account_type.equals("customer"))
input_layout_email_insc.setVisibility(View.GONE);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
val_firstname_subs = firstname_subs.getText().toString();
val_email_subs = email_insc.getText().toString();
val_phone_subs = phone_subs.getText().toString();
val_password_subs = password_subs.getText().toString();
val_password_conf_subs = password_conf.getText().toString();
// startActivity(new Intent(SubscribeActivity.this, ChoosePhotoActivity.class));
if(account_type.equals("customer"))
submitFormSubscribeCustomer();
else
submitFormSubscribe();
}
});
i_have_account.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void launchHomeScreen() {
Intent intent = new Intent(SubscribeActivity.this, MainActivity.class);
intent.putExtra("fragment_name", "");
startActivity(intent);
finish();
}
/**
* Validating form
*/
private void submitFormSubscribeCustomer() {
if (!validatefirstname()) {
return;
}
if (!validatePhone()) {
return;
}
if (!validatePhoneValid()) {
return;
}
if (!validatePassword()) {
return;
}
if (!validatePasswordValid()) {
return;
}
if (!validatepasswordConf()) {
return;
}
if(val_password_conf_subs.equals(val_password_subs)){
progressBar_subs.setVisibility(View.VISIBLE);
new createUser().execute();
}else{
Toast.makeText(context, getResources().getString(R.string.password_requires), Toast.LENGTH_SHORT).show();
}
}
private void submitFormSubscribe() {
if (!validatefirstname()) {
return;
}
if (!validatePhone()) {
return;
}
if (!validatePhoneValid()) {
return;
}
if (!validateEmailValid()) {
return;
}
if (!validatePassword()) {
return;
}
if (!validatePasswordValid()) {
return;
}
if (!validatepasswordConf()) {
return;
}
if(val_password_conf_subs.equals(val_password_subs)){
progressBar_subs.setVisibility(View.VISIBLE);
new createUser().execute();
}else{
Toast.makeText(context, getResources().getString(R.string.password_requires), Toast.LENGTH_SHORT).show();
}
}
private boolean validatefirstname() {
if (firstname_subs.getText().toString().trim().isEmpty()) {
input_layout_firstname_subs.setError(getResources().getString(R.string.enter_your_password));
requestFocus(firstname_subs);
return false;
} else {
input_layout_firstname_subs.setErrorEnabled(false);
}
return true;
}
private boolean validatePhone() {
if (phone_subs.getText().toString().trim().isEmpty()) {
input_layout_phone_subs.setError(getResources().getString(R.string.enter_your_phone_number));
requestFocus(phone_subs);
return false;
} else {
input_layout_phone_subs.setErrorEnabled(false);
}
return true;
}
private boolean validatePhoneValid() {
if (phone_subs.getText().toString().trim().length() < 8) {
input_layout_phone_subs.setError(getResources().getString(R.string.enter_a_good_phone_number));
requestFocus(phone_subs);
return false;
} else {
input_layout_phone_subs.setErrorEnabled(false);
}
return true;
}
private boolean validateEmailValid() {
if (email_insc.getText().toString().trim().isEmpty()) {
input_layout_email_insc.setError(getResources().getString(R.string.enter_your_email_address));
requestFocus(email_insc);
return false;
} else {
input_layout_email_insc.setErrorEnabled(false);
}
return true;
}
private boolean validatePassword() {
if (password_subs.getText().toString().trim().isEmpty()) {
input_layout_password_inc.setError(getResources().getString(R.string.enter_your_password));
requestFocus(password_subs);
return false;
} else {
input_layout_password_inc.setErrorEnabled(false);
}
return true;
}
private boolean validatePasswordValid() {
if (password_subs.getText().toString().trim().length() < 8) {
input_layout_password_inc.setError(getResources().getString(R.string.passwor_requires_at_least_characters));
requestFocus(password_subs);
return false;
} else {
input_layout_password_inc.setErrorEnabled(false);
}
return true;
}
private boolean validatepasswordConf() {
if (password_conf.getText().toString().trim().isEmpty()) {
input_layout_password_conf.setError(getResources().getString(R.string.confirm_password));
requestFocus(password_conf);
return false;
} else {
input_layout_password_conf.setErrorEnabled(false);
}
return true;
}
private void requestFocus(View view) {
if (view.requestFocus()) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
/** Enregistrement d'un utilisateur **/
private class createUser extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String url = global_url+"user_register.php";
StringRequest jsonObjReq = new StringRequest(Request.Method.POST,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
progressBar_subs.setVisibility(View.INVISIBLE);
JSONObject json = new JSONObject(response);
JSONObject msg = json.getJSONObject("msg");
String etat = msg.getString("etat");
if(etat.equals("1")){
JSONObject user = json.getJSONObject("user");
phone_subs.setText("");
password_subs.setText("");
password_conf.setText("");
firstname_subs.setText("");
email_insc.setText("");
// Toast.makeText(context, "Successfully completed", Toast.LENGTH_SHORT).show();
if(account_type.equals("customer")){
saveProfile(new User(user.getString("id"),user.getString("nom"),user.getString("prenom"),user.getString("phone")
,user.getString("email"),user.getString("statut"),user.getString("login_type"),user.getString("tonotify"),user.getString("device_id"),
user.getString("fcm_id"),user.getString("creer"),user.getString("modifier"),user.getString("photo_path"),user.getString("user_cat"),"",user.getString("currency")
,"","" ,"","","","","",user.getString("country")));
}else{
id_driver = user.getString("id");
saveProfile(new User(user.getString("id"),user.getString("nom"),user.getString("prenom"),user.getString("phone")
,user.getString("email"),user.getString("statut"),user.getString("login_type"),user.getString("tonotify"),user.getString("device_id"),
user.getString("fcm_id"),user.getString("creer"),user.getString("modifier"),user.getString("photo_path"),user.getString("user_cat"),"",user.getString("currency")
,user.getString("statut_licence"),user.getString("statut_nic"),"","","","",user.getString("statut_vehicule"),user.getString("country")));
}
// phone_subs.setText(phone);
// Connexion.input_phone.setText(user.getString("phone"));
launchHomeScreen();
}else if(etat.equals("2")){
Toast.makeText(context, "This number already exists", Toast.LENGTH_SHORT).show();
requestFocus(phone_subs);
input_layout_phone_subs.setError("Enter another phone number");
}else
Toast.makeText(context, "Failure to register", Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar_subs.setVisibility(View.INVISIBLE);
Toast.makeText(context, "Error "+error.getMessage(), Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("firstname", val_firstname_subs);
params.put("phone", val_phone_subs);
params.put("password", val_password_subs);
params.put("email", val_email_subs);
params.put("account_type", account_type);
params.put("login_type", "phone");
params.put("tonotify", "yes");
return params;
}
};
AppController.getInstance().addToRequestQueue(jsonObjReq);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
10000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
return null;
}
@Override
protected void onPostExecute(String result) {
//to add spacing between cards
if (this != null) {
}
}
@Override
protected void onPreExecute() {
}
}
private void saveProfile(User user){
M.setNom(user.getNom(),context);
M.setPrenom(user.getPrenom(),context);
M.setPhone(user.getPhone(),context);
M.setEmail(user.getEmail(),context);
M.setID(user.getId(),context);
M.setlogintype(user.getLogin_type(),context);
M.setUsername(user.getNom(),context);
M.setUserCategorie(user.getUser_cat(),context);
// M.setCoutByKm(user.getCost(),context);
M.setCurrentFragment("",context);
M.setCurrency(user.getCurrency(),context);
M.setVehicleBrand(user.getVehicle_brand(),context);
M.setVehicleColor(user.getVehicle_color(),context);
M.setVehicleModel(user.getVehicle_model(),context);
M.setVehicleNumberPlate(user.getVehicle_numberplate(),context);
M.setCountry(user.getCountry(),context);
if(user.getTonotify().equals("yes"))
M.setPushNotification(true, context);
else
M.setPushNotification(false, context);
updateFCM(M.getID(context));
}
public void updateFCM(final String user_id) {
final String[] fcmid = {""};
final String[] deviceid = { "" };
if(AppConst.fcm_id==null){
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
// Toast.makeText(Demarrage.this, "getInstanceId failed", Toast.LENGTH_SHORT).show();
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
fcmid[0] = token;
// Log and toast
deviceid[0] = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
// Toast.makeText(Demarrage.this, ""+ fcmid[0] +" "+ deviceid[0], Toast.LENGTH_SHORT).show();
if(fcmid[0] !=null && fcmid[0].trim().length()>0 && deviceid[0] !=null && deviceid[0].trim().length()>0) {
new setUserFCM().execute(user_id, fcmid[0], deviceid[0]);
}
}
});
}else{
fcmid[0] = AppConst.fcm_id;
}
}
/** Mettre à jour le token de l'utilisateur**/
private class setUserFCM extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String url = AppConst.Server_url+"update_fcm.php";
final String user_id = params[0];
final String fcmid = params[1];
final String deviceid = params[2];
StringRequest jsonObjReq = new StringRequest(Request.Method.POST,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("user_id",user_id);
params.put("fcm_id",fcmid);
params.put("device_id",deviceid);
return params;
}
};
AppController.getInstance().addToRequestQueue(jsonObjReq);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
10000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
return null;
}
@Override
protected void onPostExecute(String result) {
//to add spacing between cards
if (this != null) {
}
}
@Override
protected void onPreExecute() {
}
}
}
Сам код отправки смс на номере телефона
final EditText inputMobile = findViewById(R.id.inputMobile);
Button buttonGetOTP = findViewById(R.id.buttonGetOTP);
final ProgressBar progressBar = findViewById(R.id.progressBar);
buttonGetOTP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(inputMobile.getText().toString().trim().isEmpty()){
Toast.makeText(SendOTPActivity.this, "Enter Mobile", Toast.LENGTH_SHORT).show();
return;
}
progressBar.setVisibility(View.VISIBLE);
buttonGetOTP.setVisibility(View.INVISIBLE);
PhoneAuthProvider.getInstance().verifyPhoneNumber(
"+38" + inputMobile.getText().toString(),
60,
TimeUnit.SECONDS,
SendOTPActivity.this,
new PhoneAuthProvider.OnVerificationStateChangedCallbacks(){
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
progressBar.setVisibility(View.GONE);
buttonGetOTP.setVisibility(View.VISIBLE);
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
progressBar.setVisibility(View.GONE);
buttonGetOTP.setVisibility(View.VISIBLE);
Toast.makeText(SendOTPActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
progressBar.setVisibility(View.GONE);
buttonGetOTP.setVisibility(View.VISIBLE);
Intent intent = new Intent(getApplicationContext(), VerifyOTPActivity.class);
intent.putExtra("mobile", inputMobile.getText().toString());
intent.putExtra("verificationId", verificationId);
startActivity(intent);
}
}
);
}
});
}