Skip to content

Commit e1a989a

Browse files
authored
Merge pull request #752 from OneSignal/fix/notif_opened_when_closed
Fix notification clicked listener firing from cold start
2 parents 62a5670 + e7fc68c commit e1a989a

File tree

5 files changed

+21
-3
lines changed

5 files changed

+21
-3
lines changed

android/src/main/java/com/onesignal/flutter/OneSignalNotifications.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ else if (call.method.contentEquals("OneSignal#lifecycleInit"))
6868
this.lifecycleInit();
6969
else if (call.method.contentEquals("OneSignal#proceedWithWillDisplay"))
7070
this.proceedWithWillDisplay(call, result);
71+
else if (call.method.contentEquals("OneSignal#addNativeClickListener"))
72+
this.registerClickListener();
7173
else
7274
replyNotImplemented(result);
7375
}
@@ -184,7 +186,10 @@ public void onNotificationPermissionChange(boolean permission) {
184186

185187
private void lifecycleInit() {
186188
OneSignal.getNotifications().addForegroundLifecycleListener(this);
187-
OneSignal.getNotifications().addClickListener(this);
188189
OneSignal.getNotifications().addPermissionObserver(this);
189190
}
191+
192+
private void registerClickListener() {
193+
OneSignal.getNotifications().addClickListener(this);
194+
}
190195
}

ios/Classes/OSFlutterNotifications.m

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
7373
[self lifecycleInit:call withResult:result];
7474
else if ([@"OneSignal#proceedWithWillDisplay" isEqualToString:call.method])
7575
[self proceedWithWillDisplay:call withResult:result];
76+
else if ([@"OneSignal#addNativeClickListener" isEqualToString:call.method])
77+
[self registerClickListener:call withResult:result];
7678
else
7779
result(FlutterMethodNotImplemented);
7880
}
@@ -103,11 +105,15 @@ - (void)registerForProvisionalAuthorization:(FlutterMethodCall *)call withResult
103105

104106
- (void)lifecycleInit:(FlutterMethodCall *)call withResult:(FlutterResult)result {
105107
[OneSignal.Notifications addForegroundLifecycleListener:self];
106-
[OneSignal.Notifications addClickListener:self];
107108
[OneSignal.Notifications addPermissionObserver:self];
108109
result(nil);
109110
}
110111

112+
- (void)registerClickListener:(FlutterMethodCall *)call withResult:(FlutterResult)result {
113+
[OneSignal.Notifications addClickListener:self];
114+
result(nil);
115+
}
116+
111117
- (void)onNotificationPermissionDidChange:(BOOL)permission {
112118
[self.channel invokeMethod:@"OneSignal#onNotificationPermissionDidChange" arguments:@{@"permission" : @(permission)}];
113119
}

ios/Classes/OneSignalPlugin.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ + (instancetype)sharedInstance {
5555
#pragma mark FlutterPlugin
5656
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
5757

58+
[OneSignal initialize:nil withLaunchOptions:nil];
5859
OneSignalWrapper.sdkType = @"flutter";
5960
OneSignalWrapper.sdkVersion = @"050001";
6061

ios/onesignal_flutter.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
1313
s.source_files = 'Classes/**/*'
1414
s.public_header_files = 'Classes/**/*.h'
1515
s.dependency 'Flutter'
16-
s.dependency 'OneSignalXCFramework', '5.0.1'
16+
s.dependency 'OneSignalXCFramework', '5.0.2'
1717
s.ios.deployment_target = '11.0'
1818
s.static_framework = true
1919
end

lib/src/notifications.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class OneSignalNotifications {
3131

3232
bool _permission = false;
3333

34+
bool _clickHandlerRegistered = false;
35+
3436
/// Whether this app has push notification permission.
3537
bool get permission {
3638
return _permission;
@@ -177,6 +179,10 @@ class OneSignalNotifications {
177179
/// The notification click listener is called whenever the user opens a
178180
/// OneSignal push notification, or taps an action button on a notification.
179181
void addClickListener(OnNotificationClickListener listener) {
182+
if (!_clickHandlerRegistered) {
183+
_clickHandlerRegistered = true;
184+
_channel.invokeMethod("OneSignal#addNativeClickListener");
185+
}
180186
_clickListeners.add(listener);
181187
}
182188

0 commit comments

Comments
 (0)