From 9cd72572132151a41928cdbc0ba3a12d7f279668 Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Thu, 14 Nov 2024 12:29:10 -0800
Subject: [PATCH 1/8] Add JWT and event listener to wrapper
- Token added as parameter to login
- updateUserJwt
- UserJwtInvalidatedEvent
- Add & Remove Listener methods
---
www/index.ts | 58 ++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 52 insertions(+), 6 deletions(-)
diff --git a/www/index.ts b/www/index.ts
index 04a9f2c1..3ff85544 100644
--- a/www/index.ts
+++ b/www/index.ts
@@ -36,6 +36,10 @@ import LiveActivities from "./LiveActivitiesNamespace";
// Suppress TS warnings about window.cordova
declare let window: any; // turn off type checking
+export interface UserJwtInvalidatedEvent {
+ externalId ?: string;
+}
+
export class OneSignalPlugin {
User: User = new User();
Debug: Debug = new Debug();
@@ -47,6 +51,14 @@ export class OneSignalPlugin {
private _appID = "";
+ private _userJwtInvalidatedEventListenerList: ((event:UserJwtInvalidatedEvent)=>void)[] = [];
+
+ private _processFunctionList(array: ((event:any)=>void)[], param: any): void {
+ for (let i = 0; i < array.length; i++) {
+ array[i](param);
+ }
+ }
+
/**
* Initializes the OneSignal SDK. This should be called during startup of the application.
* @param {string} appId
@@ -64,23 +76,57 @@ export class OneSignalPlugin {
};
/**
- * Login to OneSignal under the user identified by the [externalId] provided. The act of logging a user into the OneSignal SDK will switch the [user] context to that specific user.
- * @param {string} externalId
+ * Log in to OneSignal under the user identified by the [externalId] provided. The act of logging a user into the OneSignal SDK will switch the [user] context to that specific user.
+ * @param {string} externalId
+ * @param {string} jwtToken
* @returns void
*/
- login(externalId: string): void {
- window.cordova.exec(function () { }, function () { }, "OneSignalPush", "login", [externalId]);
+ login(externalId: string, jwtToken: string): void {
+ window.cordova.exec(function () { }, function () { }, "OneSignalPush", "login", [externalId, jwtToken]);
}
/**
- * Logout the user previously logged in via [login]. The [user] property now references a new device-scoped user.
- * @param {string} externalId
+ * Log out the user previously logged in via [login]. The [user] property now references a new device-scoped user.
* @returns void
*/
logout(): void {
window.cordova.exec(function () { }, function () { }, "OneSignalPush", "logout");
}
+ /**
+ * Update the JWT token for a user.
+ * @param {string} externalId
+ * @param {string} jwtToken
+ */
+ updateUserJwt(externalId: string, jwtToken: string): void {
+ window.cordova.exec(function () { }, function () { }, "OneSignalPush", "updateUserJwt", [externalId, jwtToken]);
+ }
+
+ /**
+ * Add a callback that fires when the user's JWT is invalidated.
+ * @param event
+ * @param listener
+ */
+ addEventListener(event: "userJwtInvalidated", listener: (event: UserJwtInvalidatedEvent) => void) {
+ this._userJwtInvalidatedEventListenerList.push(listener as (event: UserJwtInvalidatedEvent) => void);
+ const userJwtInvalidatedCallBackProcessor = (event: UserJwtInvalidatedEvent) => {
+ this._processFunctionList(this._userJwtInvalidatedEventListenerList, event);
+ };
+ window.cordova.exec(userJwtInvalidatedCallBackProcessor, function(){}, "OneSignalPush", "addUserJwtInvalidatedListener", []);
+ }
+
+ /**
+ * Remove a UserJwtInvalidated Listener that has been previously added.
+ * @param event
+ * @param listener
+ */
+ removeEventListener(event: "userJwtInvalidated", listener: (event: UserJwtInvalidatedEvent) => void) {
+ let index = this._userJwtInvalidatedEventListenerList.indexOf(listener);
+ if (index !== -1) {
+ this._userJwtInvalidatedEventListenerList.splice(index, 1);
+ }
+ }
+
/**
* Determines whether a user must consent to privacy prior to their user data being sent up to OneSignal. This should be set to true prior to the invocation of initialization to ensure compliance.
* @param {boolean} required
From 266bf60c34d48d4fd1bb612d055d1e616bed0058 Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Thu, 14 Nov 2024 12:34:45 -0800
Subject: [PATCH 2/8] Add iOS implementation
- new methods updateUserJwt and addUserJwtInvalidatedListener added to the bridge
---
src/ios/OneSignalPush.h | 2 ++
src/ios/OneSignalPush.m | 15 ++++++++++++++-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/src/ios/OneSignalPush.h b/src/ios/OneSignalPush.h
index a2d0321b..93e3ae60 100644
--- a/src/ios/OneSignalPush.h
+++ b/src/ios/OneSignalPush.h
@@ -48,6 +48,8 @@
- (void)login:(CDVInvokedUrlCommand* _Nonnull)command;
- (void)logout:(CDVInvokedUrlCommand* _Nonnull)command;
+- (void)updateUserJwt:(CDVInvokedUrlCommand* _Nonnull)command;
+- (void)addUserJwtInvalidatedListener:(CDVInvokedUrlCommand* _Nonnull)command;
- (void)addTags:(CDVInvokedUrlCommand* _Nonnull)command;
- (void)removeTags:(CDVInvokedUrlCommand* _Nonnull)command;
diff --git a/src/ios/OneSignalPush.m b/src/ios/OneSignalPush.m
index 6476d48f..87f2c649 100644
--- a/src/ios/OneSignalPush.m
+++ b/src/ios/OneSignalPush.m
@@ -47,6 +47,7 @@
NSString* inAppMessageDidDismissCallbackId;
NSString* inAppMessageClickedCallbackId;
NSString* userObserverCallbackId;
+NSString* addUserJwtInvalidatedListenerCallbackId;
OSNotificationClickEvent *actionNotification;
OSNotification *notification;
@@ -367,13 +368,25 @@ - (void)setAlertLevel:(CDVInvokedUrlCommand*)command {
}
- (void)login:(CDVInvokedUrlCommand*)command {
- [OneSignal login:command.arguments[0]];
+ [OneSignal login:command.arguments[0] withToken:command.arguments[1]];
}
- (void)logout:(CDVInvokedUrlCommand*)command {
[OneSignal logout];
}
+- (void)updateUserJwt:(CDVInvokedUrlCommand*)command {
+ [OneSignal updateUserJwt:command.arguments[0] withToken:command.arguments[1]];
+}
+
+- (void)addUserJwtInvalidatedListener:(CDVInvokedUrlCommand*)command {
+ bool first = addUserJwtInvalidatedListenerCallbackId == nil;
+ addUserJwtInvalidatedListenerCallbackId = command.callbackId;
+ if (first) {
+ [OneSignal addUserJwtInvalidatedListener:self];
+ }
+}
+
- (void)addTags:(CDVInvokedUrlCommand*)command {
[OneSignal.User addTags:command.arguments[0]];
}
From 4c04a092bd48d5fd58b70ce943132ca8362c3176 Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Thu, 14 Nov 2024 12:40:09 -0800
Subject: [PATCH 3/8] Update example project to test identity verification
- iOS v. 5.3.0-beta-01
---
.../IonicCapOneSignal/ios/App/Podfile.lock | 32 +++++++++----------
plugin.xml | 2 +-
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/example/IonicCapOneSignal/ios/App/Podfile.lock b/example/IonicCapOneSignal/ios/App/Podfile.lock
index f88ad3ac..cbbf6afe 100644
--- a/example/IonicCapOneSignal/ios/App/Podfile.lock
+++ b/example/IonicCapOneSignal/ios/App/Podfile.lock
@@ -12,10 +12,10 @@ PODS:
- Capacitor
- CordovaPluginsStatic (6.0.0):
- CapacitorCordova
- - OneSignalXCFramework (= 5.2.7)
- - OneSignalXCFramework (5.2.7):
- - OneSignalXCFramework/OneSignalComplete (= 5.2.7)
- - OneSignalXCFramework/OneSignal (5.2.7):
+ - OneSignalXCFramework (= 5.3.0-beta-01)
+ - OneSignalXCFramework (5.3.0-beta-01):
+ - OneSignalXCFramework/OneSignalComplete (= 5.3.0-beta-01)
+ - OneSignalXCFramework/OneSignal (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalExtension
- OneSignalXCFramework/OneSignalLiveActivities
@@ -23,38 +23,38 @@ PODS:
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalOutcomes
- OneSignalXCFramework/OneSignalUser
- - OneSignalXCFramework/OneSignalComplete (5.2.7):
+ - OneSignalXCFramework/OneSignalComplete (5.3.0-beta-01):
- OneSignalXCFramework/OneSignal
- OneSignalXCFramework/OneSignalInAppMessages
- OneSignalXCFramework/OneSignalLocation
- - OneSignalXCFramework/OneSignalCore (5.2.7)
- - OneSignalXCFramework/OneSignalExtension (5.2.7):
+ - OneSignalXCFramework/OneSignalCore (5.3.0-beta-01)
+ - OneSignalXCFramework/OneSignalExtension (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalOutcomes
- - OneSignalXCFramework/OneSignalInAppMessages (5.2.7):
+ - OneSignalXCFramework/OneSignalInAppMessages (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalNotifications
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalOutcomes
- OneSignalXCFramework/OneSignalUser
- - OneSignalXCFramework/OneSignalLiveActivities (5.2.7):
+ - OneSignalXCFramework/OneSignalLiveActivities (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalUser
- - OneSignalXCFramework/OneSignalLocation (5.2.7):
+ - OneSignalXCFramework/OneSignalLocation (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalNotifications
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalUser
- - OneSignalXCFramework/OneSignalNotifications (5.2.7):
+ - OneSignalXCFramework/OneSignalNotifications (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalExtension
- OneSignalXCFramework/OneSignalOutcomes
- - OneSignalXCFramework/OneSignalOSCore (5.2.7):
+ - OneSignalXCFramework/OneSignalOSCore (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- - OneSignalXCFramework/OneSignalOutcomes (5.2.7):
+ - OneSignalXCFramework/OneSignalOutcomes (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- - OneSignalXCFramework/OneSignalUser (5.2.7):
+ - OneSignalXCFramework/OneSignalUser (5.3.0-beta-01):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalNotifications
- OneSignalXCFramework/OneSignalOSCore
@@ -97,8 +97,8 @@ SPEC CHECKSUMS:
CapacitorHaptics: 9ebc9363f0e9b8eb4295088a0b474530acf1859b
CapacitorKeyboard: deacbd09d8d1029c3681197fb05d206b721d5f73
CapacitorStatusBar: 2e4369f99166125435641b1908d05f561eaba6f6
- CordovaPluginsStatic: 44e859961f0bc894ddef3e9ae371a041443e11ec
- OneSignalXCFramework: c56f9470a6fb23048baf55e02740a09cfd32863c
+ CordovaPluginsStatic: ec3f38153034076a0419390445f43486bdca03ce
+ OneSignalXCFramework: b859cf761f5437ff56a2a9fd158e67d74cd3bcfc
PODFILE CHECKSUM: 178e2a2e451311a871c2b4db713ac4b63d0ebeeb
diff --git a/plugin.xml b/plugin.xml
index 7b507084..301fab26 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -85,7 +85,7 @@
-
+
From 4a6ac89ca9fbd3ead9dbccc9727c3123b89152fc Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Wed, 20 Nov 2024 16:27:17 -0800
Subject: [PATCH 4/8] Make jwt token optional
---
src/ios/OneSignalPush.m | 5 ++++-
www/index.ts | 7 ++++---
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/ios/OneSignalPush.m b/src/ios/OneSignalPush.m
index 87f2c649..4484b3d5 100644
--- a/src/ios/OneSignalPush.m
+++ b/src/ios/OneSignalPush.m
@@ -368,7 +368,10 @@ - (void)setAlertLevel:(CDVInvokedUrlCommand*)command {
}
- (void)login:(CDVInvokedUrlCommand*)command {
- [OneSignal login:command.arguments[0] withToken:command.arguments[1]];
+ NSString *externalId = command.arguments[0];
+ NSString *jwtToken = command.arguments.count > 1 ? command.arguments[1] : nil;
+
+ [OneSignal login:externalId withToken:jwtToken];
}
- (void)logout:(CDVInvokedUrlCommand*)command {
diff --git a/www/index.ts b/www/index.ts
index 3ff85544..ba49f17b 100644
--- a/www/index.ts
+++ b/www/index.ts
@@ -78,11 +78,12 @@ export class OneSignalPlugin {
/**
* Log in to OneSignal under the user identified by the [externalId] provided. The act of logging a user into the OneSignal SDK will switch the [user] context to that specific user.
* @param {string} externalId
- * @param {string} jwtToken
+ * @param {string} jwtToken - Optional
* @returns void
*/
- login(externalId: string, jwtToken: string): void {
- window.cordova.exec(function () { }, function () { }, "OneSignalPush", "login", [externalId, jwtToken]);
+ login(externalId: string, jwtToken?: string): void {
+ const args = jwtToken ? [externalId, jwtToken] : [externalId];
+ window.cordova.exec(function () { }, function () { }, "OneSignalPush", "login", args);
}
/**
From 55f5ba9870f3cfdc5d141df9c8cbdff52403c516 Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Thu, 5 Dec 2024 14:26:19 -0800
Subject: [PATCH 5/8] Make externalId nonoptional for UserJwtInvalidatedEvent
---
www/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/www/index.ts b/www/index.ts
index ba49f17b..f617f75a 100644
--- a/www/index.ts
+++ b/www/index.ts
@@ -37,7 +37,7 @@ import LiveActivities from "./LiveActivitiesNamespace";
declare let window: any; // turn off type checking
export interface UserJwtInvalidatedEvent {
- externalId ?: string;
+ externalId: string;
}
export class OneSignalPlugin {
From 020a9c8720623714a91fcdd860e1b47ba057457d Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Thu, 5 Dec 2024 14:28:36 -0800
Subject: [PATCH 6/8] Add inline documentation
- Make it clear that null must be passed to native layer
---
src/ios/OneSignalPush.m | 1 +
www/index.ts | 1 +
2 files changed, 2 insertions(+)
diff --git a/src/ios/OneSignalPush.m b/src/ios/OneSignalPush.m
index 4484b3d5..c5c053af 100644
--- a/src/ios/OneSignalPush.m
+++ b/src/ios/OneSignalPush.m
@@ -369,6 +369,7 @@ - (void)setAlertLevel:(CDVInvokedUrlCommand*)command {
- (void)login:(CDVInvokedUrlCommand*)command {
NSString *externalId = command.arguments[0];
+ // check if jwt token provided
NSString *jwtToken = command.arguments.count > 1 ? command.arguments[1] : nil;
[OneSignal login:externalId withToken:jwtToken];
diff --git a/www/index.ts b/www/index.ts
index f617f75a..a88db14c 100644
--- a/www/index.ts
+++ b/www/index.ts
@@ -82,6 +82,7 @@ export class OneSignalPlugin {
* @returns void
*/
login(externalId: string, jwtToken?: string): void {
+ // if no jwt token, pass null
const args = jwtToken ? [externalId, jwtToken] : [externalId];
window.cordova.exec(function () { }, function () { }, "OneSignalPush", "login", args);
}
From 8077f0281ecebf813ef6c7ef97b987c8df63a241 Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Thu, 5 Dec 2024 14:29:20 -0800
Subject: [PATCH 7/8] Change parameter name to match native implementation
---
www/index.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/www/index.ts b/www/index.ts
index a88db14c..647f7844 100644
--- a/www/index.ts
+++ b/www/index.ts
@@ -98,10 +98,10 @@ export class OneSignalPlugin {
/**
* Update the JWT token for a user.
* @param {string} externalId
- * @param {string} jwtToken
+ * @param {string} token
*/
- updateUserJwt(externalId: string, jwtToken: string): void {
- window.cordova.exec(function () { }, function () { }, "OneSignalPush", "updateUserJwt", [externalId, jwtToken]);
+ updateUserJwt(externalId: string, token: string): void {
+ window.cordova.exec(function () { }, function () { }, "OneSignalPush", "updateUserJwt", [externalId, token]);
}
/**
From 087222aec60451cf6165b34ad041a3f599fe82e2 Mon Sep 17 00:00:00 2001
From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com>
Date: Thu, 5 Dec 2024 14:30:36 -0800
Subject: [PATCH 8/8] Update iOS header
- Explicitly add that this class conforms to OSUserJwtInvalidatedListener protocol
---
src/ios/OneSignalPush.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ios/OneSignalPush.h b/src/ios/OneSignalPush.h
index 93e3ae60..78fad08f 100644
--- a/src/ios/OneSignalPush.h
+++ b/src/ios/OneSignalPush.h
@@ -31,7 +31,7 @@
#import
-@interface OneSignalPush : CDVPlugin
+@interface OneSignalPush : CDVPlugin
- (void)setProvidesNotificationSettingsView:(CDVInvokedUrlCommand* _Nonnull)command;
- (void)addForegroundLifecycleListener:(CDVInvokedUrlCommand* _Nonnull)command;