2017-04-15 40 views
1
  • 我試圖通過Firebase構建具有登錄/註冊功能的應用程序。我正在和一個合作伙伴(他在Linux上,我在Mac上)一起工作,他能夠獲得身份驗證的工作,但由於某種原因,我不是。我們在SDK管理器中檢查了所有相同的代碼,SDK工具,運行相同版本的所有內容。
  • 這裏的gradle這個文件:Android驗證碼firebase錯誤:找不到com.google.firebase.auth的本地模塊描述符類

    
    compile 'com.android.support:appcompat-v7:25.3.0' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    compile 'com.google.firebase:firebase-auth:10.2.1' 
    compile 'com.android.support:design:25.3.0' 
    testCompile 'junit:junit:4.12' 
    
  • ,代碼:



    public class RegisterActivity extends AppCompatActivity { 
    private FirebaseAuth mAuth; 
    private FirebaseAuth.AuthStateListener mAuthListener; 

    private EditText mUsernameField; 
    private EditText mPasswordField; 
    private EditText mConfirmPasswordField; 

    private Button mRegisterButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     mUsernameField = (EditText) findViewById(R.id.enterUsername); 
     mPasswordField = (EditText) findViewById(R.id.enterPassword); 
     mConfirmPasswordField = (EditText) findViewById(R.id.confirmPassword); 
     mRegisterButton = (Button) findViewById(R.id.confirmRegistration); 

     mRegisterButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       createAccount(mUsernameField.getText().toString(), mPasswordField.getText().toString()); 
      } 
     }); 
     mAuth = FirebaseAuth.getInstance(); 

     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d("account", "onAuthStateChanged:signed_in:" + user.getUid()); 
       } else { 
        // User is signed out 
        Log.d("account", "onAuthStateChanged:signed_out"); 
       } 
       // ... 
      } 
     }; 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 
     } 
    } 

    private void createAccount(String email, String password) { 
     Log.d("account", "createAccount:" + email); 
     if (!validateForm()) { 
      return; 
     } 

     // [START create_user_with_email] 
     mAuth.createUserWithEmailAndPassword(email, password) 
       .addOnCompleteListener(this, new OnCompleteListener() { 
        @Override 
        public void onComplete(@NonNull Task task) { 
         Log.d("account", "createUserWithEmail:onComplete:" + task.isSuccessful()); 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
          Toast.makeText(RegisterActivity.this, R.string.register_failed, 
            Toast.LENGTH_SHORT).show(); 
         } 

         else { 
          Intent intent = new Intent(RegisterActivity.this, MainActivity.class); 
          RegisterActivity.this.startActivity(intent); 
          finish(); 
         } 
        } 
       }); 
     // [END create_user_with_email] 
    } 

    private boolean validateForm() { 
     boolean valid = true; 

     String email = mUsernameField.getText().toString(); 
     if (TextUtils.isEmpty(email)) { 
      mUsernameField.setError("Required."); 
      valid = false; 
     } else { 
      mUsernameField.setError(null); 
     } 

     String password = mPasswordField.getText().toString(); 
     if (TextUtils.isEmpty(password)) { 
      mPasswordField.setError("Required."); 
      valid = false; 
     } else { 
      mPasswordField.setError(null); 
     } 

     String confirmPassword = mConfirmPasswordField.getText().toString(); 
     if (TextUtils.isEmpty(confirmPassword)) { 
      mConfirmPasswordField.setError("Required."); 
      valid = false; 
     } else { 
      mConfirmPasswordField.setError(null); 
     } 

     if(!confirmPassword.equals(password)) { 
      mConfirmPasswordField.setError("Passwords must be the same."); 
      valid = false; 
     } 

     return valid; 
    } 

} 

  • 最後的錯誤:

W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found. 
W/GooglePlayServicesUtil: Google Play Store is missing. 
I/art: Background partial concurrent mark sweep GC freed 5866(313KB) AllocSpace objects, 1(14KB) LOS objects, 39% free, 2MB/4MB, paused 5.176ms total 27.761ms 
D/account: createUserWithEmail:onComplete:false

  • 差不多一切都被教科書從火力地堡網站。請幫助,我們一直堅持這個小時,並沒有其他類似的問題有幫助。

回答

1

選項1:進入火力地堡控制檯<認證<登錄方法,看看你是否在匿名狀態下使用。如果是,請禁用該功能並啓用電子郵件/密碼或您正在使用的任何登錄方法。

選擇2:檢查如果您正在使用的測試設備運行的是谷歌播放服務9.0.0或更高版本。

+0

選項1是有益的。 –

0

您可以檢查您的Google Play服務版本嗎?

先決條件:

  • 的Android設備運行谷歌Play服務,9.0.0或更高版本
  • 將谷歌從Android SDK管理器
  • 過Android Studio 1.5或更高
  • 版本的Android Play服務SDK Studio項目及其包名稱。

此問題的原因之一可能是,您在Firebase> Auth儀表板中的登錄方法可能被禁用。

編輯

The 10.2.1 version wasn't available for downloading from any (virtual) device that you tested, required update.

的谷歌遊戲在單機版SDK管理器底部的額外部分顯示對通過仿真器使用的版本沒有任何影響服務的版本。仿真器在系統映像上運行,配置爲包含某些Play服務的特定版本,但並不總是相同的。

你應該確認您已經下載了具有類似於10.2.1版本(最新的)版本兼容性的最新模擬器映像。

+0

我在模擬器上運行Nexus 7 API 22(Android 5.1.1,API 22)。我的Google Play服務SDK安裝的版本爲39,Android Studio爲2.3.1,Sign In方法授權用於電子郵件,這是我一直在嘗試的方式。 –

+0

請檢查我編輯了我的答案。 – Aryan

1

添加的createUserWithEmailAndPassword()一個logcomplete()偵聽器來查看到底是什麼失敗背後的原因。

if (!task.isSuccessful()) { 
    Log.e(TAG, "onComplete: Failed=" + task.getException().getMessage()); 
    } 

這可能是由於passwordemail您輸入創建一個帳戶。 檢查:

  • ,如果你輸入的電子郵件是正確的格式,並確實存在。
  • 如果密碼足夠強大,可以接受(通常不少於6個字母)。
  • 如果已經有一個帳戶使用同一封電子郵件。
0
在模擬器上

,有時在谷歌Play服務將不會更新

相關問題