1
1
package com .onesignal .flutter ;
2
2
3
+ import android .annotation .SuppressLint ;
3
4
import android .content .Context ;
4
5
5
6
import com .onesignal .OSDeviceState ;
25
26
import java .util .Map ;
26
27
import java .util .concurrent .atomic .AtomicBoolean ;
27
28
29
+ import androidx .annotation .NonNull ;
30
+ import io .flutter .embedding .engine .plugins .FlutterPlugin ;
31
+ import io .flutter .plugin .common .BinaryMessenger ;
28
32
import io .flutter .plugin .common .MethodCall ;
29
33
import io .flutter .plugin .common .MethodChannel ;
30
34
import io .flutter .plugin .common .MethodChannel .MethodCallHandler ;
36
40
/** OnesignalPlugin */
37
41
public class OneSignalPlugin
38
42
extends FlutterRegistrarResponder
39
- implements MethodCallHandler ,
43
+ implements FlutterPlugin ,
44
+ MethodCallHandler ,
40
45
OneSignal .OSNotificationOpenedHandler ,
41
46
OneSignal .OSInAppMessageClickHandler ,
42
47
OSSubscriptionObserver ,
@@ -52,32 +57,61 @@ public class OneSignalPlugin
52
57
private boolean hasSetRequiresPrivacyConsent = false ;
53
58
private boolean waitingForUserPrivacyConsent = false ;
54
59
55
- private HashMap <String , OSNotificationReceivedEvent > notificationReceivedEventCache = new HashMap <>();
60
+ private final HashMap <String , OSNotificationReceivedEvent > notificationReceivedEventCache = new HashMap <>();
61
+
62
+ public OneSignalPlugin () {
63
+ }
64
+
65
+ private void init (Context context , BinaryMessenger messenger )
66
+ {
67
+ this .context = context ;
68
+ this .messenger = messenger ;
56
69
57
- public static void registerWith (Registrar registrar ) {
58
70
OneSignal .sdkType = "flutter" ;
59
71
60
- OneSignalPlugin plugin = new OneSignalPlugin ();
72
+ waitingForUserPrivacyConsent = false ;
73
+ channel = new MethodChannel (messenger , "OneSignal" );
74
+ channel .setMethodCallHandler (this );
75
+
76
+ OneSignalTagsController .registerWith (messenger );
77
+ OneSignalInAppMessagingController .registerWith (messenger );
78
+ OneSignalOutcomeEventsController .registerWith (messenger );
79
+ }
80
+
81
+ @ Override
82
+ public void onAttachedToEngine (@ NonNull FlutterPlugin .FlutterPluginBinding flutterPluginBinding ) {
83
+ init (
84
+ flutterPluginBinding .getApplicationContext (),
85
+ flutterPluginBinding .getBinaryMessenger ()
86
+ );
87
+ }
88
+
89
+ @ Override
90
+ public void onDetachedFromEngine (@ NonNull FlutterPlugin .FlutterPluginBinding binding ) {
91
+ onDetachedFromEngine ();
92
+ }
93
+
94
+ private void onDetachedFromEngine () {
95
+ OneSignal .setNotificationOpenedHandler (null );
96
+ OneSignal .setInAppMessageClickHandler (null );
97
+ }
61
98
62
- plugin .waitingForUserPrivacyConsent = false ;
63
- plugin .channel = new MethodChannel (registrar .messenger (), "OneSignal" );
64
- plugin .channel .setMethodCallHandler (plugin );
65
- plugin .flutterRegistrar = registrar ;
99
+ // This static method is only to remain compatible with apps that don’t use the v2 Android embedding.
100
+ @ Deprecated ()
101
+ @ SuppressLint ("Registrar" )
102
+ public static void registerWith (Registrar registrar ) {
103
+ final OneSignalPlugin plugin = new OneSignalPlugin ();
104
+ plugin .init (registrar .context (), registrar .messenger ());
66
105
67
106
// Create a callback for the flutterRegistrar to connect the applications onDestroy
68
- plugin . flutterRegistrar .addViewDestroyListener (new PluginRegistry .ViewDestroyListener () {
107
+ registrar .addViewDestroyListener (new PluginRegistry .ViewDestroyListener () {
69
108
@ Override
70
109
public boolean onViewDestroy (FlutterNativeView flutterNativeView ) {
71
110
// Remove all handlers so they aren't triggered with wrong context
72
- OneSignal .setNotificationOpenedHandler (null );
73
- OneSignal .setInAppMessageClickHandler (null );
111
+ plugin .onDetachedFromEngine ();
74
112
return false ;
75
113
}
76
114
});
77
-
78
- OneSignalTagsController .registerWith (registrar );
79
- OneSignalInAppMessagingController .registerWith (registrar );
80
- OneSignalOutcomeEventsController .registerWith (registrar );
81
115
}
82
116
83
117
@ Override
@@ -145,7 +179,6 @@ private void disablePush(MethodCall call, Result result) {
145
179
146
180
private void setAppId (MethodCall call , Result reply ) {
147
181
String appId = call .argument ("appId" );
148
- Context context = flutterRegistrar .activeContext ();
149
182
150
183
OneSignal .setInAppMessageClickHandler (this );
151
184
OneSignal .initWithContext (context );
@@ -231,7 +264,7 @@ private void getDeviceState(Result reply) {
231
264
232
265
private void postNotification (MethodCall call , final Result reply ) {
233
266
JSONObject json = new JSONObject ((Map <String , Object >) call .arguments );
234
- OneSignal .postNotification (json , new OSFlutterPostNotificationHandler (flutterRegistrar , channel , reply , "postNotification" ));
267
+ OneSignal .postNotification (json , new OSFlutterPostNotificationHandler (messenger , channel , reply , "postNotification" ));
235
268
}
236
269
237
270
private void promptLocation (Result reply ) {
@@ -248,22 +281,22 @@ private void setEmail(MethodCall call, final Result reply) {
248
281
String email = call .argument ("email" );
249
282
String emailAuthHashToken = call .argument ("emailAuthHashToken" );
250
283
251
- OneSignal .setEmail (email , emailAuthHashToken , new OSFlutterEmailHandler (flutterRegistrar , channel , reply , "setEmail" ));
284
+ OneSignal .setEmail (email , emailAuthHashToken , new OSFlutterEmailHandler (messenger , channel , reply , "setEmail" ));
252
285
}
253
286
254
287
private void logoutEmail (final Result reply ) {
255
- OneSignal .logoutEmail (new OSFlutterEmailHandler (flutterRegistrar , channel , reply , "logoutEmail" ));
288
+ OneSignal .logoutEmail (new OSFlutterEmailHandler (messenger , channel , reply , "logoutEmail" ));
256
289
}
257
290
258
291
private void setSMSNumber (MethodCall call , final Result reply ) {
259
292
String smsNumber = call .argument ("smsNumber" );
260
293
String smsAuthHashToken = call .argument ("smsAuthHashToken" );
261
294
262
- OneSignal .setSMSNumber (smsNumber , smsAuthHashToken , new OSFlutterSMSHandler (flutterRegistrar , channel , reply , "setSMSNumber" ));
295
+ OneSignal .setSMSNumber (smsNumber , smsAuthHashToken , new OSFlutterSMSHandler (messenger , channel , reply , "setSMSNumber" ));
263
296
}
264
297
265
298
private void logoutSMSNumber (final Result reply ) {
266
- OneSignal .logoutSMSNumber (new OSFlutterSMSHandler (flutterRegistrar , channel , reply , "logoutSMSNumber" ));
299
+ OneSignal .logoutSMSNumber (new OSFlutterSMSHandler (messenger , channel , reply , "logoutSMSNumber" ));
267
300
}
268
301
269
302
private void setLanguage (MethodCall call , final Result result ) {
@@ -282,11 +315,11 @@ private void setExternalUserId(MethodCall call, final Result result) {
282
315
if (authHashToken != null && authHashToken .length () == 0 )
283
316
authHashToken = null ;
284
317
285
- OneSignal .setExternalUserId (externalUserId , authHashToken , new OSFlutterExternalUserIdHandler (flutterRegistrar , channel , result , "setExternalUserId" ));
318
+ OneSignal .setExternalUserId (externalUserId , authHashToken , new OSFlutterExternalUserIdHandler (messenger , channel , result , "setExternalUserId" ));
286
319
}
287
320
288
321
private void removeExternalUserId (final Result result ) {
289
- OneSignal .removeExternalUserId (new OSFlutterExternalUserIdHandler (flutterRegistrar , channel , result , "removeExternalUserId" ));
322
+ OneSignal .removeExternalUserId (new OSFlutterExternalUserIdHandler (messenger , channel , result , "removeExternalUserId" ));
290
323
}
291
324
292
325
private void initNotificationOpenedHandlerParams () {
@@ -399,8 +432,8 @@ public void notificationWillShowInForeground(OSNotificationReceivedEvent notific
399
432
static class OSFlutterEmailHandler extends OSFlutterHandler
400
433
implements OneSignal .EmailUpdateHandler {
401
434
402
- OSFlutterEmailHandler (PluginRegistry . Registrar flutterRegistrar , MethodChannel channel , Result res , String methodName ) {
403
- super (flutterRegistrar , channel , res , methodName );
435
+ OSFlutterEmailHandler (BinaryMessenger messenger , MethodChannel channel , Result res , String methodName ) {
436
+ super (messenger , channel , res , methodName );
404
437
}
405
438
406
439
@ Override
@@ -427,8 +460,8 @@ public void onFailure(EmailUpdateError error) {
427
460
static class OSFlutterSMSHandler extends OSFlutterHandler
428
461
implements OneSignal .OSSMSUpdateHandler {
429
462
430
- OSFlutterSMSHandler (PluginRegistry . Registrar flutterRegistrar , MethodChannel channel , Result res , String methodName ) {
431
- super (flutterRegistrar , channel , res , methodName );
463
+ OSFlutterSMSHandler (BinaryMessenger messenger , MethodChannel channel , Result res , String methodName ) {
464
+ super (messenger , channel , res , methodName );
432
465
}
433
466
434
467
@ Override
@@ -457,8 +490,8 @@ public void onFailure(OneSignal.OSSMSUpdateError error) {
457
490
static class OSFlutterExternalUserIdHandler extends OSFlutterHandler
458
491
implements OneSignal .OSExternalUserIdUpdateCompletionHandler {
459
492
460
- OSFlutterExternalUserIdHandler (PluginRegistry . Registrar flutterRegistrar , MethodChannel channel , Result res , String methodName ) {
461
- super (flutterRegistrar , channel , res , methodName );
493
+ OSFlutterExternalUserIdHandler (BinaryMessenger messenger , MethodChannel channel , Result res , String methodName ) {
494
+ super (messenger , channel , res , methodName );
462
495
}
463
496
464
497
@ Override
@@ -487,8 +520,8 @@ public void onFailure(OneSignal.ExternalIdError error) {
487
520
static class OSFlutterPostNotificationHandler extends OSFlutterHandler
488
521
implements OneSignal .PostNotificationResponseHandler {
489
522
490
- OSFlutterPostNotificationHandler (PluginRegistry . Registrar flutterRegistrar , MethodChannel channel , Result res , String methodName ) {
491
- super (flutterRegistrar , channel , res , methodName );
523
+ OSFlutterPostNotificationHandler (BinaryMessenger messenger , MethodChannel channel , Result res , String methodName ) {
524
+ super (messenger , channel , res , methodName );
492
525
}
493
526
494
527
@ Override
@@ -525,8 +558,8 @@ static class OSFlutterHandler extends FlutterRegistrarResponder {
525
558
protected final String methodName ;
526
559
protected final AtomicBoolean replySubmitted = new AtomicBoolean (false );
527
560
528
- OSFlutterHandler (PluginRegistry . Registrar flutterRegistrar , MethodChannel channel , Result res , String methodName ) {
529
- this .flutterRegistrar = flutterRegistrar ;
561
+ OSFlutterHandler (BinaryMessenger messenger , MethodChannel channel , Result res , String methodName ) {
562
+ this .messenger = messenger ;
530
563
this .channel = channel ;
531
564
this .result = res ;
532
565
this .methodName = methodName ;
0 commit comments