【问题标题】:How to manage Online / Offline / Away status in background PUBNUB + IOS?如何在PUBNUB + IOS后台管理在线/离线/离开状态?
【发布时间】:2015-05-29 05:27:04
【问题描述】:

我们想在 iOS 中使用 Pubnub 框架实现在线/离线,但应用在后台运行时间不超过 10 分钟。我们试图通过启用位置功能及其工作正常来实现这一点。但是客户端不想为此启用位置服务。那么我们将如何设法使后台无限运行? (问题 1)

如果我们想在我们的代码中放置在线/离线/离开状态

我们应该展示的地方, 在线:当用户打开应用时 离线:当用户从后台关闭应用或删除应用时 离开:当用户点击主页按钮并且应用程序处于后台时。

我们将如何实现这一点(特别是 AWAY 和离线状态)?(QUE 2)

还有其他方法可以管理在线/离线/离开吗? (没有 Pubnub)(QUE 3) 如果是,请描述方式。

我们将如何使用网络服务管理在线/离线/离开?当我们称其为 Web 服务时? (问题 4)

我们使用了将近 3-4 年的基本代码。那么我们是否应该在 plist 中添加任何其他参数以在后台启用应用程序更多时间? (问题 5)

请指导我们。

【问题讨论】:

  • 嗨!我们为您提供了解决方案,并会尽快提供一些说明。
  • 请通过 support@pubnub.com 联系我们,我们想了解更多关于您的应用程序的信息,并从那里为您推荐最佳解决方案。

标签: ios chat pubnub user-presence


【解决方案1】:

使用PubNub Presence,您拥有在应用程序中提供此功能的最佳方式,但由于 iOS 处理应用程序进入后台的方式,您可能有机会也可能没有机会更新此状态(取决于应用程序的配置方式)运行)。

但非常简单,by enabling Presence for your PubNub keys,当客户端 subscribes to a channel 时,join 事件被发送给正在该频道上监听状态的所有其他订阅者。

当应用程序进入后台时,如果您有机会这样做,您可以call unsubscribe on all the channels 订阅客户端,leave 事件将发送给该​​/那些频道的所有订阅者监听出席事件.

如果应用程序被杀死或进入后台而您没有机会调用unsubscribe,当应用程序离线/断开的时间超过配置心跳周期,然后一个timeout(相当于一个leave事件)将被发送给所有监听出席事件的订阅者。

heartbeat defaults to 5 minutes but you can configure this to a lower setting like 60 seconds(对于需要此功能但从不低于 15 秒的用例,或更短)。

如果您希望您的服务器监听 Presence 事件,那么您将需要使用我们的 Presence Webhooks(文档即将推出)。请参阅this StackOverflow thread about how to implement PubNub Presence Webhooks and how to get your PubNub keys configured to use them

【讨论】:

    【解决方案2】:

    有两种情况:

    • 用户将应用置于后台模式
    • 用户退出应用。

    您需要做的是在这些事件发生时得到通知:

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(appWillResignActive) 
                                                 name:UIApplicationWillResignActiveNotification 
                                               object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(appWillTerminate) 
                                                 name:UIApplicationWillTerminateNotification 
                                               object:nil];
    

    现在,在相应的方法中,使用 PubNub 的 API 设置状态

    -(void)appWillResignActive
    {
        // Sample dictionary
        NSDictionary *dicState = @{ @"userName" : senderName, // Optional
                                    @"status"   : @"Away", // Or whatever
                                    @"isTyping" : @FALSE // Optional
                                  };
    
        [AppDel.client setState: dicState
                        forUUID: senderId // current user's UUID
                      onChannel: KPubNubChannelName // channel name
                 withCompletion: ^(PNClientStateUpdateStatus *status) 
         {
             NSLog(@"%@", status);
         }];
    }
    

    一旦 PubNub 上的状态更新,该频道的所有订阅者都会收到通知,即会调用以下方法:

    - (void)client:(PubNub *)client didReceivePresenceEvent:(PNPresenceEventResult *)event 
    {
        if (![event.data.channel isEqualToString:event.data.subscription])
        {
            // Presence event has been received on channel group stored in event.data.subscription.
        }
        else 
        {
            // Presence event has been received on channel stored in event.data.channel.
        }
    
        if (![event.data.presenceEvent isEqualToString:@"state-change"]) {
    
            NSLog(@"%@ \"%@'ed\"\nat: %@ on %@ (Occupancy: %@)", event.data.presence.uuid, 
                  event.data.presenceEvent, event.data.presence.timetoken, event.data.channel, 
                  event.data.presence.occupancy);
        }
        else {
    
            NSLog(@"%@ changed state at: %@ on %@ to: %@", event.data.presence.uuid, 
                  event.data.presence.timetoken, event.data.channel, event.data.presence.state);
        }
    } 
    

    当它被调用时,您必须相应地更新您的数据源,这将反映状态更新。

    【讨论】:

    • 对于离线模式,如果我得到它,我会尽快进行编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    相关资源
    最近更新 更多