Skip to content

Commit 4709101

Browse files
committed
Removed unnecessary push token handling. Token is requested by ably-cocoa and received by flutter, which sends it to ably via the first available ARTRealtime object. All instances have the same value for the device.push property, since the device itself is stored in a static variable.
1 parent ca85d49 commit 4709101

File tree

3 files changed

+15
-41
lines changed

3 files changed

+15
-41
lines changed

ios/Classes/AblyFlutter.m

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,6 @@ -(void)reset;
7676
ARTRest *const rest = [[ARTRest alloc] initWithOptions:options.clientOptions];
7777
[instanceStore setRest:rest with: handle];
7878

79-
NSData *const apnsDeviceToken = ably.instanceStore.didRegisterForRemoteNotificationsWithDeviceToken_deviceToken;
80-
NSError *const error = ably.instanceStore.didFailToRegisterForRemoteNotificationsWithError_error;
81-
if (apnsDeviceToken != nil) {
82-
[ARTPush didRegisterForRemoteNotificationsWithDeviceToken:apnsDeviceToken rest:rest];
83-
} else if (error != nil) {
84-
[ARTPush didFailToRegisterForRemoteNotificationsWithError:error rest:rest];
85-
}
86-
8779
result(handle);
8880
};
8981

@@ -262,19 +254,6 @@ -(void)reset;
262254
}
263255
ARTRealtime *const realtime = [[ARTRealtime alloc] initWithOptions:options.clientOptions];
264256
[instanceStore setRealtime:realtime with:handle];
265-
266-
// Giving Ably client the deviceToken registered at device launch (didRegisterForRemoteNotificationsWithDeviceToken).
267-
// This is not an ideal solution. We save the deviceToken given in didRegisterForRemoteNotificationsWithDeviceToken and the
268-
// error in didFailToRegisterForRemoteNotificationsWithError and pass it to Ably in the first client that is first created.
269-
// Ideally, the Ably client doesn't need to be created, and we can pass the deviceToken to Ably like in Ably Java.
270-
// This is similarly repeated for in _createRest
271-
NSData *const apnsDeviceToken = ably.instanceStore.didRegisterForRemoteNotificationsWithDeviceToken_deviceToken;
272-
NSError *const error = ably.instanceStore.didFailToRegisterForRemoteNotificationsWithError_error;
273-
if (apnsDeviceToken != nil) {
274-
[ARTPush didRegisterForRemoteNotificationsWithDeviceToken:apnsDeviceToken realtime:realtime];
275-
} else if (error != nil) {
276-
[ARTPush didFailToRegisterForRemoteNotificationsWithError:error realtime:realtime];
277-
}
278257

279258
result(handle);
280259
};
@@ -801,7 +780,6 @@ -(void)reset {
801780
}
802781

803782
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
804-
[[UIApplication sharedApplication] registerForRemoteNotifications];
805783
// Check if application was launched from a notification tap.
806784

807785
// https://stackoverflow.com/a/21611009/7365866
@@ -814,16 +792,13 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
814792
}
815793

816794
#pragma mark - Push Notifications Registration - UIApplicationDelegate
817-
/// Save the deviceToken provided so we can pass it to the first Ably client which gets created, in createRealtime or createRest.
795+
818796
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
819-
// Set deviceToken on all existing Ably clients, and a property which used for all future Ably clients.
820797
[_instanceStore didRegisterForRemoteNotificationsWithDeviceToken: deviceToken];
821798
}
822799

823-
/// Save the error if it occurred during APNs device registration provided so we can pass it to the first Ably client which gets created, in createRealtime or createRest.
824800
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
825-
// This error will be used when the first Ably client is made.
826-
_instanceStore.didFailToRegisterForRemoteNotificationsWithError_error = error;
801+
[_instanceStore didFailToRegisterForRemoteNotificationsWithError:error];
827802
}
828803

829804
- (BOOL)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

ios/Classes/AblyInstanceStore.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,9 @@ NS_ASSUME_NONNULL_BEGIN
2525

2626
-(ARTPaginatedResult *) getPaginatedResult:(NSNumber *const) handle;
2727

28-
-(void) didRegisterForRemoteNotificationsWithDeviceToken:(NSData *const) deviceToken;
28+
-(void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *const)deviceToken;
2929

30-
@property(nonatomic, nullable) NSData * didRegisterForRemoteNotificationsWithDeviceToken_deviceToken;
31-
32-
@property(nonatomic, nullable) NSError * didFailToRegisterForRemoteNotificationsWithError_error;
30+
-(void)didFailToRegisterForRemoteNotificationsWithError:(NSError *const)error;
3331

3432
-(void)reset;
3533

ios/Classes/AblyInstanceStore.m

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,20 +65,21 @@ -(ARTPaginatedResult *) getPaginatedResult:(NSNumber *const) handle {
6565
return _paginatedResults[handle];
6666
}
6767

68-
// Set device token on all existing clients
69-
-(void) didRegisterForRemoteNotificationsWithDeviceToken:(NSData *const) deviceToken {
70-
_didRegisterForRemoteNotificationsWithDeviceToken_deviceToken = deviceToken;
71-
72-
for (id restHandle in _restInstances) {
73-
ARTRest *const rest = _restInstances[restHandle];
74-
[ARTPush didRegisterForRemoteNotificationsWithDeviceToken:deviceToken rest:rest];
75-
}
76-
for (id realtimeHandle in _realtimeInstances) {
77-
ARTRealtime *const realtime = _realtimeInstances[realtimeHandle];
68+
// Set device token for the first created realtime object, device of which is available for others, because it's static
69+
-(void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *const)deviceToken {
70+
ARTRealtime *const realtime = _realtimeInstances[@0];
71+
if (realtime) {
7872
[ARTPush didRegisterForRemoteNotificationsWithDeviceToken:deviceToken realtime:realtime];
7973
}
8074
}
8175

76+
-(void)didFailToRegisterForRemoteNotificationsWithError:(NSError *const)error {
77+
ARTRealtime *const realtime = _realtimeInstances[@0];
78+
if (realtime) {
79+
[ARTPush didFailToRegisterForRemoteNotificationsWithError:error realtime:realtime];
80+
}
81+
}
82+
8283
-(void)reset {
8384
for (ARTRealtime *const r in _realtimeInstances.allValues) {
8485
[r close];

0 commit comments

Comments
 (0)