当应用程序进入后台状态 iOS 8 时,Pubnub 连接停止

Gra*_*eph 6 ios pubnub

标题说明了一切。我看这个问题,并在这里对pubnub论坛(同样的问题,只是不同的建议)。

问题的核心是,一旦应用程序挂起,pubnub 连接就会排队,直到应用程序返回前台才会发送。发送通知说您将进入频道的后台,但它不起作用,这似乎是合理的做法。

从我的阅读中我了解到 pubnub 使用 websockets 并且它在后台模式下是不允许的。甚至尝试启用 VOIP 作为后台模式,但没有运气,但位置更新 bg 模式有效。但是,使用它会使我的应用程序被拒绝,因为我不使用位置服务。

运行此代码时

- (void)applicationDidEnterBackground:(UIApplication *)application {

    [PubNub sendMessage:@"Hello from PubNub iOS!" toChannel:self.myChannel;
}
Run Code Online (Sandbox Code Playgroud)

我从 pubnub 得到这个日志条目(所以至少我知道命令已运行):

Looks like the client suspended"; Fix suggestion="Make sure that your application is configured to run persistently in background
Run Code Online (Sandbox Code Playgroud)

我已经为此自杀了一天。在这些日子里,你开始做一些你认为很简单的事情,15 分钟的事情,它变成了沮丧的一天......你知道我的意思:)

Gra*_*eph 2

当应用程序即将进入后台时,我实际上能够发送我需要的消息。并且无需启用任何后台模式。

我利用了本教程中解释的背景有限任务。

- (void)applicationWillResignActive:(UIApplication *)application {

    [PubNub updateClientState:@"MyID" state:@{@"appState":@"Background",@"userNickname":@"MyNickname"} forObject:[PNChannel channelWithName:@"MyChannel"]];

    self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        NSLog(@"Background handler called. Not running background tasks anymore.");
        [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
        self.backgroundTask = UIBackgroundTaskInvalid;
    }];

}
Run Code Online (Sandbox Code Playgroud)

并在重新上线时实现停止后台

- (void)applicationDidBecomeActive:(UIApplication *)application {

    if (self.backgroundTask != UIBackgroundTaskInvalid)
    {
        [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
        self.backgroundTask = UIBackgroundTaskInvalid;
        NSLog(@"Task invalidated");
    }
}
Run Code Online (Sandbox Code Playgroud)