标题说明了一切。我看这个问题,并在这里对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 分钟的事情,它变成了沮丧的一天......你知道我的意思:)
当应用程序即将进入后台时,我实际上能够发送我需要的消息。并且无需启用任何后台模式。
我利用了本教程中解释的背景有限任务。
- (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)
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |