Firebase error 400 TOO_MANY_ATTEMPTS_TRY_LATER

3,100 views
Skip to first unread message

Антон Титков

unread,
Aug 26, 2016, 3:37:49 PM8/26/16
to Firebase Google Group
I am creating mobile app using Firebase Realtime Database and getting the following error after several requests:


08-26 19:59:46.406 2252-2307/com.google.android.gms I/AuthChimeraService: Error description received from server: {
                                                                           "error": {
                                                                            "errors": [
                                                                             {
                                                                              "domain": "global",
                                                                              "reason": "invalid",
                                                                              "message": "TOO_MANY_ATTEMPTS_TRY_LATER"
                                                                             }
                                                                            ],
                                                                            "code": 400,
                                                                            "message": "TOO_MANY_ATTEMPTS_TRY_LATER"
                                                                           }
                                                                          }


public class FirebaseRDBConnection implements FRDBConnectionStateListener{

private static FirebaseRDBConnection sInstance;

FirebaseAuth mAuth;
FirebaseDatabase mDatabase;

private FirebaseRDBConnection(){
mDatabase = FirebaseDatabase.getInstance();
}

public static FirebaseRDBConnection getInstance(){
if(sInstance == null)
sInstance = new FirebaseRDBConnection();
return sInstance;
}

boolean mIsConnected;

private void setConnectionState(boolean isConnected){
if(isConnected == mIsConnected) return;
mIsConnected = isConnected;
if(mIsConnected)
onConnected();
else
onUnreachable();
}

public void signIn(){
if(mAuth == null) mAuth = FirebaseAuth.getInstance();
if(mAuth.getCurrentUser() == null){
mAuth.signInAnonymously().addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(mAuth.getCurrentUser() != null)
setConnectionState(true);
else
setConnectionState(false);
}
});
}
}

public void signOut(){
if(mAuth != null && mAuth.getCurrentUser() != null){
mAuth.signOut();
setConnectionState(false);
}
}

public boolean isConnected(){
return mIsConnected;
}

RequestOnSignIn mRequestOnSignIn;

public void requestData(String path, String startAt, String endAt, FRDBOrdering orderBy, String equalTo){
if (mIsConnected){
onRequesting(path, startAt, endAt, orderBy, equalTo);
}
else{
mRequestOnSignIn = new RequestOnSignIn(path, startAt, endAt, orderBy, equalTo);
mAuth.signInAnonymously().addOnCompleteListener(mRequestOnSignIn);
}
}

class RequestOnSignIn implements OnCompleteListener{

String mPath, mStartAt, mEndAt, mEqualTo;
FRDBOrdering mOrdering;

public RequestOnSignIn(String path, String startAt, String endAt, FRDBOrdering orderBy, String equalTo) {
mPath = path;
mStartAt = startAt;
mEndAt = endAt;
mOrdering = orderBy;
mEqualTo = equalTo;
}

@Override
public void onComplete(@NonNull Task task) {
if(mAuth.getCurrentUser() != null){
setConnectionState(true);
onRequesting(mPath, mStartAt, mEndAt, mOrdering, mEqualTo);
}
else{
setConnectionState(false);
}
}
}


@Override
public void onRequesting(
String path,
String startAtStr,
String endAtStr,
FRDBOrdering orderBy,
String equalToStr
) {

ValueEventListener valueEventListener = new RoutedValueEventListener(path);

if(!mRequestsMap.containsKey(path))
mRequestsMap.put(path, new ArrayList<ValueEventListener>());

mRequestsMap.get(path).add(valueEventListener);

Query q = mDatabase.getReference().child(path);

switch (orderBy){
case Key:
q = q.orderByKey();
break;
case Value:
q = q.orderByValue();
break;
}

if(startAtStr != null) q = q.startAt(startAtStr);

if(endAtStr != null) q = q.endAt(endAtStr);

if(equalToStr != null) q = q.equalTo(equalToStr);

q.addListenerForSingleValueEvent(valueEventListener);


if(mIsWaitingForReplies) return;

for(FRDBConnectionStateListener listener:mStateListeners)
listener.onRequesting(path, startAtStr, endAtStr, orderBy, equalToStr);

mIsWaitingForReplies = true;
}

// ....

}

I may guess that the issue caused by multiple authentication calls. But I suppose that the call of FirebaseAuth.getInstance() 
returns the same instance each time in accordance to the Singleton pattern. My class is a singleton as well and its 
lifecycle matches to app's.
Therefore I can't find any reason for this error.

Thanks for any help!

Anton Titkov

unread,
Aug 27, 2016, 12:41:47 PM8/27/16
to Firebase Google Group
Ok, it seems that it was causing by multiple sequential reading the same node.
There was a bug in my code, where requestData(the same params) have been called 2 or 3 times sequentially.
I have fixed this and it seems that the problem gone.

Probably this post will help to someone in future.
Reply all
Reply to author
Forward
0 new messages