OneSignal-Cordova-SDK
OneSignal-Cordova-SDK copied to clipboard
Add getters and observer for onesignal ID and external ID
Description
One Line Summary
Add getters for onesignal ID and external ID, and a user state observer to know when these values are changed.
Details
Motivation
From developer feedback and to support integration partners, we are exposing the onesignal ID and external ID with getters.
We also want to grant developers the ability to add observers that can be called when there is a change in user state.
Testing
Manual testing
Manually tested on:
- Pixel 7 Pro Emulator running Android 14
- iPhone 15 Pro running iOS 17.0.1
Tested adding observer for user state and calling new methods to access externalId and onesignalId. Ensured congruency between iOS and Android responses.
Affected code checklist
- [ ] Notifications
- [ ] Display
- [ ] Open
- [ ] Push Processing
- [ ] Confirm Deliveries
- [ ] Outcomes
- [ ] Sessions
- [ ] In-App Messaging
- [ ] REST API requests
- [X] Public API changes
Checklist
Overview
- [X] I have filled out all REQUIRED sections above
- [X] PR does one thing
- If it is hard to explain how any codes changes are related to each other then it most likely needs to be more than one PR
- [X] Any Public API changes are explained in the PR details and conform to existing APIs
Testing
- [X] I have included test coverage for these changes, or explained why they are not needed
- [X] All automated tests pass, or I explained why that is not possible
- [X] I have personally tested this on my device, or explained why that is not possible
Final pass
- [X] Code is as readable as possible.
- Simplify with less code, followed by splitting up code into well named functions and variables, followed by adding comments to the code.
- [X] I have reviewed this PR myself, ensuring it meets each checklist item
- WIP (Work In Progress) is ok, but explain what is still in progress and what you would like feedback on. Start the PR title with "WIP" to indicate this.
Everything looks good, the only callout is on the UserState object. If there's no external_id, it will fire with
{
"current": {
"onesignalId": "b22ad46f-b4c6-464d-8eb2-8225453f0524"
}
}
You'll need to set null explicitly to the object in native so that it will become:
{
"current": {
"externalId": null,
"onesignalId": "27757d1c-ea72-4cea-a4f8-ac1213e32a6d"
}
}
Good catch, @nan-li! I've updated!
Everything looks great, I just pulled logic into a helper method to translate values into null
since they are used in multiple places. In this commit.
And did a rebase on user_model/main branch.
This is my testing scenario:
- New app install, call getters for onesignal ID and external ID and see they are
null
.
OneSignal.User.getOnesignalId().then(res => {
console.log("getOnesignalId: " + res); // logs null
});
OneSignal.User.getExternalId().then(res => {
console.log("getExternalId: " + res); // logs null
});
- Observer fires once the onesignal ID is received.
{
"current": {
"externalId": null,
"onesignalId": "1234-abcd-1234-abcd-1234"
}
}
- Observer fires after calling login.
{
"current": {
"externalId": "my-euid",
"onesignalId": "1234-abcd-1234-abcd-1234"
}
}