اذهب إلى المحتوى
  • 0

قراءة رمز التحقق otp بشكل تلقائي

Flutter Dev

السؤال

تحيه طيبه للجميع

لدي كود لتسجيل الدخول بواسطة رقم الهاتف والتحقق من otp  المرسل من خلال sms  الى الهاتف من firebase الكود يعمل بشكل جيد ولكن المشكلة لا يتم تعبئة الرمز بعد وصوله الى الهاتف او وصول الرسالة النصية الى الهاتف بشكل تلقائي في حقول textfiled  

ارغب بجعل القراءة تكون بشكل تلقائي بحيث ان المستخدم بعد ان يصل اليه الرمز يتم التحقق بشكل تلقائي وتعبئة الحقول  ياليت اذا احد يعرف الطريقة يساعدنا

الكود المستعمل لدي كامل :

 final FirebaseAuth _auth = FirebaseAuth.instance;
  void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) async {
    setState(() {
      showLoading = true;
    });

    try {
      final authCredential = await _auth.signInWithCredential(phoneAuthCredential);

      setState(() {
        showLoading = false;
      });

      if (authCredential?.user != null) {


      }
    } on FirebaseAuthException catch (e) {
      setState(() {
        showLoading = false;
      });
      print(e.message);
    }
  }


  @override
  Widget build(BuildContext context) {

    return    MaterialApp(
    home: Scaffold(
      body: Center(
        child: SingleChildScrollView(
          child: Container(
            child: Column(

              children: [


                Container(

                  padding: const EdgeInsets.all(16.0),

                  child: Column(

                    children: [

                      Row(
                        children: [
                          Expanded(
                            child: PinEntryTextField(

                              fields: 6,
                              onSubmit: (text) {
                                smsOTP = text as String;
                              },
                            ),
                          ),
                        ],
                      ),

                      GestureDetector(
                        onTap: () {
                          verifyOtp();
                        },
                        child: Container(
                          margin: const EdgeInsets.all(8),
                          height: 45,
                          width: double.infinity,
                          decoration: BoxDecoration(
                            color:     CustomColors.Background,
                            borderRadius: BorderRadius.circular(0),
                          ),
                          alignment: Alignment.center,
                          child:  Text('Check'),

                        ),
                      ),
                    ],
                  ),
                )
              ],
            ),
          ),
        ),
      ),
    ),
    );
  }


  Future<void> generateOtp(String contact) async {
    final PhoneCodeSent smsOTPSent = (String verId, [int forceCodeResend]) {
      verificationId = verId;
    };
    try {
      await _auth.verifyPhoneNumber(
          phoneNumber: contact,
          codeAutoRetrievalTimeout: (String verId) {
            verificationId = verId;
          },
          codeSent: smsOTPSent,
          timeout: const Duration(seconds: 60),
          verificationCompleted: (AuthCredential phoneAuthCredential) {},
          verificationFailed: (exception) {
            print(exception);

          });
    } catch (e) {
      handleError(e as PlatformException);

    }
  }

  
  Future<void> verifyOtp() async {
    if (smsOTP == null || smsOTP == '') {
      print('please enter 6 digit otp');
      return;
    }
    try {

      final AuthCredential credential = PhoneAuthProvider.credential(
        verificationId: verificationId,
        smsCode: smsOTP,
      );
      signInWithPhoneAuthCredential(credential);

    } catch (e) {
      handleError(e as PlatformException);
    } }

  void handleError(PlatformException error) {
    switch (error.code) {
      case 'ERROR_INVALID_VERIFICATION_CODE':
        FocusScope.of(context).requestFocus(FocusNode());
        setState(() {
          errorMessage = 'Invalid Code';
        });
        print('error');
        break;
      default:
        print('error');
        break;
    }
  }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يمكن استخدام الحزمة sms_autofill لقراءة رسائل SMS بشكل تلقائي

واستخدامها بالشكل:

await SmsAutoFill().listenForCode;

طبعا يوجد widget خاصة  PinFieldAutoFill :

PinFieldAutoFill(
                decoration: // التنسيق,
                currentCode: // كود التحقق الحالي
                onCodeSubmitted: //الكود المعاد إرساله
                onCodeChanged: //code  callback عند
                codeLength: // طول الكود
              ),

الرابط: pub.dev/packages/sms_autofill

  • لن تحتاج لهذه الحزمة في IOS
  • الوصول ل SMS لايحتاج صلاحيات

بعض القيود لتحقيق عملية التحقق : developers.google.com/identity/sms-retriever/verify

القيود: 

  1. طول الرسالة ليس أكثر من 140 bytes
  2. تحوي على كود فريد لمرة واحدة كمثال: 
    Your ExampleApp code is: 123ABC78

     

  3. تقوم بإرفاق 11-character hash string للتعريف بتطبيقك مثل 

    FA+9qCX9VSu

الرابط السابق يحوي جميع التفاصيل

حزمة احتياطية:

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 9 دقائق مضت قال مروان مروان3:

كيف ممكن ارفق هذا الكود لدى الرسالة التي تاتي من الفايربيز هذا الجزء الذي لم افهم العمل عليه

الرسالة التي ترسلها فايربيز يمكن تخصيصها، الكود يتم تشكيله لكل طلبية مختلفة، أما رمز تهميش مفتاح التطبيق تحسبه أنت مرة واحدة و تضيفه لقالب رسالة sms افتح اعدادات فايربيز ومن ثم قالب الرسالة..

app hash code يتم تشكيله باستخدام سطر الأوامر كما في الرابط المرفق من التوثيق

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 13 ساعات قال Wael Aljamal:

يمكن استخدام الحزمة sms_autofill لقراءة رسائل SMS بشكل تلقائي

واستخدامها بالشكل:


await SmsAutoFill().listenForCode;

طبعا يوجد widget خاصة  PinFieldAutoFill :


PinFieldAutoFill(
                decoration: // التنسيق,
                currentCode: // كود التحقق الحالي
                onCodeSubmitted: //الكود المعاد إرساله
                onCodeChanged: //code  callback عند
                codeLength: // طول الكود
              ),

الرابط: pub.dev/packages/sms_autofill

  • لن تحتاج لهذه الحزمة في IOS
  • الوصول ل SMS لايحتاج صلاحيات

بعض القيود لتحقيق عملية التحقق : developers.google.com/identity/sms-retriever/verify

القيود: 

  1. طول الرسالة ليس أكثر من 140 bytes
  2. تحوي على كود فريد لمرة واحدة كمثال: 
    
    Your ExampleApp code is: 123ABC78

     

  3. تقوم بإرفاق 11-character hash string للتعريف بتطبيقك مثل 

    FA+9qCX9VSu

الرابط السابق يحوي جميع التفاصيل

حزمة احتياطية:

اهلا بك اخي الكريم 

شاكر لك ردك الغالي

نعم انا قمت بتجربة هذا الحزمة وهيا شغاله ولكن المشكله التي لم افهم حلها بصراحه 

هم يطلبون في كل رسالة ان يكون هنالك معرف التطبيق او كود مرفق في الرسالة مثل الذي انت قمت بوضعه : 

  1. FA+9qCX9VSu

 

كيف ممكن ارفق هذا الكود لدى الرسالة التي تاتي من الفايربيز هذا الجزء الذي لم افهم العمل عليه 

اما باقي الاجزاء وتشغيل الكود لتجربه كل شي ناجح 100%100

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...