2

场景= 我有一个允许用户向其他用户发送消息的应用程序。我还有一个按钮,可以显示用户拥有的新(未读)消息的数量。金额将显示在底部标签栏上的徽章图标上。

我一直在做什么= 如果为当前用户发布了新消息,则每 5 秒查询一次。

- (void)queryForMessagesBadgeNumber:(NSTimer *)timer
{
    NSString *currentUserID = [PFUser currentUser][@"userID"];

    PFQuery *badgeQuery = [PFQuery queryWithClassName:@"Message"];
    [badgeQuery whereKey:@"receiverID" equalTo:currentUserID];
    [badgeQuery whereKey:@"wasRead" equalTo:[NSNumber numberWithBool:NO]];
    [badgeQuery countObjectsInBackgroundWithBlock:^(int number, NSError *error)
    {
        if (number == 0)
        {
             NSLog(@"No unread messages");
        }
        else
        {
            [[self.tabBar.items objectAtIndex:2] setBadgeValue:[NSString stringWithFormat:@"%d",number]];
        }
    }];
}

问题= 这对“每秒请求数”计数非常繁重。Parse 允许 30req/sec 的免费增值服务,并且仅在我的一部手机上,我在此查询中使用了一半。

问题=有谁知道我可以在这里做的更有效的方法吗?

4

1 回答 1

2

使用推送通知。

当用户向另一个用户发送消息时,您可以让应用程序向接收者发送推送通知。您可以选择是否显示横幅,或者只是更新徽章。

指南位于此处 - Parse Push 指南

解析推送对于一定数量的通知也是免费的,但比每 x 秒轮询一次数据库要好得多

于 2014-07-28T12:14:10.820 回答