Skip to content

Commit 90e5cd0

Browse files
committed
Adding Android implementation behind methods and handlers in the User, pushSubscription and OneSignal namespaces
1 parent 8b94685 commit 90e5cd0

File tree

8 files changed

+296
-33
lines changed

8 files changed

+296
-33
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ public class OneSignalInAppMessages extends FlutterRegistrarResponder implements
2323
private IInAppMessageClickResult inAppMessageClickedResult;
2424
private boolean hasSetInAppMessageClickedHandler = false;
2525

26-
27-
2826
static void registerWith(BinaryMessenger messenger) {
2927
OneSignalInAppMessages sharedInstance = new OneSignalInAppMessages();
3028

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

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
88

99
import com.onesignal.OneSignal;
10+
import com.onesignal.Continue;
1011

1112
import org.json.JSONException;
1213
import org.json.JSONObject;
@@ -50,6 +51,8 @@ private void init(Context context, BinaryMessenger messenger)
5051
OneSignalLocation.registerWith(messenger);
5152
OneSignalSession.registerWith(messenger);
5253
OneSignalInAppMessages.registerWith(messenger);
54+
OneSignalUser.registerWith(messenger);
55+
OneSignalPushSubscription.registerWith(messenger);
5356
// OneSignalTagsController.registerWith(messenger);
5457
// OneSignalInAppMessagingController.registerWith(messenger);
5558
// OneSignalOutcomeEventsController.registerWith(messenger);
@@ -112,7 +115,18 @@ public boolean onViewDestroy(FlutterNativeView flutterNativeView) {
112115
public void onMethodCall(MethodCall call, Result result) {
113116
if (call.method.contentEquals("OneSignal#initialize"))
114117
this.initWithContext(call, result);
115-
else
118+
else if (call.method.contentEquals("OneSignal#getRequiresPrivacyConsent"))
119+
replySuccess(result, OneSignal.getRequiresPrivacyConsent());
120+
else if (call.method.contentEquals("OneSignal#setRequiresPrivacyConsent"))
121+
this.setRequiresPrivacyConsent(call, result);
122+
else if (call.method.contentEquals("OneSignal#getPrivacyConsent"))
123+
replySuccess(result, OneSignal.getPrivacyConsent());
124+
else if (call.method.contentEquals("OneSignal#setPrivacyConsent"))
125+
this.setPrivacyConsent(call, result);
126+
else if (call.method.contentEquals("OneSignal#login"))
127+
this.login(call, result);
128+
else if (call.method.contentEquals("OneSignal#logout"))
129+
this.logout(call, result);
116130
replyNotImplemented(result);
117131
}
118132

@@ -127,6 +141,30 @@ private void initWithContext(MethodCall call, Result reply) {
127141
replySuccess(reply, null);
128142
}
129143

144+
private void setRequiresPrivacyConsent(MethodCall call, Result reply) {
145+
boolean required = call.argument("required");
146+
147+
OneSignal.setRequiresPrivacyConsent(required);
148+
149+
replySuccess(reply, null);
150+
}
151+
152+
private void setPrivacyConsent(MethodCall call, Result reply) {
153+
boolean granted = call.argument("granted");
154+
OneSignal.setPrivacyConsent(granted);
155+
156+
replySuccess(reply, null);
157+
}
158+
159+
private void login(MethodCall call, Result result) {
160+
OneSignal.login((String) call.argument("externalId"));
161+
replySuccess(result, null);
162+
}
163+
private void logout(MethodCall call, Result result) {
164+
OneSignal.logout();
165+
replySuccess(result, null);
166+
}
167+
130168
static class OSFlutterHandler extends FlutterRegistrarResponder {
131169
protected final Result result;
132170
protected final String methodName;
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.onesignal.flutter;
2+
3+
import com.onesignal.OneSignal;
4+
5+
import com.onesignal.user.subscriptions.IPushSubscription;
6+
import com.onesignal.user.subscriptions.ISubscription;
7+
import com.onesignal.user.subscriptions.ISubscriptionChangedHandler;
8+
9+
import org.json.JSONException;
10+
import org.json.JSONObject;
11+
12+
import java.util.List;
13+
import java.util.Map;
14+
import java.util.concurrent.atomic.AtomicBoolean;
15+
16+
import io.flutter.plugin.common.BinaryMessenger;
17+
import io.flutter.plugin.common.MethodCall;
18+
import io.flutter.plugin.common.MethodChannel;
19+
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
20+
import io.flutter.plugin.common.MethodChannel.Result;
21+
import io.flutter.plugin.common.PluginRegistry;
22+
import io.flutter.plugin.common.PluginRegistry.Registrar;
23+
24+
public class OneSignalPushSubscription extends FlutterRegistrarResponder implements MethodCallHandler {
25+
private MethodChannel channel;
26+
27+
static void registerWith(BinaryMessenger messenger) {
28+
OneSignalPushSubscription controller = new OneSignalPushSubscription();
29+
controller.messenger = messenger;
30+
controller.channel = new MethodChannel(messenger, "OneSignal#pushsubscription");
31+
controller.channel.setMethodCallHandler(controller);
32+
}
33+
34+
@Override
35+
public void onMethodCall(MethodCall call, Result result) {
36+
if (call.method.contentEquals("OneSignal#optIn"))
37+
this.optIn(call, result);
38+
else if (call.method.contentEquals("OneSignal#optOut"))
39+
this.optOut(call, result);
40+
else if (call.method.contentEquals("OneSignal#pushSubscriptionId"))
41+
replySuccess(result, OneSignal.getUser().getPushSubscription().getId());
42+
else if (call.method.contentEquals("OneSignal#pushSubscriptionToken"))
43+
replySuccess(result, OneSignal.getUser().getPushSubscription().getToken());
44+
else if (call.method.contentEquals("OneSignal#pushSubscriptionOptedIn"))
45+
replySuccess(result, OneSignal.getUser().getPushSubscription().getOptedIn());
46+
else if (call.method.contentEquals("OneSignal#lifecycleInit"))
47+
this.lifecycleInit();
48+
else
49+
replyNotImplemented(result);
50+
}
51+
52+
private void optIn(MethodCall call, Result reply) {
53+
OneSignal.getUser().getPushSubscription().optIn();
54+
replySuccess(reply, null);
55+
}
56+
private void optOut(MethodCall call, Result reply) {
57+
OneSignal.getUser().getPushSubscription().optOut();
58+
replySuccess(reply, null);
59+
}
60+
61+
public void lifecycleInit() {
62+
OneSignal.getUser().getPushSubscription().addChangeHandler(new ISubscriptionChangedHandler() {
63+
@Override
64+
public void onSubscriptionChanged(ISubscription subscription) {
65+
if (!(subscription instanceof IPushSubscription)){
66+
return;
67+
}
68+
IPushSubscription pushSubscription = (IPushSubscription) subscription;
69+
70+
channel.invokeMethod("OneSignal#onSubscriptionChanged", OneSignalSerializer.convertOnSubscriptionChanged(pushSubscription));
71+
}
72+
73+
});
74+
}
75+
76+
77+
}

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import android.util.Log;
44

5+
import com.onesignal.user.subscriptions.ISubscription;
6+
import com.onesignal.user.subscriptions.IPushSubscription;
57

68
import com.onesignal.inAppMessages.IInAppMessage;
7-
import com.onesignal.inAppMessages.IInAppMessageClickHandler;
89
import com.onesignal.inAppMessages.IInAppMessageClickResult;
9-
import com.onesignal.inAppMessages.IInAppMessageLifecycleHandler;
1010

1111
import org.json.JSONArray;
1212
import org.json.JSONException;
@@ -37,6 +37,17 @@ static HashMap<String, Object> convertInAppMessageToMap(IInAppMessage message) {
3737
return hash;
3838
}
3939

40+
static HashMap<String, Object> convertOnSubscriptionChanged(IPushSubscription state) {
41+
HashMap<String, Object> hash = new HashMap<>();
42+
43+
44+
hash.put("token", state.getToken());
45+
hash.put("pushId", state.getId());
46+
hash.put("optedIn", state.getOptedIn());
47+
48+
return hash;
49+
}
50+
4051

4152
static HashMap<String, Object> convertJSONObjectToHashMap(JSONObject object) throws JSONException {
4253
HashMap<String, Object> hash = new HashMap<>();
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package com.onesignal.flutter;
2+
3+
import com.onesignal.OneSignal;
4+
import com.onesignal.debug.LogLevel;
5+
6+
import org.json.JSONException;
7+
import org.json.JSONObject;
8+
9+
import java.util.List;
10+
import java.util.Map;
11+
import java.util.concurrent.atomic.AtomicBoolean;
12+
13+
import io.flutter.plugin.common.BinaryMessenger;
14+
import io.flutter.plugin.common.MethodCall;
15+
import io.flutter.plugin.common.MethodChannel;
16+
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
17+
import io.flutter.plugin.common.MethodChannel.Result;
18+
import io.flutter.plugin.common.PluginRegistry;
19+
import io.flutter.plugin.common.PluginRegistry.Registrar;
20+
21+
public class OneSignalUser extends FlutterRegistrarResponder implements MethodCallHandler {
22+
private MethodChannel channel;
23+
24+
static void registerWith(BinaryMessenger messenger) {
25+
OneSignalUser controller = new OneSignalUser();
26+
controller.messenger = messenger;
27+
controller.channel = new MethodChannel(messenger, "OneSignal#user");
28+
controller.channel.setMethodCallHandler(controller);
29+
}
30+
31+
@Override
32+
public void onMethodCall(MethodCall call, Result result) {
33+
if (call.method.contentEquals("OneSignal#setLanguage"))
34+
this.setLanguage(call, result);
35+
else if (call.method.contentEquals("OneSignal#addAliases"))
36+
this.addAliases(call, result);
37+
else if (call.method.contentEquals("OneSignal#removeAliases"))
38+
this.removeAliases(call, result);
39+
else if (call.method.contentEquals("OneSignal#addEmail"))
40+
this.addEmail(call, result);
41+
else if (call.method.contentEquals("OneSignal#removeEmail"))
42+
this.removeEmail(call, result);
43+
else if (call.method.contentEquals("OneSignal#addSms"))
44+
this.addSms(call, result);
45+
else if (call.method.contentEquals("OneSignal#removeSMS"))
46+
this.removeSms(call, result);
47+
else if (call.method.contentEquals("OneSignal#addTags"))
48+
this.addTags(call, result);
49+
else if (call.method.contentEquals("OneSignal#removeTags"))
50+
this.removeTags(call, result);
51+
else
52+
replyNotImplemented(result);
53+
}
54+
55+
private void setLanguage(MethodCall call, final Result result) {
56+
String language = call.argument("language");
57+
if (language != null && language.length() == 0)
58+
language = null;
59+
60+
OneSignal.getUser().setLanguage(language);
61+
}
62+
63+
private void addAliases(MethodCall call, Result result) {
64+
// call.arguments is being casted to a Map<String, Object> so a try-catch with
65+
// a ClassCastException will be thrown
66+
try {
67+
OneSignal.getUser().addAliases((Map<String, String>) call.arguments);
68+
} catch(ClassCastException e) {
69+
replyError(result, "OneSignal", "addAliases failed with error: " + e.getMessage() + "\n" + e.getStackTrace(), null);
70+
}
71+
}
72+
73+
private void removeAliases(MethodCall call, Result result) {
74+
// call.arguments is being casted to a List<String> so a try-catch with
75+
// a ClassCastException will be thrown
76+
try {
77+
OneSignal.getUser().removeAliases((List<String>) call.arguments);
78+
} catch(ClassCastException e) {
79+
replyError(result, "OneSignal", "removeAliases failed with error: " + e.getMessage() + "\n" + e.getStackTrace(), null);
80+
}
81+
}
82+
83+
private void addEmail(MethodCall call, final Result reply) {
84+
String email = call.argument("email");
85+
86+
OneSignal.getUser().addEmail(email);
87+
}
88+
89+
private void removeEmail(MethodCall call, final Result reply) {
90+
String email = call.argument("email");
91+
OneSignal.getUser().removeEmail(email);
92+
}
93+
94+
private void addSms(MethodCall call, final Result reply) {
95+
String smsNumber = call.argument("smsNumber");
96+
97+
OneSignal.getUser().addSms(smsNumber);
98+
}
99+
100+
private void removeSms(MethodCall call, final Result reply) {
101+
String smsNumber = call.argument("smsNumber");
102+
OneSignal.getUser().removeSms(smsNumber);
103+
}
104+
private void addTags(MethodCall call, Result result) {
105+
// call.arguments is being casted to a Map<String, Object> so a try-catch with
106+
// a ClassCastException will be thrown
107+
try {
108+
OneSignal.getUser().addTags((Map<String, String>) call.arguments);
109+
} catch(ClassCastException e) {
110+
replyError(result, "OneSignal", "addTags failed with error: " + e.getMessage() + "\n" + e.getStackTrace(), null);
111+
}
112+
}
113+
114+
private void removeTags(MethodCall call, Result result) {
115+
// call.arguments is being casted to a List<String> so a try-catch with
116+
// a ClassCastException will be thrown
117+
try {
118+
OneSignal.getUser().removeTags((List<String>) call.arguments);
119+
} catch(ClassCastException e) {
120+
replyError(result, "OneSignal", "deleteTags failed with error: " + e.getMessage() + "\n" + e.getStackTrace(), null);
121+
}
122+
}
123+
124+
125+
}

ios/Classes/OneSignalPlugin.m

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,21 @@ + (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
8383

8484
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
8585
if ([@"OneSignal#initialize" isEqualToString:call.method])
86-
[self initialize:call];
86+
[self initialize:call withResult:result];
8787
else if ([@"OneSignal#login" isEqualToString:call.method])
88-
[self login:call];
88+
[self login:call withResult:result];
89+
else if ([@"OneSignal#login" isEqualToString:call.method])
90+
[self logout:call withResult:result];
8991
else if ([@"OneSignal#getPrivacyConsent" isEqualToString:call.method])
9092
result(@(OneSignal.getPrivacyConsent));
9193
else if ([@"OneSignal#setPrivacyConsent" isEqualToString:call.method])
92-
[self setPrivacyConsent:call];
94+
[self setPrivacyConsent:call withResult:result];
9395
else if ([@"OneSignal#requiresPrivacyConsent" isEqualToString:call.method])
9496
result(@(OneSignal.requiresPrivacyConsent));
9597
else if ([@"OneSignal#setRequiresPrivacyConsent" isEqualToString:call.method])
96-
[self setRequiresPrivacyConsent:call];
98+
[self setRequiresPrivacyConsent:call withResult:result];
9799
else if ([@"OneSignal#setLaunchURLsInApp" isEqualToString:call.method])
98-
[self setLaunchURLsInApp:call];
100+
[self setLaunchURLsInApp:call withResult:result];
99101
else if ([@"OneSignal#enterLiveActivity" isEqualToString:call.method])
100102
[self enterLiveActivity:call withResult:result];
101103
else if ([@"OneSignal#exitLiveActivity" isEqualToString:call.method])
@@ -122,31 +124,36 @@ - (void)initialize:(FlutterMethodCall *)call {
122124

123125
#pragma mark Login Logout
124126

125-
- (void)login:(FlutterMethodCall *)call {
127+
- (void)login:(FlutterMethodCall *)call withResult:(FlutterResult)result{
126128
[OneSignal login:call.arguments[@"externalId"]];
129+
result(nil);
127130
}
128131

129-
- (void)logout:(FlutterMethodCall *)call {
132+
- (void)logout:(FlutterMethodCall *)call withResult:(FlutterResult)result{
130133
[OneSignal logout];
134+
result(nil);
131135
}
132136

133137
#pragma mark Privacy Consent
134138

135-
- (void)setPrivacyConsent:(FlutterMethodCall *)call {
139+
- (void)setPrivacyConsent:(FlutterMethodCall *)call withResult:(FlutterResult)result{
136140
BOOL granted = [call.arguments[@"granted"] boolValue];
137141
[OneSignal setPrivacyConsent:granted];
142+
result(nil);
138143
}
139144

140-
- (void)setRequiresPrivacyConsent:(FlutterMethodCall *)call {
145+
- (void)setRequiresPrivacyConsent:(FlutterMethodCall *)call withResult:(FlutterResult)result{
141146
BOOL required = [call.arguments[@"required"] boolValue];
142147
[OneSignal setRequiresPrivacyConsent:required];
148+
result(nil);
143149
}
144150

145151
#pragma mark Launch Urls In App
146152

147-
- (void)setLaunchURLsInApp:(FlutterMethodCall *)call {
153+
- (void)setLaunchURLsInApp:(FlutterMethodCall *)call withResult:(FlutterResult)result{
148154
BOOL launchUrlsInApp = [call.arguments[@"launchUrlsInApp"] boolValue];
149155
[OneSignal setLaunchURLsInApp:launchUrlsInApp];
156+
result(nil);
150157
}
151158

152159
#pragma mark Live Activity

lib/onesignal_flutter.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class OneSignal {
4141
void initialize(String appId) {
4242
_channel.invokeMethod('OneSignal#initialize', {'appId': appId});
4343
InAppMessages.lifecycleInit();
44+
User.pushSubscription.lifecycleInit();
4445
}
4546

4647
/// Login to OneSignal under the user identified by the [externalId] provided.

0 commit comments

Comments
 (0)