войти в систему с номером мобильного телефона через OTP через аутентификацию firebase - PullRequest
0 голосов
/ 09 мая 2020

In SignUpActivity. java Я беру номер мобильного телефона у пользователя и передаю его другому намерению, где пользователю нужно ввести OTP или он заполняется автоматически. Это нормально работает через мой код, но я хочу сделать тот тип объекта-фрагмента, с помощью которого, если пользователь отправляет сведения в SignUpActivity. java, появляется объект-фрагмент, как показано на снимке экрана, для обнаружения otp. Пожалуйста, скажите, как этого добиться. изображение результата, которого я хочу

Ответы [ 3 ]

0 голосов
/ 09 мая 2020

Чтобы добавить фрагмент. Сначала добавьте контейнер в файл макета.

<androidx.constraintlayout.widget.ConstraintLayout 
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent">

    < 
      ...........  
      />


    //  This is container for your fragment 
    <FrameLayout
       android:id="@+id/YOU_CONTAINER_ID"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Теперь создайте еще один файл макета и java класс для фрагмента. Затем напишите ниже java код в своей активности

public static final int FRAGMENT_CODE = 1111;

.....

Bundle bundle = new Bundle();
bundle.putString("MobNo", YOUR_PHONE_NO_STRING);

MyFragment fragment = new MyFragment();
fragment.setArguments(bundle);
fragment.setTargetFragment(this,FRAGMENT_CODE);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.YOUR_CONTAINER_ID, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

Теперь, чтобы получить номер телефона в вашем фрагменте

 if (getArguments() != null) {
     String phoneNo = getArguments().getString("MobNo"));
 }
0 голосов
/ 09 мая 2020

AuthUI дает вам это без какого-либо кода с вашей стороны

сделайте это implementation 'com.firebaseui:firebase-ui-auth:6.2.0' добавьте эту строку в build.gradle и обновите до последней версии

      // Choose authentication providers
        List<AuthUI.IdpConfig> providers = Arrays.asList(
      new AuthUI.IdpConfig.PhoneBuilder().build());  // can add more providers in future in that list without breaking existing code
      // Create and launch sign-in intent
      startActivityForResult(
      AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .build(),
    REQUEST_CODE);

Вот и все здесь - официальная документация для этого, и не забудьте включить аутентификацию телефона с консоли

также вы упомянули в комментарии, что не знаете фрагментов, поэтому я рекомендую вам изучить android сначала основы перед переходом на firebase

РЕДАКТИРОВАТЬ

Относительно сбора информации о пользователе

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        String name = user.getDisplayName();
        String phone = user.getPhoneNumber();
        String email = user.getEmail();
        Uri photoUrl = user.getPhotoUrl();

примечание если вы аутентифицируетесь по телефону, только user.getPhoneNumer(); вернет номер телефона, а другие методы вернут null, а в случае аутентификации по почте user.getPhoneNumber() вернет null, на практике вы должны проверить их все на недействительность, прежде чем использовать их где-то.

Хорошего дня, Рохан

0 голосов
/ 09 мая 2020

Вы можете увидеть информацию об этом здесь https://firebase.google.com/docs/auth/android/phone-auth

// The test phone number and code should be whitelisted in the console.
String phoneNumber = "some_number";
String smsCode = "some_codes";

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings();

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode);

PhoneAuthProvider phoneAuthProvider = PhoneAuthProvider.getInstance();
phoneAuthProvider.verifyPhoneNumber(
  phoneNumber,
  60L,
  TimeUnit.SECONDS,
  this, /* activity */
  new OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(PhoneAuthCredential credential) {
      // Instant verification is applied and a credential is directly returned.
    }

    ... /* other callbacks */
  }
...