Ionic 2 - чтение otp из смс и вход в дашборд

Я работаю над автоматической проверкой otp ionic2. В этом случае применяется разрешение SMS, и если номер мобильного устройства существует или читает otp из sms, он переключается непосредственно на страницу панели инструментов, для чего я использую функцию под названием watchSMS (), как показано в угловом коде, но она выдает ошибку (SMS не определено ).

Любая помощь будет принята с благодарностью.

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, AlertController, Platform, LoadingController, ToastController, ViewController } from 'ionic-angular';
import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';
import { Network } from '@ionic-native/network';
import { CrudHttpProvider } from '../../providers/crud-http/crud-http';
import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
import { ConstantVariable } from '../../app/constant-variable';
import { HomePage } from '../home/home';
// import { SMS } from '@ionic-native/sms';
import { Sim } from "@ionic-native/sim";
import { AndroidPermissions } from '@ionic-native/android-permissions';

declare var window: any;
declare var SMS:any;

@IonicPage()
@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
})
export class LoginPage {

  public myForm: FormGroup;  
  public mobile: any;
  public db_name: any;
  public url_play_store: any;
  public buttonDisabled: any;

  public studname: any;
  public tuition_name: any;
  public prn: any;
  public otp: any;
  public api_key: any;

  public userinfo:any;
  public stored_mb:any;

  public simInfo: any;
  public cards: any;
  public phoneNumber: any;

  constructor(public navCtrl: NavController, public navParams: NavParams, public formBuilder: FormBuilder, public alertCtrl: AlertController, public platform: Platform, public network: Network, public loadingCtrl: LoadingController, public toastCtrl: ToastController, public crudHttpProvider: CrudHttpProvider, public sqlite: SQLite, public viewCtrl: ViewController, public sim: Sim, public androidPermissions: AndroidPermissions) {


    this.db_name = ConstantVariable.db_name;

    this.myForm = this.formBuilder.group({
      'mobile': ['', [Validators.required]],
    }); 

  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad LoginPage');
  }

  login() {

    let post_data = { 'api_url': 'checkMobileNumber', "post": {'mobile': this.mobile} };
    this.crudHttpProvider.callToCrudPost(post_data)
      .then(data => {

        let res = data;
        if (res['status'] == 100) {

          this.studname     = res['data'].studname;
          this.tuition_name = res['data'].tuition_name;
          this.prn          = res['data'].prn;
          this.otp          = res['data'].otp;
          this.api_key      = res['data'].api_key;

          this.navCtrl.push('RegisterPage',{
            "studname":     this.studname,
            "tuition_name": this.tuition_name,
            "prn":          this.prn,                                                           
            "otp":          this.otp,                                                          
            "api_key":      this.api_key                                                                
          });
          this.viewCtrl.dismiss();

          this.checkPermission(); 

        } 
      });

  }

  checkPermission() {
    this.androidPermissions.checkPermission
    (this.androidPermissions.PERMISSION.READ_SMS).then(
    success => {

    //if permission granted
    this.watchSMS();
    },
    err =>{

    this.androidPermissions.requestPermission
    (this.androidPermissions.PERMISSION.READ_SMS).
    then(success=>{
      this.watchSMS();
    },
    err=>{
    alert("cancelled")
    });
    });

    this.androidPermissions.requestPermissions
    ([this.androidPermissions.PERMISSION.READ_SMS]);

  }

  watchSMS() {   
    if(window.SMS) window.SMS.startWatch(function(){  
      console.log('Succeed to start watching SMS'); 
      this.navCtrl.push('DashboardPage');

      let toast = this.toastCtrl.create({
        message: "Succeed to start watching SMS.",
        duration: 4000
      });
      toast.present();

      document.addEventListener('onSMSArrive', this.smsArived);
    }, function(){   
      console.log('failed to start watching SMS');  

      let toast = this.toastCtrl.create({
        message: "failed to start watching SMS.",
        duration: 4000
      });
      toast.present();
    });  

  }

  stopWatchSMS() {   
    if(window.SMS) window.SMS.stopWatch(function(){ 
       console.log('Succeed to stop watching SMS'); 
    }, function(){  
       console.log('failed to stop watching SMS');    
    }); 
  }

  smsArived = (result: any) => { 
      console.log("SMS DATA 2" + result);

      let toast = this.toastCtrl.create({
        message: "RESULT " + result,
        duration: 4000
      });
      toast.present();

      this.stopWatchSMS();   
  }

}
1
0
981
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я реализовал автоматическую проверку OTP через этот руководство. У меня не было проблем. SMS вызывается внутри platform.ready() и говорит: «Убедитесь, что всегда используйте метод в Ionic Framework внутри platform.ready (), иначе он не будет работать». Наконец, я думаю, вам не нужно использовать window.

ionViewDidEnter()
    {

    this.platform.ready().then((readySource) => {
    if(SMS) SMS.startWatch(()=>{
               console.log('watching started');
            }, Error=>{
           console.log('failed to start watching');
       });

      document.addEventListener('onSMSArrive', (e:any)=>{
           var sms = e.data;
           console.log(sms);

           });

        });
    }

Другие вопросы по теме