- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用电话身份验证,它工作正常,但是在注销两次后尝试显示此错误。发生内部错误。 [MISSING_CLIENT_IDENTIFIER],但未获得验证码。我已插入所有gradle文件google json文件,并在firebase控制台中启用了身份验证。一开始工作正常,但现在显示奇怪的错误,我现在只能输入白名单号码
我的build.gradle文件
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
maven {
url "https://maven.google.com"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.devlearn.sohel.tkash"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:animated-vector-drawable:27.1.1'
implementation 'com.android.support:customtabs:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.github.ybq:Android-SpinKit:1.1.0'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.android.gms:play-services-ads:15.0.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:gridlayout-v7:27.1.1'
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-storage:16.0.1'
implementation 'com.firebaseui:firebase-ui-database:4.0.0'
implementation 'com.google.firebase:firebase-auth:16.0.2'
implementation 'com.budiyev.android:circular-progress-bar:1.2.0'
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
implementation 'com.github.d-max:spots-dialog:0.7@aar'
implementation 'com.github.HotBitmapGG:RingProgressBar:V1.2.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'
package com.devlearn.sohel.tkash;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.CountDownTimer;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.devlearn.sohel.tkash.Models.UserDetails;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseException;
import com.google.firebase.FirebaseTooManyRequestsException;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.concurrent.TimeUnit;
import dmax.dialog.SpotsDialog;
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
public class LoginActivity extends AppCompatActivity {
private EditText edtPhone;
private EditText edtName;
private TextView txtMessege;
private RelativeLayout rootlayout;
private ProgressBar progressBar;
private Button btnLogin;
private FirebaseAuth mAuth;
private DatabaseReference mDatabaseUsers;
public String phoneNumber;
public String userName;
private String mVerificationId;
public SpotsDialog waitingDialog;
private PhoneAuthProvider.ForceResendingToken mResendToken;
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks;
// ctrl+o
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.SplashThme);
//before setcontentview
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/Ubuntu.ttf")
.setFontAttrId(R.attr.fontPath)
.build());
setContentView(R.layout.activity_login);
edtPhone = (EditText)findViewById(R.id.edtphone);
edtName = findViewById(R.id.edtName);
btnLogin = (Button)findViewById(R.id.btnLogin);
txtMessege = (TextView)findViewById(R.id.txtMessege);
rootlayout = (RelativeLayout)findViewById(R.id.rootlayout);
mAuth = FirebaseAuth.getInstance();
mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users");
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// startActivity(new Intent(LoginActivity.this,MainActivity.class));
phoneNumber = edtPhone.getText().toString();
userName = edtName.getText().toString().trim();
if(TextUtils.isEmpty(phoneNumber))
{
edtPhone.setError("Incorrect phone number format");
requestFocus(edtPhone);
}
else if(TextUtils.isEmpty(userName))
{
edtName.setError("Please insert your name");
requestFocus(edtName);
}
else
{
phoneNumber = edtPhone.getText().toString();
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
signInWithPhoneAuthCredential(phoneAuthCredential);
}
@Override
public void onVerificationFailed(FirebaseException e) {
String error = e.getMessage();
Snackbar.make(rootlayout, "Error "+e, Snackbar.LENGTH_LONG)
.show();
Log.d("Error fire",error);
if (e instanceof FirebaseAuthInvalidCredentialsException) {
// Invalid request
// ...
String erro = e.getMessage();
Toast.makeText(LoginActivity.this, "error"+ erro, Toast.LENGTH_SHORT).show();
Log.d("Error fire",erro);
} else if (e instanceof FirebaseTooManyRequestsException) {
// The SMS quota for the project has been exceeded
// ...
String err = e.getMessage();
Toast.makeText(LoginActivity.this, "error"+ err, Toast.LENGTH_SHORT).show();
Log.d("Error fire",err);
}
}
@Override
public void onCodeSent(String verificationId,
PhoneAuthProvider.ForceResendingToken token) {
// The SMS verification code has been sent to the provided phone number, we
// now need to ask the user to enter the code and then construct a credential
// by combining the code with a verification ID.
// Save verification ID and resending token so we can use them later
mVerificationId = verificationId;
mResendToken = token;
// progressBar.setVisibility(View.INVISIBLE);
// ...
}
};
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phoneNumber,
60,
TimeUnit.SECONDS,
LoginActivity.this,
mCallbacks
);
LoginUisngPhone();
}
}
});
}
private void LoginUisngPhone() {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("Verification");
// dialog.setMessage("Please provide verification Code");
LayoutInflater inflater = LayoutInflater.from(this);
View layout_verification = inflater.inflate(R.layout.layout_verification,null);
final EditText edtVerificationCode = layout_verification.findViewById(R.id.edtVerificationCode);
final TextView txtCountdown = layout_verification.findViewById(R.id.txtCountdown);
final ProgressBar progressBar = layout_verification.findViewById(R.id.progressbar);
CountDownTimer countDownTimer = new CountDownTimer(60000, 1000) {
public void onTick(long millisUntilFinished) {
txtCountdown.setText("Please provide Verificatin Code sec remaining: " + millisUntilFinished / 1000);
txtMessege.setTextColor(getResources().getColor(R.color.errorcolor));
txtMessege.setText("Please wait for "+ millisUntilFinished / 1000+" sec to try Again");
btnLogin.setEnabled(false);
edtName.setEnabled(false);
edtPhone.setEnabled(false);
}
public void onFinish() {
txtCountdown.setText("Please Try Again!");
txtMessege.setText("A verification Code will be sent when you click send verification");
btnLogin.setEnabled(true);
edtName.setEnabled(true);
edtPhone.setEnabled(true);
}
}.start();
dialog.setView(layout_verification);
dialog.setPositiveButton("SIGN IN", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// dialog.dismiss();
//disable sign in button while processing
// btnLogin.setEnabled(false);
//validate the data
if (TextUtils.isEmpty(edtVerificationCode.getText().toString())) {
// edtVerificationCode.setError("Enter verification Code");
// requestFocus(layout_verification.findViewById(R.id.edtVerificationCode));
Toast.makeText(LoginActivity.this, "Insert Code", Toast.LENGTH_SHORT).show();
}
else
{
String verificationCode = edtVerificationCode.getText().toString();
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, verificationCode);
//dot waitng process
// waitingDialog = new SpotsDialog(LoginActivity.this);
// waitingDialog.show();
signInWithPhoneAuthCredential(credential);
// waitingDialog.dismiss();
}
}
});
dialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.show();
}
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
// Log.d(TAG, "signInWithCredential:success");
//dot waitng process
// waitingDialog.dismiss();
Toast.makeText(LoginActivity.this, "Success! checking user exists or not", Toast.LENGTH_SHORT).show();
checkUserExists();
// ...
} else {
// Sign in failed, display a message and update the UI
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
// The verification code entered was invalid
String error = task.getException().getMessage();
Snackbar.make(rootlayout, "Invalid " + error, Snackbar.LENGTH_LONG)
.show();
Log.d("Error fire2",error);
}
}
}
});
}
private void checkUserExists() {
if(mAuth.getCurrentUser()!=null)
{
final String user_id = mAuth.getCurrentUser().getUid();
mDatabaseUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChild(user_id))
{
Toast.makeText(LoginActivity.this, "Welcome!!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
else
{
// Intent intent = new Intent(LoginActivity.this,AccountSetupActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// startActivity(intent);
mDatabaseUsers.child(user_id).child("userName").setValue(userName);
mDatabaseUsers.child(user_id).child("userPhone").setValue(phoneNumber);
mDatabaseUsers.child(user_id).child("currentBalance").setValue(0.0);
mDatabaseUsers.child(user_id).child("totalBalance").setValue(0.0);
Toast.makeText(LoginActivity.this, "Success!!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
private void requestFocus(View view) {
if (view.requestFocus()) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
}
最佳答案
终于我解决了这个问题,这是因为我在WiFi网络和移动网络中使用同一设备进行了多次尝试和测试。因此,他们以某种方式阻止了对此客户ID的请求。一旦我在具有不同网络的其他设备中尝试过,一切都很好。
谢谢大家
关于android - 发生内部错误。 [MISSING_CLIENT_IDENTIFIER],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50968563/
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
我正在尝试做类似的事情: SELECT SUM( CASE WHEN ( AND EXISTS(SELECT 1
我想问如何在外部 ng-repeat 内部正确使用内部 ng-repeat: 这意味着你想使用这样的东西: {{milestone.id}} {{
我希望在 wordpress 的仪表板内编辑 css 样式并且如果可能的话不必编辑 php 文件。 我知道至少可以编辑一些属性,所以我希望我可以直接在仪表板中编辑所有属性。 更具体地说如何更改自定义类
我在安装在 windows10 上的 vmware 中的 Ubuntu 上安装了伪分布式独立 hadoop 版本。 我从网上下载了一个文件,复制到ubuntu本地目录/lab/data 我在 ubun
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
在我的一些测试帮助程序代码中,我有一个名为 FakeDbSet(Of T) 的 IDbSet(Of T) 实现,它模拟了许多 EF 行为,但没有实际的数据库。我将类声明为 Friend ,因为我想强制
我正在寻找 Cassandra/CQL 的常见 SQL 习语 INSERT INTO ... SELECT ... FROM ... 的表亲。并且一直无法找到任何以编程方式或在 CQL 中执行此类操作
如何防止内部 while 循环无限运行?问题是,如果没有外部 while 循环,内部循环将毫无问题地运行。我知道它必须对外循环执行某些操作,但我无法弄清楚是什么导致了问题。 import java.u
我正在努力学习更多有关 C++ 的知识,但在国际象棋程序中遇到了一些代码,需要帮助才能理解。我有一个 union ,例如: union b_union { Bitboard b; st
这是我项目网页中的代码片段。这里我想显示用户选择的类别,然后想显示属于该类别的主题。在那里,用户可以拥有多个类别,这没有问题。我可以在第一个 while 循环中打印所有这些类别。问题是当我尝试打印主题
我想知道如何在 swing 中显示内部框架。这意味着,当需要 JFrame 时,通常我所做的是, new MyJFrame().setVisible(true); 假设之前的表单也应该显示。当显示这个
我最近发现了一些有趣的行为,这让我想知道对象如何知道存在哪些全局变量。例如,假设我有一个文件“test.py”: globalVar = 1 toDelete = 2 class Test(objec
我知道它已经在这里得到回答: google maps drag and drop objects into google maps from outside the Map ,但这并不完全是我所需要的
我目前正在学习Javascript DOM和innerHTML,发现在理解innerHTML方面存在一些问题。 这是我的代码:http://jsfiddle.net/hphchan/bfjx1w70/
我构建了一个布局如下的库: lib/ private_class_impl.cc private_class_decl.h public_class_impl.cc include/
我有一个使用 bootstrap 3 的组合 wordpress 网站。它基本上是一个图像网格。当屏幕展开时,它会从三列变为四列。移动时它是一列。 我想出了如何调整图像的顶部和底部边距,但我希望图像的
我正在试用 MSP-EXP430G2 的教程程序,使用 Code Composer Studio 使 LED 闪烁。最初,它有一个闪烁的无限循环: for(;;) // This emp
我是一名优秀的程序员,十分优秀!