2017-06-08 19 views
9

मैं वास्तव में एंड्रॉयड firebase के लिए नया हूँ और मैं Firebase प्रमाणीकरण के लिए आवश्यक पुस्तकालयों को लागू किया है। मैं एक वैध संख्या डालने की कोशिश, लेकिन लॉग कहते हैं इसकी:एंड्रॉयड Firebase फोन प्रमाणीकरण INVALID_APP_CREDENTIAL: ऐप सत्यापन में विफल

W/JEJE: onVerificationFailed 
com.google.firebase.FirebaseException: An internal error has occurred. [ INVALID_APP_CREDENTIAL:App validation failed ] 
at com.google.android.gms.internal.nf.zzK(Unknown Source) 
at com.google.android.gms.internal.og.zza(Unknown Source) 
at com.google.android.gms.internal.oh.run(Unknown Source) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6176) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 

यहाँ मेरी कोड है:

public class MainActivity extends AppCompatActivity { 

    private static String mVerificationId; 
    private static PhoneAuthProvider.ForceResendingToken mResendToken; 
    private static FirebaseAuth mAuth; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final EditText editText = (EditText) findViewById(R.id.phone); 
     Button submit = (Button) findViewById(R.id.submit); 

     final PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallBacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { 
      @Override 
      public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) { 
       Log.d("JEJE", "onVerificationCompleted:" + phoneAuthCredential); 

       signInWithPhoneAuthCredential(phoneAuthCredential); 
      } 

      @Override 
      public void onVerificationFailed(FirebaseException e) { 
       Log.w("JEJE", "onVerificationFailed", e); 

       if (e instanceof FirebaseAuthInvalidCredentialsException) { 
        Log.d("JEJE", "INVALID REQUEST"); 
       } else if (e instanceof FirebaseTooManyRequestsException) { 
        Log.d("JEJE", "Too many Request"); 
       } 
      } 

      @Override 
      public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) { 
       super.onCodeSent(s, forceResendingToken); 
       Log.d("JEJE", "onCodeSent:" + s); 

       mVerificationId = s; 
       mResendToken = forceResendingToken; 

      } 
     }; 

     submit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String phoneNum = editText.getText().toString(); 
       Toast.makeText(MainActivity.this, phoneNum, Toast.LENGTH_SHORT).show(); 
       verifyPhone(phoneNum,mCallBacks); 
      } 

     }); 
    } 

    private void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) { 
     mAuth.signInWithCredential(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       if (task.isSuccessful()){ 
        FirebaseUser user = task.getResult().getUser(); 
       }else { 
        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) { 
         // The verification code entered was invalid 
        } 
       } 
      } 
     }); 
    } 

    public void verifyPhone(String phoneNumber, PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks){ 
     PhoneAuthProvider.getInstance().verifyPhoneNumber(
       "+639952874699",  // Phone number to verify 
       60,     // Timeout duration 
       TimeUnit.SECONDS, // Unit of timeout 
       this,    // Activity (for callback binding) 
       mCallbacks);  // OnVerificationStateChangedCallback 
    } 

} 

कृपया मुझे बताओ क्या गलत धन्यवाद ..

+0

