Fetch messages sooner when launched from background

The only reason a notification wakes/launches the app is to fetch
messages.

However, upon launching, especially if the app had been killed, it can
take a second or two before being notified of the notification that woke
us. Rather than wait, just fetch messages ASAP.

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent c7cfe188ee
commit 876521f4c3

@ -818,6 +818,11 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
if ([TSAccountManager isRegistered]) {
DDLogInfo(@"localNumber: %@", [TSAccountManager localNumber]);
// Fetch messages as soon as possible after launching. In particular, when
// launching from the background, without this, we end up waiting some extra
// seconds before receiving an actionable push notification.
[[Environment getCurrent].messageFetcherJob runAsync];
// This should happen at any launch, background or foreground.
__unused AnyPromise *promise = [OWSSyncPushTokensJob runWithPushManager:[PushManager sharedManager]
accountManager:[Environment getCurrent].accountManager

@ -27,6 +27,7 @@
@class CallService;
@class OWSMessageSender;
@class NotificationsManager;
@class OWSMessageFetcherJob;
@interface Environment : NSObject
@ -46,7 +47,7 @@
@property (nonatomic, readonly) NotificationsManager *notificationsManager;
@property (nonatomic, readonly) OWSMessageSender *messageSender;
@property (nonatomic, readonly) OWSPreferences *preferences;
@property (nonatomic, readonly) OWSMessageFetcherJob *messageFetcherJob;
@property (nonatomic, readonly) HomeViewController *homeViewController;
@property (nonatomic, readonly, weak) UINavigationController *signUpFlowNavigationController;

@ -13,6 +13,8 @@
#import "TSGroupThread.h"
#import <SignalServiceKit/ContactsUpdater.h>
#import <SignalServiceKit/Threading.h>
#import <SignalServiceKit/OWSSignalService.h>
#import <SignalServiceKit/OWSMessageReceiver.h>
static Environment *environment = nil;
@ -23,6 +25,7 @@ static Environment *environment = nil;
callService = _callService,
contactsManager = _contactsManager,
contactsUpdater = _contactsUpdater,
messageFetcherJob = _messageFetcherJob,
messageSender = _messageSender,
networkManager = _networkManager,
notificationsManager = _notificationsManager,
@ -137,6 +140,20 @@ static Environment *environment = nil;
return _networkManager;
}
- (OWSMessageFetcherJob *)messageFetcherJob
{
@synchronized(self)
{
if (!_messageFetcherJob) {
_messageFetcherJob =
[[OWSMessageFetcherJob alloc] initWithMessageReceiver:[OWSMessageReceiver sharedInstance]
networkManager:self.networkManager
signalService:[OWSSignalService sharedInstance]];
}
}
return _messageFetcherJob;
}
- (OWSMessageSender *)messageSender
{
OWSAssert(_messageSender != nil);

@ -52,18 +52,16 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
- (instancetype)initDefault
{
return [self initWithNetworkManager:[Environment getCurrent].networkManager
storageManager:[TSStorageManager sharedManager]
callUIAdapter:[Environment getCurrent].callService.callUIAdapter
messageReceiver:[OWSMessageReceiver sharedInstance]
messageSender:[Environment getCurrent].messageSender];
return [self initWithMessageFetcherJob:[Environment getCurrent].messageFetcherJob
storageManager:[TSStorageManager sharedManager]
callUIAdapter:[Environment getCurrent].callService.callUIAdapter
messageSender:[Environment getCurrent].messageSender];
}
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
storageManager:(TSStorageManager *)storageManager
callUIAdapter:(CallUIAdapter *)callUIAdapter
messageReceiver:(OWSMessageReceiver *)messageReceiver
messageSender:(OWSMessageSender *)messageSender
- (instancetype)initWithMessageFetcherJob:(OWSMessageFetcherJob *)messageFetcherJob
storageManager:(TSStorageManager *)storageManager
callUIAdapter:(CallUIAdapter *)callUIAdapter
messageSender:(OWSMessageSender *)messageSender
{
self = [super init];
if (!self) {
@ -72,12 +70,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
_callUIAdapter = callUIAdapter;
_messageSender = messageSender;
OWSSignalService *signalService = [OWSSignalService sharedInstance];
_messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithMessageReceiver:messageReceiver
networkManager:networkManager
signalService:signalService];
_messageFetcherJob = messageFetcherJob;
_callBackgroundTask = UIBackgroundTaskInvalid;
_currentNotifications = [NSMutableArray array];

Loading…
Cancel
Save