NEST - FIREBASE API - 请求异常太多

时间:2014-10-08 19:46:36

标签: nest-api

您好,我正在通过Firebase SDK控制嵌套温控器。太多的请求异常我们有很大的问题。我看到了一些相关的线索,但没有解决该问题。所以我想问一下是否有人设法解决了这个问题?

3 个答案:

答案 0 :(得分:1)

来自https://developer.nest.com/documentation/data-rate-limits

  

为避免错误,我们建议您将请求限制为每分钟最多一次通话。

从此,以及SO上的其他帖子,我相信你可以在任何60分钟的窗口中发出60个请求。但我认为这是Per Access Token限制。 Nest分别说他们对设备和结构进行速率限制写入 - 我没有达到写入限制,但是我没有对设备进行大量写入。

答案 1 :(得分:0)

我有类似的问题。但只有当我认证太多时才会这样。我不得不等待一段时间才能获得更改以进行身份​​验证。现在我有一个websocket运行来获取值,并没有给出任何问题。设定值是我要做的下一步。所以为此我不知道你可以发送多少请求

答案 2 :(得分:0)

为了解决这个限制,我做了以下几点:

  • 当用户发出命令时,请勿立即将命令发送到Firebase;只是排队并在一个持续延迟后执行它,D
  • 如果用户在延迟D内发出另一个命令,则将上一个命令解除队列并排队最近的命令。

使用此策略,发出命令的次数最多为每D秒一次。

以下是代码:

-(void) delayedSetValue:(NSArray *)valuesAndURL  {
NSDictionary *values = valuesAndURL[0];
NSString *URL = valuesAndURL[1];

if ([self.subscribedURLs objectForKey:URL]) {
    [[self.fireBi objectForKey:URL]  runTransactionBlock:^FTransactionResult *(FMutableData *currentData) {
        [currentData setValue:values];
        return [FTransactionResult successWithValue:currentData];
    } andCompletionBlock:^(NSError *error, BOOL committed, FDataSnapshot *snapshot) {
        if (error) {
            NSLog(@"Error: %@", error);
        }
    } withLocalEvents:NO];
}
}

/*
 * Sets the values for the given firebase URL.
 */
- (void)setValues:(NSDictionary *)values forURL:(NSString *)URL
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    NSArray *valuesAndURL = @[values, URL];
    [self performSelector:@selector(delayedSetValue:) withObject:valuesAndURL afterDelay:5.0f];
}