【问题标题】:Firebase PresenceManaging iOSFirebase Presence 管理 iOS
【发布时间】:2014-04-13 00:14:45
【问题描述】:

我正在实现一个基于 firebase 文档的系统:

[connectionMonitor observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
    if([snapshot.value boolValue]) {
        // connection established (or I've reconnected after a loss of connection)

        // add this device to my connections list
        // this value could contain info about the device or a timestamp instead of just true
        Firebase * con = [[Firebase alloc]initWithUrl:[NSString stringWithFormat:@"%@Users/%@/connections/", urlString, currentUserId]];
        Firebase * newConnection = [con childByAutoId];
        [newConnection setValue:@YES];

        // when this device disconnects, remove it
        [newConnection onDisconnectRemoveValue];
    }
}];

如果用户完全断开连接,这可以正常工作,但这是我的问题。

我使用这个系统来查看用户是否在线。如果他们不在线,我会触发推送通知。如果用户关闭应用程序,firebase 不会断开连接,但它也不会收到更新,所以在另一端,用户看起来仍然在线。要正确设置 firebase onDisconnect 值,用户需要完全关闭应用程序。

我已经通过添加解决了这个问题:

- (void)applicationWillResignActive:(UIApplication *)application
{
    [Firebase goOffline];
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [Firebase goOffline];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
   [Firebase goOnline];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [Firebase goOnline];
}

这是正常行为,还是我做错了什么?

【问题讨论】:

    标签: ios firebase


    【解决方案1】:

    这是(当前)预期的行为。 Firebase 不会触发存在操作,直到客户端实际断开连接并且 iOS 将在应用程序进入后台后的一段时间内(可能少于 5 分钟)保持底层套接字连接处于活动状态......因此存在将被延迟。不过,它最终肯定还是会发生。

    您的解决方法应该可以正常工作,或者为了避免断开整个连接,您可以在进入后台/前台时将存在位设置为 @NO / @YES。

    我可以看到,当应用进入后台时,大多数应用会期望呈现状态如何启动,因此我们可能会研究在未来改变这种行为。

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      相关资源
      最近更新 更多