Я разрабатываю ionic app(v-4)
. Мое приложение должно проверять пользователей по номеру телефона, поэтому я добавил firebase
в мое приложение.Ниже приведены шаги, которые я сделал:
- Зарегистрировал приложение для Android в
firebase
, указав android package name
и SHA - 1 key
в базе данных. - Скачал и добавил
google-services.json
файл в папке root
приложения. - Включение для телефона
authentication
в firebase
. Затем установлены необходимые плагины:
npm установить firebase @ angular / fire --save
плагин ionic cordova добавить аутентификацию cordova-plugin-firebase-
npminstall @ ionic-native / firebase-authentication
Затем добавили необходимые файлы в файл environment.ts
, например:
firebase: {
apiKey: 'AIz..........',
authDomain: '............',
databaseURL: '...........',
projectId: '...........',
storageBucket: '.........',
messagingSenderId: '..........'
}
Добавлены необходимые imports
и providers
в app.module.ts
файле:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { FirebaseAuthentication } from '@ionic-native/firebase-authentication/ngx';
import { AngularFireModule } from '@angular/fire';
import { environment } from '../environments/environment';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
AngularFireModule.initializeApp(environment.firebase, 'app-name'),
],
providers: [
StatusBar,
SplashScreen,
FirebaseAuthentication,
{provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
})
класс экспорта AppModule {}
Затем в login page
iЯ создаю и проверяю OTP
следующим образом:
HTML
<ion-content padding>
<ion-item>
<ion-label position="floating">Phone</ion-label>
<ion-input type="text" [(ngModel)]="phone"></ion-input>
</ion-item>
<ion-button expand="full" (click)="send()">Send</ion-button>
<ion-item>
<ion-label position="floating">Enter OTP</ion-label>
<ion-input type="text" [(ngModel)]="code"></ion-input>
</ion-item>
<ion-button expand="full" (click)="verify()">Verify</ion-button>
</ion-content>
TS
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import {
NavController,
AlertController,
LoadingController,
Platform
} from '@ionic/angular';
import { FirebaseAuthentication } from '@ionic-native/firebase-authentication/ngx';
import * as firebase from 'firebase';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {
verificationId: any;
code = '';
phone: number;
constructor(public navCtrl: NavController) { }
ngOnInit() {}
send() {
const tell = '+91' + this.phone;
(window as any).FirebasePlugin.verifyPhoneNumber(tell, 60, (credential) => {
console.log(credential);
this.verificationId = credential.verificationId;
}, (error) => {
console.error(error);
alert(error);
});
}
verify() {
const signInCredential = firebase.auth.PhoneAuthProvider.credential(this.verificationId, this.code);
firebase.auth().signInWithCredential(signInCredential).then((info) => {
console.log(info);
this.navCtrl.navigateRoot('/home');
}, (error) => {
console.log(error);
});
}
}
Теперь все отлично работает на Androidустройства (до версии 9), но он не генерирует OTP для устройств 9 или выше 9.
Исправьте меня, если что-то не так с code/plugins
.При необходимости я POST
необходимые файлы.