सुनिश्चित करें कि [फ़ायरबेस कंसोल] (https://console.firebase.google.com/u/0/project/_/authentication/providers) पर फ़ोन ऑथ सक्षम है और आपने नवीनतम 'google- services.json' फ़ाइल। –

+0

हाँ मैं सर करता हूं .. मैं दिशानिर्देशों के माध्यम से चला गया – Coozgan

+0

अभी भी मुझे एक ही परिणाम मिल जाता है – Coozgan

उत्तर

14

जोड़ना SHA Certificate Fingerprint मेरी समस्या का हल। खैर, मैं इसके लिए बिल्कुल नया हूं लेकिन मैं आउटपुट दिखाने में कामयाब रहा और मुझे एसएमएस सत्यापन प्राप्त करने में सक्षम था।

संदर्भ के लिए यहाँ मेरी कोड हैं: https://github.com/coozgan/TestingPhoneAuth

+1

यह दस्तावेज़ में "शुरू करने से पहले" अनुभाग में बताया गया है: https://firebase.google.com/docs/auth/android/phone-auth#verification -कॉलबैक –

+0

मैंने सबकुछ कॉन्फ़िगर किया है, google-services.json जोड़ा है, debug.keystore बनाया है, इसे विभिन्न फ़ोल्डर्स में रखा है और फायरबेस कंसोल में SHA-1 फिंगरप्रिंट जोड़ा है और फिर भी मुझे एक ही त्रुटि मिल रही है। क्या आप कुछ और जानकारी प्रदान कर सकते हैं कि आपने इस सत्यापन को कैसे पास किया है? – HydraOrc

+0

आपके पास किस तरह की त्रुटि है? क्या आपने सुनिश्चित किया है कि आपने फायरबेस एथ लाइब्रेरी को जोड़ा है? – Coozgan

0

अपने firebase उपकरण अपग्रेड करने का प्रयास नवीनतम संस्करण के लिए lib, फिर फायरबेस लॉगआउट के बाद फायरबेस लॉगआउट कॉल करें।

+0

ठीक है मेरी समस्या सत्यापन के संबंध में है। मैं चाहता हूं कि यह मुझे एक एसएमएस भेजें लेकिन यह नहीं ... – Coozgan

1

मैं भी यही समस्या है।

के बाद मैं कुछ अन्य समस्या पाया कुछ सामग्री पढ़ सकते हैं और अपने आवेदन चलाने के बाद।

समस्या 1: this लिंक का कहना है कि,

इसके अलावा, ध्यान दें कि फोन नंबर के साइन-इन एक भौतिक डिवाइस की आवश्यकता है और एक एमुलेटर पर काम नहीं करेगा।

तो आप परीक्षण और केवल वास्तविक उपकरण किसी भी एमुलेटर पर नहीं चल सकता।

यदि आप एमुलेटर पर चल सकते हैं तो एक ही त्रुटि देता है।

आप Firebase फोन लॉग इन उदाहरण

2

के लिए मेरे GitHub this लिंक उल्लेख कर सकते हैं मैं तुम्हारा के रूप में ठीक उसी समस्या हुई। भले ही मैंने दोनों SHA1 अपलोड किए हों, फिर भी यह "फ़ोन लॉगिन त्रुटि" संकेत देगा।

आपको Google Play के साथ फायरबेस परियोजना को लिंक करने की आवश्यकता है।

प्रमुख https://console.firebase.google.com/u/0/project/you-project-name/settings/accountlinking करने और तल पर सही क्लिक करें "Google Play पर लिंक"

2

खैर थोड़ी देर मैं तो बस सब मैं फोन सत्यापन बारे में पता चला संक्षेप में प्रस्तुत करेंगे के बाद। ऐसी कुछ चीजें हैं जिन्हें आपको करने की आवश्यकता है और इसे काम करने के लिए याद रखना चाहिए।

  1. किसी ऐप बनाएं और गूगल-services.json आप firebase से मिला साथ तुम्हारा से कनेक्ट:

    ये बातें की सूची आप क्रम में करने के लिए यह काम करने के लिए की जरूरत है। इसे सही फ़ोल्डर में रखें और सुनिश्चित करें कि आपने ग्रैडल compile 'com.google.firebase:firebase-auth:11.0.4' में जोड़ा है।

  2. फ़ायरबेस पर अपने ऐप में, मेनू पर Authentication पर जाएं। फिर Sign-in Method पर जाएं और फोन प्रदाता को सक्षम करना सुनिश्चित करें।
  3. अपने ऐप में एक शा -1 जोड़ें। अपनी प्रोजेक्ट के अंदर प्रोजेक्ट सेटिंग्स पर जाने पर, अपने ऐप सेक्शन के नीचे जाएं और आपको शा -1 को रखने के लिए एक जगह दिखाई देगी। आदेश शा-1 आप इस आदेश को चलाने की आवश्यकता प्राप्त करने के लिए

Keytool -exportcert -List -v -alias androiddebugkey -keystore % USERPROFILE% .android \ debug.keystore

जैसा कि इसके लिए फायरबेस गाइड में उल्लिखित है। ध्यान दें कि यह आदेश लाइन पर है इसलिए इसे सभी एक साथ चलाएं, और यह क्या करेगा, यह आपके उपयोगकर्ता पर .droid नामक एक छिपे हुए फ़ोल्डर में आपकी डीबग.किस्टोर फ़ाइल की तलाश करेगा। कीस्टोर के लिए डिफ़ॉल्ट उपनाम androiddebugkey है इसलिए इसे न बदलें और इसके लिए डिफ़ॉल्ट पासवर्ड android है, इसलिए जब यह आपको पासवर्ड के लिए पूछता है तो बस "एंड्रॉइड" का उपयोग करें। फिर आप रिटर्न की एक सूची देखेंगे और उनमें से एक शा -1 है। इसे अपनी परियोजना में रखो।

  1. यदि अभी भी कुछ भी काम नहीं करता है, तो इसकी हमेशा आवश्यकता नहीं होती है लेकिन यह सुनिश्चित करें कि आपका ऐप Google खाते से जुड़ा हुआ है। आपकी प्रोजेक्ट सेटिंग्स में-> खाता लिंकिंग-> Google Play।

यह भी ध्यान दें, यह अगस्त 2017 के 16 वें के बारे में लिखा गया है, आप एक एमुलेटर पर फोन सत्यापन नहीं कर सकते हैं, इसलिए वास्तविक डिवाइस का उपयोग करें।

उम्मीद है कि यह मदद करता है।

+0

धन्यवाद 'परियोजना सेटिंग्स-> खाता लिंकिंग-> Google Play.' यह मेरे लिए काम करता है। –

0

यदि आप हस्ताक्षरित निर्माण के लिए जा रहे हैं और इसे Play store में डालते हैं, तो Play store का sha1 फ़ायरबेस फिंगरप्रिंट के sha1 के समान होना चाहिए। और एक बार ऐसा करने के बाद आपको अपने ऐप को फायरबेस लॉगिन के माध्यम से प्ले स्टोर से लिंक करने की आवश्यकता है। Sha1 कुंजी परिवर्तन के बाद फायरबेस खाते में जेनरेट किए गए नए से अपने एंड्रॉइड ऐप में नई google-services.json फ़ाइल को बदलें।

संबंधित मुद्दे