Skip to content

Commit e88605d

Browse files
committed
Update in app message lifecycle events
1 parent 352c913 commit e88605d

File tree

9 files changed

+207
-93
lines changed

9 files changed

+207
-93
lines changed

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

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import io.flutter.plugin.common.PluginRegistry.Registrar;
1818

1919
public class OneSignalInAppMessages extends FlutterRegistrarResponder implements MethodCallHandler,
20-
IInAppMessageClickHandler, IInAppMessageLifecycleHandler{
20+
IInAppMessageClickHandler, IInAppMessageLifecycleListener{
2121

2222
private IInAppMessageClickResult inAppMessageClickedResult;
2323
private boolean hasSetInAppMessageClickedHandler = false;
@@ -94,7 +94,7 @@ private void initInAppMessageClickedHandlerParams() {
9494

9595
public void lifecycleInit() {
9696
this.setInAppMessageLifecycleHandler();
97-
OneSignal.getInAppMessages().setInAppMessageClickHandler(this);
97+
OneSignal.getInAppMessages().addLifecycleListener(this);
9898
}
9999

100100
public void inAppMessageClicked(IInAppMessageClickResult action) {
@@ -108,26 +108,30 @@ public void inAppMessageClicked(IInAppMessageClickResult action) {
108108

109109
/* in app message lifecycle */
110110
public void setInAppMessageLifecycleHandler() {
111-
OneSignal.getInAppMessages().setInAppMessageLifecycleHandler(this);
111+
OneSignal.getInAppMessages().addInAppMessageLifecycleListener(this);
112112
}
113113

114114
@Override
115-
public void onWillDisplayInAppMessage(IInAppMessage message) {
116-
invokeMethodOnUiThread("OneSignal#onWillDisplayInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
115+
public void onWillDisplay(IInAppMessageWillDisplayEvent event) {
116+
invokeMethodOnUiThread("OneSignal#onWillDisplayInAppMessage",
117+
OneSignalSerializer.convertInAppMessageWillDisplayEventToMap(event));
117118
}
118119

119120
@Override
120-
public void onDidDisplayInAppMessage(IInAppMessage message) {
121-
invokeMethodOnUiThread("OneSignal#onDidDisplayInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
121+
public void onDidDisplay(IInAppMessageDidDisplayEvent event) {
122+
invokeMethodOnUiThread("OneSignal#onDidDisplayInAppMessage",
123+
OneSignalSerializer.convertInAppMessageDidDisplayEventToMap(event));
122124
}
123125

124126
@Override
125-
public void onWillDismissInAppMessage(IInAppMessage message) {
126-
invokeMethodOnUiThread("OneSignal#onWillDismissInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
127+
public void onWillDismiss(IInAppMessageWillDismissEvent event) {
128+
invokeMethodOnUiThread("OneSignal#onWillDismissInAppMessage",
129+
OneSignalSerializer.convertInAppMessageWillDismissEventToMap(event));
127130
}
128131

129132
@Override
130-
public void onDidDismissInAppMessage(IInAppMessage message) {
131-
invokeMethodOnUiThread("OneSignal#onDidDismissInAppMessage", OneSignalSerializer.convertInAppMessageToMap(message));
133+
public void onDidDismiss(IInAppMessageDidDismissEvent event) {
134+
invokeMethodOnUiThread("OneSignal#onDidDismissInAppMessage",
135+
OneSignalSerializer.convertInAppMessageDidDismissEventToMap(event));
132136
}
133137
}

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,38 @@ static HashMap<String, Object> convertInAppMessageClickedActionToMap(IInAppMessa
112112
return hash;
113113
}
114114

115+
static HashMap<String, Object> convertInAppMessageWillDisplayEventToMap(IInAppMessageWillDisplayEvent event) {
116+
HashMap<String, Object> hash = new HashMap<>();
117+
118+
hash.put("message", convertInAppMessageToMap(event.message));
119+
120+
return hash;
121+
}
122+
123+
static HashMap<String, Object> convertInAppMessageDidDisplayEventToMap(IInAppMessageDidDisplayEvent event) {
124+
HashMap<String, Object> hash = new HashMap<>();
125+
126+
hash.put("message", convertInAppMessageToMap(event.message));
127+
128+
return hash;
129+
}
130+
131+
static HashMap<String, Object> convertInAppMessageWillDismissEventToMap(IInAppMessageWillDismissEvent event) {
132+
HashMap<String, Object> hash = new HashMap<>();
133+
134+
hash.put("message", convertInAppMessageToMap(event.message));
135+
136+
return hash;
137+
}
138+
139+
static HashMap<String, Object> convertInAppMessageDidDismissEventToMap(IInAppMessageDidDismissEvent event) {
140+
HashMap<String, Object> hash = new HashMap<>();
141+
142+
hash.put("message", convertInAppMessageToMap(event.message));
143+
144+
return hash;
145+
}
146+
115147
static HashMap<String, Object> convertInAppMessageToMap(IInAppMessage message) {
116148
HashMap<String, Object> hash = new HashMap<>();
117149

example/lib/main.dart

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ class MyApp extends StatefulWidget {
1212
}
1313

1414
class _MyAppState extends State<MyApp>
15-
with OneSignalPushSubscriptionObserver, OneSignalPermissionObserver {
15+
with
16+
OneSignalPushSubscriptionObserver,
17+
OneSignalPermissionObserver,
18+
OneSignalInAppMessageLifecycleListener {
1619
String _debugLabelString = "";
1720
String? _emailAddress;
1821
String? _smsNumber;
@@ -81,21 +84,7 @@ class _MyAppState extends State<MyApp>
8184
});
8285
});
8386

84-
OneSignal.InAppMessages.setOnWillDisplayInAppMessageHandler((message) {
85-
print("ON WILL DISPLAY IN APP MESSAGE ${message.messageId}");
86-
});
87-
88-
OneSignal.InAppMessages.setOnDidDisplayInAppMessageHandler((message) {
89-
print("ON DID DISPLAY IN APP MESSAGE ${message.messageId}");
90-
});
91-
92-
OneSignal.InAppMessages.setOnWillDismissInAppMessageHandler((message) {
93-
print("ON WILL DISMISS IN APP MESSAGE ${message.messageId}");
94-
});
95-
96-
OneSignal.InAppMessages.setOnDidDismissInAppMessageHandler((message) {
97-
print("ON DID DISMISS IN APP MESSAGE ${message.messageId}");
98-
});
87+
OneSignal.InAppMessages.addInAppMessageLifecycleListener(this);
9988

10089
// iOS-only method to open launch URLs in Safari when set to false
10190
OneSignal.shared.setLaunchURLsInApp(false);
@@ -122,6 +111,22 @@ class _MyAppState extends State<MyApp>
122111
print(state.jsonRepresentation());
123112
}
124113

114+
void onWillDisplayInAppMessage(OSInAppMessageWillDisplayEvent event) {
115+
print("ON WILL DISPLAY IN APP MESSAGE ${event.message.messageId}");
116+
}
117+
118+
void onDidDisplayInAppMessage(OSInAppMessageDidDisplayEvent event) {
119+
print("ON DID DISPLAY IN APP MESSAGE ${event.message.messageId}");
120+
}
121+
122+
void onWillDismissInAppMessage(OSInAppMessageWillDismissEvent event) {
123+
print("ON WILL DISMISS IN APP MESSAGE ${event.message.messageId}");
124+
}
125+
126+
void onDidDismissInAppMessage(OSInAppMessageDidDismissEvent event) {
127+
print("ON DID DISMISS IN APP MESSAGE ${event.message.messageId}");
128+
}
129+
125130
void _handleSendTags() {
126131
print("Sending tags");
127132
OneSignal.User.addTagWithKey("test2", "val2");

ios/Classes/OSFlutterCategories.m

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,46 @@ - (NSDictionary *)toJson {
8484
}
8585
@end
8686

87+
@implementation OSInAppMessageWillDisplayEvent (Flutter)
88+
- (NSDictionary *)toJson {
89+
NSMutableDictionary *json = [NSMutableDictionary new];
90+
91+
json[@"message"] = self.message.toJson;
92+
93+
return json;
94+
}
95+
@end
96+
97+
@implementation OSInAppMessageDidDisplayEvent (Flutter)
98+
- (NSDictionary *)toJson {
99+
NSMutableDictionary *json = [NSMutableDictionary new];
100+
101+
json[@"message"] = self.message.toJson;
102+
103+
return json;
104+
}
105+
@end
106+
107+
@implementation OSInAppMessageWillDismissEvent (Flutter)
108+
- (NSDictionary *)toJson {
109+
NSMutableDictionary *json = [NSMutableDictionary new];
110+
111+
json[@"message"] = self.message.toJson;
112+
113+
return json;
114+
}
115+
@end
116+
117+
@implementation OSInAppMessageDidDismissEvent (Flutter)
118+
- (NSDictionary *)toJson {
119+
NSMutableDictionary *json = [NSMutableDictionary new];
120+
121+
json[@"message"] = self.message.toJson;
122+
123+
return json;
124+
}
125+
@end
126+
87127
@implementation OSInAppMessageAction (Flutter)
88128
- (NSDictionary *)toJson {
89129
NSMutableDictionary *json = [NSMutableDictionary new];

ios/Classes/OSFlutterInAppMessages.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#import <Flutter/Flutter.h>
3131
#import <OneSignalFramework/OneSignalFramework.h>
3232

33-
@interface OSFlutterInAppMessages : NSObject<FlutterPlugin, OSInAppMessageLifecycleHandler>
33+
@interface OSFlutterInAppMessages : NSObject<FlutterPlugin, OSInAppMessageLifecycleListener>
3434

3535
@property (strong, nonatomic) FlutterMethodChannel *channel;
3636
+ (instancetype)sharedInstance;

ios/Classes/OSFlutterInAppMessages.m

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,10 @@ - (void)paused:(FlutterMethodCall *)call withResult:(FlutterResult)result {
104104
}
105105

106106
- (void)lifecycleInit:(FlutterMethodCall *)call withResult:(FlutterResult)result {
107-
[OneSignal.InAppMessages setClickHandler:^(OSInAppMessageAction *action) {
107+
[OneSignal.InAppMessages setClickHandler:^(OSInAppMessageAction *action) {
108108
[OSFlutterInAppMessages.sharedInstance handleInAppMessageClicked:action];
109109
}];
110-
[OneSignal.InAppMessages setLifecycleHandler:OSFlutterInAppMessages.sharedInstance];
110+
[OneSignal.InAppMessages addLifecycleListener:OSFlutterInAppMessages.sharedInstance];
111111
}
112112

113113

@@ -131,21 +131,21 @@ - (void)handleInAppMessageClicked:(OSInAppMessageAction *)action {
131131
[self.channel invokeMethod:@"OneSignal#handleClickedInAppMessage" arguments:action.toJson];
132132
}
133133

134-
#pragma mark OSInAppMessageLifeCycleHandler
135-
- (void)onWillDisplayInAppMessage:(OSInAppMessage *) result {
136-
[self.channel invokeMethod:@"OneSignal#onWillDisplayInAppMessage" arguments:result.toJson];
134+
#pragma mark OSInAppMessageLifecycleListener
135+
- (void)onWillDisplayInAppMessage:(OSInAppMessageWillDisplayEvent *) event {
136+
[self.channel invokeMethod:@"OneSignal#onWillDisplayInAppMessage" arguments:event.toJson];
137137
}
138138

139-
- (void)onDidDisplayInAppMessage:(OSInAppMessage *) result {
140-
[self.channel invokeMethod:@"OneSignal#onDidDisplayInAppMessage" arguments:result.toJson];
139+
- (void)onDidDisplayInAppMessage:(OSInAppMessageDidDisplayEvent *) event {
140+
[self.channel invokeMethod:@"OneSignal#onDidDisplayInAppMessage" arguments:event.toJson];
141141
}
142142

143-
- (void)onWillDismissInAppMessage:(OSInAppMessage *) result {
144-
[self.channel invokeMethod:@"OneSignal#onWillDismissInAppMessage" arguments:result.toJson];
143+
- (void)onWillDismissInAppMessage:(OSInAppMessageWillDismissEvent *) event {
144+
[self.channel invokeMethod:@"OneSignal#onWillDismissInAppMessage" arguments:event.toJson];
145145
}
146146

147-
- (void)onDidDismissInAppMessage:(OSInAppMessage *) result {
148-
[self.channel invokeMethod:@"OneSignal#onDidDismissInAppMessage" arguments:result.toJson];
147+
- (void)onDidDismissInAppMessage:(OSInAppMessageDidDismissEvent *) event {
148+
[self.channel invokeMethod:@"OneSignal#onDidDismissInAppMessage" arguments:event.toJson];
149149
}
150150

151151
@end

lib/onesignal_flutter.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export 'src/subscription.dart';
1515
export 'src/notification.dart';
1616
export 'src/notifications.dart';
1717
export 'src/inappmessage.dart';
18+
export 'src/inappmessages.dart';
1819
export 'src/liveactivities.dart';
1920

2021
class OneSignal {

lib/src/inappmessage.dart

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
import 'package:onesignal_flutter/onesignal_flutter.dart';
12
import 'package:onesignal_flutter/src/utils.dart';
23

34
/// When a click action is defined on an In App Message form the dashboard,
45
/// the handler returns an OSInAppMessageAction object so the Dart code can act accordingly
56
/// This allows for custom action events within Dart
67
class OSInAppMessageAction extends JSONStringRepresentable {
7-
88
// Name of the action event defined for the IAM element
99
String? clickName;
1010

@@ -32,19 +32,64 @@ class OSInAppMessageAction extends JSONStringRepresentable {
3232
'closes_message': this.closesMessage,
3333
});
3434
}
35-
3635
}
3736

3837
class OSInAppMessage extends JSONStringRepresentable {
3938
String? messageId;
4039

4140
OSInAppMessage(Map<String, dynamic> json) {
4241
this.messageId = json["message_id"];
43-
}
42+
}
4443

4544
String jsonRepresentation() {
46-
return convertToJsonString({
47-
'message_id': this.messageId
48-
});
45+
return convertToJsonString({'message_id': this.messageId});
46+
}
47+
}
48+
49+
class OSInAppMessageWillDisplayEvent extends JSONStringRepresentable {
50+
late OSInAppMessage message;
51+
52+
OSInAppMessageWillDisplayEvent(Map<String, dynamic> json) {
53+
this.message = json["message"];
54+
}
55+
56+
String jsonRepresentation() {
57+
return convertToJsonString({'message': this.message.jsonRepresentation()});
58+
}
59+
}
60+
61+
class OSInAppMessageDidDisplayEvent extends JSONStringRepresentable {
62+
late OSInAppMessage message;
63+
64+
OSInAppMessageDidDisplayEvent(Map<String, dynamic> json) {
65+
this.message = json["message"];
66+
}
67+
68+
String jsonRepresentation() {
69+
return convertToJsonString({'message': this.message.jsonRepresentation()});
70+
}
71+
}
72+
73+
class OSInAppMessageWillDismissEvent extends JSONStringRepresentable {
74+
late OSInAppMessage message;
75+
76+
OSInAppMessageWillDismissEvent(Map<String, dynamic> json) {
77+
this.message = json["message"];
78+
}
79+
80+
String jsonRepresentation() {
81+
return convertToJsonString({'message': this.message.jsonRepresentation()});
82+
}
83+
}
84+
85+
class OSInAppMessageDidDismissEvent extends JSONStringRepresentable {
86+
late OSInAppMessage message;
87+
88+
OSInAppMessageDidDismissEvent(Map<String, dynamic> json) {
89+
this.message = json["message"];
90+
}
91+
92+
String jsonRepresentation() {
93+
return convertToJsonString({'message': this.message.jsonRepresentation()});
4994
}
5095
}

0 commit comments

Comments
 (0)